[size=18px]iOS推送出了点问题,之前还好好的,而且上线过好几版了,最近测试说iOS好多用户收不到推送了,然后Debug发现:既不调用- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken方法,也不调用- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error 方法。之前在Xcode6上还好好的,升级到Xcode7之后就这两个方法都调用不进去了。然后再用Xcode6打开也同样调不进去了。升级到Xcode7之后,在适配iOS9的时候改过一些配置文件。首先说明几点:
1,已经确保证书没问题,因为我新建了个测试工程,用同一个证书却可以调用- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken方法。并且原来的项目和新建的测试工程在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中的代码是一模一样的。测试工程能回调- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken方法,但原项目不回调,也不调用- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error方法。2,确定手机已经联网。3,也有是否接受消息通知的弹窗,而且设置-通知里边确定是允许推送的。补充,原项目和新建的测试工程在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中的代码一模一样,如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
#ifdef __IPHONE_8_0
if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
} else {
UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound;
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:myTypes];
}
#else
UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound;
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:myTypes];
#endif return YES;
}
如有人遇到同样的问题,请帮忙解答,非常感谢!
1,已经确保证书没问题,因为我新建了个测试工程,用同一个证书却可以调用- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken方法。并且原来的项目和新建的测试工程在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中的代码是一模一样的。测试工程能回调- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken方法,但原项目不回调,也不调用- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error方法。2,确定手机已经联网。3,也有是否接受消息通知的弹窗,而且设置-通知里边确定是允许推送的。补充,原项目和新建的测试工程在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中的代码一模一样,如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
#ifdef __IPHONE_8_0
if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
} else {
UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound;
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:myTypes];
}
#else
UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound;
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:myTypes];
#endif return YES;
}
如有人遇到同样的问题,请帮忙解答,非常感谢!
解决方案 »
- 想问一下,腾讯开放平台申请的应用里面的key不是即时生效的吗?
- appstore现在需要添加restore按钮 ?
- 新问题:如何遍历NSOperationQueue中的Operations?
- 有做过采用json进行通信的客户端软件吗
- 讨论个接口设计问题关于NSMutableArray的
- 求助大家一个关于UIpickerView的问题
- [请教]如何用xcode6.1.1连接一个自己创建的远程git server?
- cocopods 导入AFNetworking报错
- 【ios】应用上传App Store后下载,手机端没问题,但平板上所有图片都好像被人划掉了
- 有没有做过苹果软件开发的大神,现在苹果企业的开发者申请不下来了吗
- UIAlertView为什么可以不遵守协议就能实现代理方法?
- 新手刚接触OC遇到对象实现的问题,求指导
漏了这一句
[[UIApplication sharedApplication] registerForRemoteNotifications];
这句不是只在iOS8以后才需要吗?我后面有写的,在下面这个方法里:
#ifdef __IPHONE_8_0
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
[application registerForRemoteNotifications];
}
#endif
if ([application respondsToSelector:@selector(isRegisteredForRemoteNotifications)])
{
// iOS 8 Notifications
[application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
[application registerForRemoteNotifications];
}
else
{
// iOS < 8 Notifications
[application registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound)];
}
方法:
1、(删除所有证书)命令行cd ~/Library/MobileDevice/Provisioning\ Profiles/ ,删除 rm *
2、 升级到xcode 7.2,然后用真机debug,注意一定要选择好描述文件,选对了就能对消息证书(测试的)
进行测试,测试通过。
3、发布在此选择新下载的发布证书(切忌一定要选对),然后打包发布绝对没问题 切忌一定要给分啊 ...........