【问题标题】:iOS Push Notifications - no push after delete and reinstalliOS 推送通知 - 删除并重新安装后无推送
【发布时间】: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 中看到的相同。

标签: ios apple-push-notifications


【解决方案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 应用程序中找到它)仍在工作,尽管应用程序告诉我它使用新令牌。那是什么????
  • 尝试先注销再重新注册
猜你喜欢
  • 1970-01-01
  • 2017-06-11
  • 1970-01-01
  • 2013-01-29
  • 1970-01-01
  • 1970-01-01
  • 2017-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多