如何确定何时更新deviceToken以获取推送通知/如何获取推送通知?

时间:2017-03-27 18:11:17

标签: ios objective-c notifications remote-notifications

我在应用程序的过程中遇到了各种与推送通知相关的困难,似乎是通过卸载修复的。我相信我已将它缩小到已过期的deviceTokens。

阅读Apple's Push notification documentation,我发现了这个:

  

注册成功但未收到通知

     

。 。

     

您的应用可能向您的提供商发送了错误的设备令牌。   您的应用应始终通过注册来询问设备令牌   推送服务每次启动时。不要存储设备令牌   从您的应用程序尝试重用它,因为令牌可以更改。您的   然后,提供者应该将相同的令牌传递给推送服务。

他们建议每次启动应用时注册。他们还建议推送通知的最佳做法不是这样做,因为用户不喜欢在访问请求之前受到轰炸,甚至在看到您的应用之前。因此,将注册调用放入应用代理并不是最佳选择。但是,我没有看到有关deviceToken何时到期或如何查看它是否已过期的更多信息。

我能找到的最接近UIApplication的{​​{1}}实例方法isRegisteredForRemoteNotifications

  

返回如果应用已注册远程通知,则值为YES   如果没有发生注册,则收到设备令牌或NO   失败,或被用户拒绝。

我的理解是,这是调用以检查用户是否已启用推送通知服务的方法。我知道特定通知类型的权限都可以关闭,如果用户允许推送通知,这仍然可以是真的。但是措辞看起来需要使用当前的deviceToken注册应用程序。这是否意味着我可以打电话

[[UIApplication currentApplication] isRegisteredForRemoteNotifications]
在appDelegate中,如果确实如此,请注册远程通知以更新我的服务器上的deviceToken,并确保我的推送通知不会过期?或者,这个函数是否与我目前的相同,即最终deviceToken将过期,即使用户允许推送通知,此方法也将开始返回false而不是true?

tl; dr - Apple称deviceTokens最终会因推送通知而到期。他们建议每次应用程序启动时注册。我不想用这个警报轰炸新用户。如何确保只有已接受推送通知的用户才能重新注册?

2 个答案:

答案 0 :(得分:0)

警报只会显示一次。

如果用户之前允许通知,则您的代码将获得新令牌,而无需与用户进行任何交互(或通知用户通知)。

答案 1 :(得分:0)

好的,这方面的最佳做法如下,我们会毫不费力地遵循

  1. 始终注册以使用以下代码启动推送或适当的AppDelegate生命周期方法

    [[UIApplication sharedApplication] registerUserNotificationSettings:  [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound) categories:nil]];
    
    [[UIApplication sharedApplication] registerForRemoteNotifications];
    
  2. 如果成功注册了Push的委托将通过deviceToken

    进行调用
    - (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
    

    如果deviceToken始终发生变化,将调用上面的委托。因此,每当您获得deviceToken时,都会在服务器中更新它。

  3. 在服务器中,如果您在沙盒或生产模式下运行,请确保您点击了正确模式,从模拟器中丢弃它们通常会失败并暂时阻止服务。

  4. 您始终可以使用this online service检查您的pem文件和设备令牌是否正常工作。

    希望它有所帮助。

    干杯。

相关问题