リモート通知 - shirai/SwiftLearning GitHub Wiki

RemoteNotification

概論

目標

  • リモート通知の概要を説明できる

わかったこと

  • サーバーから通知を行える唯一の手段

リモート通知を行う手順

  • アプリ側の手順
    前提として必要なもの
    • Push通知を有効にしたApp IDが指定されたプロビジョニングファイル
    • APNsへのPUSH通知送信に必要なもの
  1. App IDの作成
  2. Apple Push Notification service (APNS)用証明書の作成
  3. プロビジョニングプロファイルの作成
    • プロビジョニングプロファイルをプロジェクトにセット
    • CapabilitiesでRemote notificationsを有効化
  4. Push通知をプロジェクトで有効化する
  5. アプリケーションの実装
  • プロバイダー側の実装
  1. プロバイダー用証明書ファイルの準備
  2. Push通知の実行

アプリケーションの実装

  • AppDelegateのdidFinishLaunchingWithOptionsに下記を実装する
    • Push通知の許可をユーザーに要求するポップアップの表示
    • リモートPush通知を受診するためのdeviseTokenの取得
 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
     // Override point for customization after application launch.
     // Push通知の許可画面を表示させる
     UIUserNotificationType types = UIUserNotificationTypeBadge |
         UIUserNotificationTypeSound |
         UIUserNotificationTypeAlert;
     UIUserNotificationSettings *mySettings =
         [UIUserNotificationSettings settingsForTypes:types categories:nil];
     [[UIApplication sharedApplication] registerUserNotificationSettings:mySettings];

     //リモートPush通知を受信するためのdeviceTokenを要求
     [[UIApplication sharedApplication] registerForRemoteNotifications];

     return YES;
 }

 // DeviceToken受信成功
 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
     NSString *token = deviceToken.description;

     // <aaaa bbbb cccc dddd>みたいな形式でくるので、"<"、">"、"(空白)"を除去しておく
     token = [token stringByReplacingOccurrencesOfString:@"<" withString:@""];
     token = [token stringByReplacingOccurrencesOfString:@">" withString:@""];
     token = [token stringByReplacingOccurrencesOfString:@" " withString:@""];

     NSLog(@"deviceToken: %@", token);

     // ここでPushプロバイダーへのdeviceTokenを送信する
 }

 // DeviceToken受信失敗
 - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
     NSLog(@"deviceToken error: %@", [error description]);
 }

 // 通常のPush通知の受信
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    NSLog(@"pushInfo: %@", [userInfo description]);
}

 // BackgroundFetchによるバックグラウンドの受信
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    NSLog(@"pushInfo in Background: %@", [userInfo description]);
    completionHandler(UIBackgroundFetchResultNoData);
}

つぎにやること

  • 調査
  • 学習まとめ作成

参考

⚠️ **GitHub.com Fallback** ⚠️