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 推送通知 - 删除并重新安装后无推送的主要内容,如果未能解决你的问题,请参考以下文章