[2014-09-21 18:18:11]
iOS8にアップデートして,自作アプリでPush通知を受信できなくなりました.
コンソールにこんなメッセージがでてました.
registerForRemoteNotificationTypes: is not supported in iOS 8.0 and later.
Stack Overflowに解決策が.
apple - registerForRemoteNotificationTypes: is not supported in iOS 8.0 and later - Stack Overflow
今まで application:didFinishLaunchingWithOptions: にこんな風に書いてたのですが,
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
このようにバージョン毎に記述を切り替えるようにしました.
// http://stackoverflow.com/questions/24454033/registerforremotenotificationtypes-is-not-supported-in-ios-8-0-and-later #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) { // use registerUserNotificationSettings UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert) categories:nil]; [[UIApplication sharedApplication] registerUserNotificationSettings:setting]; [[UIApplication sharedApplication] registerForRemoteNotifications]; } else { // use registerForRemoteNotifications [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; } #else // use registerForRemoteNotifications [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; #endif
このうち,下記の#ifの#else節はXcodeのバージョンを6だけで利用するなら不要みたいです.
他のバージョンと共存する場合は必要みたいなのですがXcode5が手元にないので確認できていません.
respondsToSelectorだけじゃだめなのかな?
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 // ここに書いてあった内容だけを残して,したのelse部分は削除可能だと思う #else // use registerForRemoteNotifications [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; #endif