コンテンツにスキップ

アプリ起動時の通知表示

通知受信後に通知を開封せずにアプリを起動した際に直前に受信した通知を表示することができます。(起動時通知)
通知のタイプによって動作を変えることが可能です。
デフォルトでは、動画またはGIFが添付された通知で起動時通知が有効になっています。

起動時通知の設定

// Class RFApp
static func setLaunchMode(modes:[RFContentType]?)
// Class RFApp
+ setLaunchMode:
パラメータ 内容
modes 起動時通知を有効にする通知の種類


起動時通知を設定できる通知の種類

public enum RFContentType {
    case text    //テキストのみ
    case image   //静止画像
    case gif     //GIF
    case movie   //動画
}
typedef NS_OPTIONS(NSUInteger, RFLaunchModes) {
    RFLaunchModeNone    = 0,
    RFLaunchModeText   = (1 << 0),  //テキストのみ
    RFLaunchModeImage  = (1 << 1),  //静止画像
    RFLaunchModeGif    = (1 << 2),  //GIF画像
    RFLaunchModeMovie  = (1 << 3)   //動画
};

実装例

iOS SDK27について

iOS SDK27からはUISceneの実装が必須となり、画面(Window)の生成はAppDelegateではなくSceneDelegateで行う仕様となりました。
setLaunchModeはこれまで通りAppDelegateのdidFinishLaunchingWithOptions内で呼び出しますが、requestAuthorizationは画面生成後に呼び出す必要があるため、SceneDelegate側で呼び出す実装に変更してください。
詳しい構成は初期化のiOS SDK27向け実装例を参照してください。

Swift

class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication,
                    didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // 管理サイトで発行されたSDK実行キーを設定
        RFApp.setServiceKey(serviceKey: "1234567890",
            appGroupId: "group.jp.co.infocity.richflyer",
            sandbox: false)

        // 通知のDelegate設定
        RFApp.setRFNotficationDelegate(delegate: self)

        // OSに対してプッシュ通知受信の許可をリクエスト                                      
        RFApp.requestAuthorization(application: UIApplication.shared, applicationDelegate: self)

        // 動画と静止画が添付された通知のみ起動時通知を行う
        RFApp.setLaunchMode(modes: [.movie, .image])
        // 起動時通知を行わない
        //RFApp.setLaunchMode(modes: [])

        return true
    }
}


RFNotificationDelegateの実装(カスタムアクションボタンが押された時の情報取得)


注意

通知センターからの通知開封時の処理とは別に実装する必要があります。

@available(iOS 10, *)
// RFNotificationDelegateの実装
extension AppDelegate: RFNotificationDelegate {
    // アクションボタンが押された際の動作
    func dismissedContentDisplay(_ action: RFAction?, content: RFContent?) {
        // 通知の情報を取得
        if let content = content {
            // 通知IDを取得
            let notificationId = content.notificationId
        }

        // カスタムアクションの情報を取得
        if let action = action {
            // カスタムアクションボタンのラベル
            let title = action.title
            // カスタムアクションボタンに設定されている値
            let value = action.value
            // カスタムアクションボタンのタイプ(url, scheme)
            let type = action.type
        }
    }
}
Objective-C

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 管理サイトで発行されたSDK実行キーを設定
    [RFApp setServiceKey:@"1234567890" appGroupId:@"group.jp.co.infocity.richflyer" sandbox:NO];

    // delegateの設定
    [RFApp setRFNotificationDelegate:self];

    // OSにプッシュ通知の受信許可をリクエスト
    [RFApp requestAuthorization:[UIApplication sharedApplication]
                                applicationDelegate:self];

    // 動画と静止画が添付された通知のみ起動時通知を行う
    [RFApp setLaunchMode:RFLaunchModeImage|RFLaunchModeMovie];
    // 起動時通知を行わない
    // [RFApp setLaunchMode:RFLaunchModeNone];

    return YES;
}

@end


RFNotificationDelegateの実装(カスタムアクションボタンが押された時の情報取得)

注意

通知センターからの通知開封時の処理とは別に実装する必要があります。

@implementation AppDelegate

// アクションボタンが押された際の動作
- (void)dismissedContentDisplay:(RFAction *)action content:(RFContent*)content
{
    // 通知IDの取得
    NSString* notificationId = content.notificationId;

    // カスタムアクションボタンのラベル
    NSString* title = [action getTitle];
    // カスタムアクションボタンに設定されている値
    NSString* value = [action getValue];
    // カスタムアクションボタンのタイプ(url, scheme)
    NSString* type = [action getType];
}

@end

実装例(iOS SDK27〜 UIScene対応の場合)

Swift

AppDelegate.swift

class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication,
                    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // 管理サイトで発行されたSDK実行キーを設定
        RFApp.setServiceKey(serviceKey: "1234567890",
            appGroupId: "group.jp.co.infocity.richflyer",
            sandbox: false)

        // 通知のDelegate設定
        RFApp.setRFNotficationDelegate(delegate: self)

        // 動画と静止画が添付された通知のみ起動時通知を行う
        RFApp.setLaunchMode(modes: [.movie, .image])
        // 起動時通知を行わない
        //RFApp.setLaunchMode(modes: [])

        return true
    }

    // UISceneの設定(iOS SDK27より必須)
    func application(_ application: UIApplication,
                      configurationForConnecting connectingSceneSession: UISceneSession,
                      options: UIScene.ConnectionOptions) -> UISceneConfiguration {
        return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
    }
}

SceneDelegate.swift

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let windowScene = (scene as? UIWindowScene) else { return }

        // 画面(Window)の生成
        let window = UIWindow(windowScene: windowScene)
        // window.rootViewController = ...
        window.makeKeyAndVisible()
        self.window = window

        // OSに対してプッシュ通知受信の許可をリクエスト
        RFApp.requestAuthorization(application: UIApplication.shared, applicationDelegate: UIApplication.shared.delegate!)
    }
}

RFNotificationDelegateの実装(起動時通知が閉じられた時の情報取得)は、上記の「実装例」のAppDelegateの実装と同様です。

Objective-C

AppDelegate.m

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 管理サイトで発行されたSDK実行キーを設定
    [RFApp setServiceKey:@"1234567890" appGroupId:@"group.jp.co.infocity.richflyer" sandbox:NO];

    // delegateの設定
    [RFApp setRFNotificationDelegate:self];

    // 動画と静止画が添付された通知のみ起動時通知を行う
    [RFApp setLaunchMode:RFLaunchModeImage|RFLaunchModeMovie];
    // 起動時通知を行わない
    // [RFApp setLaunchMode:RFLaunchModeNone];

    return YES;
}

// UISceneの設定(iOS SDK27より必須)
- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options {
    return [[UISceneConfiguration alloc] initWithName:@"Default Configuration" sessionRole:connectingSceneSession.role];
}

@end

SceneDelegate.m

@implementation SceneDelegate

- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
    if (![scene isKindOfClass:[UIWindowScene class]]) {
        return;
    }
    UIWindowScene *windowScene = (UIWindowScene *)scene;

    // 画面(Window)の生成
    self.window = [[UIWindow alloc] initWithWindowScene:windowScene];
    // self.window.rootViewController = ...
    [self.window makeKeyAndVisible];

    // OSにプッシュ通知の受信許可をリクエスト
    [RFApp requestAuthorization:[UIApplication sharedApplication]
                                applicationDelegate:[UIApplication sharedApplication].delegate];
}

@end

RFNotificationDelegateの実装(起動時通知が閉じられた時の情報取得)は、上記の「実装例」のAppDelegateの実装と同様です。