iOS 推送通知 - 删除并重新安装后无推送

Posted

技术标签:

【中文标题】iOS 推送通知 - 删除并重新安装后无推送【英文标题】:iOS Push Notifications - no push after delete and reinstall 【发布时间】:2014-05-19 13:58:25 【问题描述】:

我的应用程序中有(有)一个工作推送,该应用程序处于开发阶段,可以在应用程序启动后从存储在数据库中的 php 脚本发送推送。 但是在 den Message-Center 中禁用和重新启用推送(在 iPhone 上测试)或删除并重新安装(在 iPad 上测试)应用程序后,我无法再次推送到这些设备。我收到了这些设备的新令牌,并从我的数据库中删除了旧令牌。

我用于接收可删除令牌的 php 脚本 (feedback.sandbox.push.apple.com:2196) 没有向我返回任何信息,尽管连接似乎很好。

我确实打电话

[[UIApplication sharedApplication]  registerForRemoteNotificationTypes:
    (UIRemoteNotificationTypeBadge |
    UIRemoteNotificationTypeSound |
    UIRemoteNotificationTypeAlert)];

应用每次启动,应用总是顺利注册

-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)aDeviceToken;

我可以看到它,因为那时我有一个 NSLog,它显示了令牌

这是我的代码:

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound];


-(void) application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
    NSLog(@"Registered device with token %@", deviceToken); //Here i'm writing token into Database if not exists


-(void) application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error 
    NSLog(@"Registering device failed: %@", error);

我能做什么?

【问题讨论】:

对我来说这似乎更像是一个后端问题。尝试查看您的数据库中是否存在与您设备的 UDID 相同的重复项。还有为什么要删除现有记录并创建新记录?如果已经在数据库中,只需返回此 UDID 的现有令牌,如果记录不存在,则运行您的插入语句。 我目前只有 2 个条目,因为我正在弄清楚如何处理那些推送的东西。这两个条目是我的 iPhone 和我的 iPad。当设备注册(NSLog 条目)时,我的数据库中的令牌与我在 AppDelegate.m 中看到的相同。 【参考方案1】:

您应该在每次应用完成启动时要求推送注册,如下所示:

[[UIApplication sharedApplication]
 registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
                                     UIRemoteNotificationTypeSound |
                                     UIRemoteNotificationTypeAlert)];

然后检查回调是否返回到这个函数:

 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)aDeviceToken;

或者这个函数:

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error;

如果注册失败,请检查原因并发表评论

【讨论】:

每次应用启动时我都会调用[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];,并且应用总是在- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)aDeviceToken; 中顺利注册。我可以看到它,因为那时我有一个 NSLog,它显示了令牌。 是的,我愿意。并且推送脚本使用带有最近令牌的数据库 我还向旧令牌发送了推送,以强制反馈服务器向我提供已弃用的令牌,但 feedback.sandbox.push.apple.com:2196 不会返回任何令牌。跨度> 我刚刚发现为我的 iPhone 添加到数据库中的 FIRST 令牌(我在 OSX 的 APN-Tester 应用程序中找到它)仍在工作,尽管应用程序告诉我它使用新令牌。那是什么???? 尝试先注销再重新注册

以上是关于iOS 推送通知 - 删除并重新安装后无推送的主要内容,如果未能解决你的问题,请参考以下文章

推送通知有时不显示

当我删除我的 iOS 应用程序推送通知状态仍然存在

iOS 应用拒绝询问是不是要注册推送通知

删除 iOS 应用后保存推送通知数据

如果用户卸载应用程序然后从商店重新安装,ios 推送通知不起作用?

更新 ios 推送通知的 SSL 证书时是不是需要重新创建 CK.pem?