iO8でPUSH通知の実装に変更があったので、まずはデバイストークンの取得方法をメモ。
以前はデバイストークンの取得とPUSH許可のアラート表示を一つのメソッドで呼び出す形でしたが、 iOS8ではそれぞれ別メソッドになりました。
なお、PUSH許可のアラートは、iOS7の時と同様一度表示されると以後呼び出しても表示されないようです。
実装例
//メソッドの有無でOSを判別
if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerForRemoteNotifications)]) {
//iOS8
//デバイストークの取得
[[UIApplication sharedApplication] registerForRemoteNotifications];
//許可アラートの表示
UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:types categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
} else {
//iOS7
UIRemoteNotificationType types =UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert| UIRemoteNotificationTypeSound;
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:types];
}
デバイストークン取得に成功した際は、以前と同様UIApplicationクラスのregisterForRemoteNotificationTypes:メソッドが呼ばれるので、その中でサーバ側(プロバイダ)にデバイストークンを渡す処理をします。
なお、当たり前かもですがデバイストークンはOSアップデート時やバックアップから復元(機種変更とか)時に変更されることがあるので、デバイストークンの取得・サーバ側へ送信は、アプリ起動時など任意の場所で定期的に呼ぶようにしておいた方が良いです。
もしアプリ初回起動時など一度だけにしてしまってる場合は、修正してアップデートしないとPUSH通知が届かなくなる場合がでてくるのでご注意。