您的位置:首页 > 移动开发 > IOS开发

在iOS8之后的远程推送写法

2014-12-16 10:30 274 查看
registerForRemoteNotificationTypes: is not supported in iOS 8.0 and later

IOS8 PUSH解决方法

昨天晚上整理PUSH的东西,准备些一个教程,全部弄好之后,发现没有达到预期的效果,本以为是服务器代码的问题(因为本人对PHP代码一点都不懂),所以在网上四处搜索,后来看xcode log才发现,原来是IOS8系统更新了的问题,提示 registerForRemoteNotificationTypes: is not supported in iOS 8.0 and later.

使用IOS8 xcode6的同学,在使用推送(push)的时候应该已经出现这个问题了。那么让我们来看看具体的解决方法。

iOS 8 has changed notification registration in a non-backwards compatible way. While you need to support iOS 7 and 8 (and while apps built with the 8 SDK aren't accepted), you can check for the selectors you need and conditionally call them correctly for the running version.

Here's a category on UIApplication that will hide this logic behind a clean interface for you that will work in both Xcode 5 and Xcode 6.

// IOS8 新系统需要使用新的代码咯

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)

{

[[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings

settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge)

categories:nil]];

[[UIApplication sharedApplication] registerForRemoteNotifications];

}

else

{

//这里还是原来的代码

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:

(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)];

}

原本在IOS7当中 判断PUSH是否打开的方法是:

UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];

return (types & UIRemoteNotificationTypeAlert);

如果将这段代码使用在 IOS当中,虽然不会出现crash的现象,但是基本没什么作用。

在IOS8中,我们使用如下的新代码来取代以上的代码

{

UIRemoteNotificationType types;

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)

{

types = [[UIApplication sharedApplication] currentUserNotificationSettings].types;

}

else

{

types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];

}

return (types & UIRemoteNotificationTypeAlert);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: