管理者メッセージの受信

管理者メッセージは、受信ハンドラー および ユーザーアクションのハンドラー で受け取ります。

以下のサンプルコードでは、AppDelegate クラスの application(_:didReceiveRemoteNotification:fetchCompletionHandler:) メソッドで、プッシュ通知の詳細を取得する例を示します。

Swift 3:

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
  print("Received notification : \(userInfo)")

  // Create a KiiReceivedMessage instance from userInfo.
  // But note that the KiiReceivedMessage class is not used to process Direct Push messages.
  let message = KiiReceivedMessage(fromAPNS: userInfo)

  // Extract field values set in the developer portal.
  let value1 = userInfo["MyKey1"]
  let value2 = userInfo["MyKey2"]
  print("Value1=\(value1)")
  print("Value2=\(value2)")

  completionHandler(.newData)
}

Objective-C:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result)) completionHandler {
  NSLog(@"Received notification: %@", userInfo);

  // Create a KiiReceivedMessage instance from userInfo.
  // But note that the KiiReceivedMessage class is not used to process Direct Push messages.
  KiiReceivedMessage *message = [KiiReceivedMessage messageFromAPNS:userInfo];

  // Extract field values set in the developer portal.
  NSString *value1 = [userInfo objectForKey:@"MyKey1"];
  NSString *value2 = [userInfo objectForKey:@"MyKey2"];
  NSLog(@"Value1=%@", value1);
  NSLog(@"Value2=%@", value2);

  completionHandler(UIBackgroundFetchResultNewData);
}

このサンプルコードでは、受信ハンドラー でプッシュ通知を受信しています。

サンプルコードでは KiiReceivedMessage インスタンスを作成していますが、管理者メッセージのプッシュ通知では使用しません。

管理者メッセージのプッシュ通知では、開発者ポータルで設定した値を userInfo から取得して利用します。このサンプルコードでは、開発者ポータルで MyKey1 キーと MyKey2 キーにカスタムデータを設定したと仮定し、それらを取得して Xcode にデバッグ出力しています。

通知センターからのプッシュメッセージを扱う場合は、ユーザーアクションのハンドラー も同様に実装します。このサンプルコードと同様、userInfo を使って、開発者ポータルで設定した値を取得します。

なお、受信ハンドラーとユーザーアクションのハンドラーが連続して呼び出されたり、1 回のプッシュ通知で複数回の呼び出しが発生する場合があります。受信メソッドの組み合わせ に示すメソッドの呼び出しタイミングに従って、重複する処理の削除などの機能を作り込んでください。

プッシュ通知を期待どおりに受け取れない場合、トラブルシューティング を参考に問題を解決してください。また、プッシュ通知設定チュートリアル にあるシンプルな実装によって、プッシュ通知の動作だけを検証することもできます。

プッシュ通知の種類の判定

プッシュ通知の受信ハンドラーと、ユーザーアクションのハンドラーでは、このモバイルアプリに対するすべてのプッシュ通知を受け取ります。

モバイルアプリに対して通知されたメッセージが、サーバー上変更のプッシュ通知、ユーザープッシュ通知、管理者メッセージのプッシュ通知のうちどの機能で生成されたかは、ペイロード内のキーを確認することで識別できます。appledoc の KiiReceivedMessage の説明には、機能ごとに参照可能なフィールドが記載されています。これを元に、プッシュ通知の機能の種類を判断してください。

プッシュメッセージの例

以下は、プッシュメッセージを受け取ったとき、userInfo によって取得できるデータのイメージです。管理者メッセージのプッシュ通知では、開発者ポータルから指定した追加データ(ここでは Key1 = Value1)を上記のメソッドによって取得できます。これらのデータの詳細は appledoc を参照してください。

{
    Key1 = Value1;
    aps = {
        alert = {
            "action-loc-key" = "";
            body = "";
            "launch-image" = "";
            "loc-args" = (
            );
            "loc-key" = "";
        };
        sound = "";
    };
}