应用启动后如何获取 iOS 推送通知令牌

Posted

技术标签:

【中文标题】应用启动后如何获取 iOS 推送通知令牌【英文标题】:How to get iOS push notification token after app launch 【发布时间】:2014-11-25 17:41:51 【问题描述】:

我正在编写一个注册推送通知的 ios 应用程序。我需要定期/每当服务器请求时发送设备令牌。

- (void)application:(UIApplication *)application
    didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

   //send to server

但这仅在应用启动时发生。除了启动之外,如何在应用程序的其他部分获取此回调,以便它到达上述代码并将 deviceToken 发送到我的服务器?

我正在考虑这个(必须支持iOS8和更低)

if( server requests token )

   if( [application respondsToSelector:@selector(registerUserNotificationSettings) ] )
   
      [application registerForRemoteNotifications];
   
   else
   
      [application registerForRemoteNotificationTypes: (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert );
   

这是在应用程序中间(即应用程序启动后)再次获取 deviceToken 的正确方法。请帮忙

【问题讨论】:

您在“定期/每当服务器请求时发送设备令牌”方面遇到了严重问题。 @erkanyildiz 我知道,但定期间隔不太规律(一两个月发生一次),服务器设计更改不是我能做的。时间限制。 这里有一个非常严重的设计问题。我不知道为什么除了应用启动之外还需要发送令牌。如果令牌更改(重新安装、在另一台设备上恢复、过期等),应用程序启动可以将新的令牌发送到服务器。您无需让应用定期显式发送令牌。顺便说一句,静默推送是您的服务器可以让您的应用程序在需要时发送一些数据的唯一方法。但这仅在您已经拥有有效令牌时才有效。 【参考方案1】:

didRegisterForRemoteNotificationsWithDeviceToken被调用时,可以将注册的token保存在Application级别。

在 AppDelegate 级别创建一个 @property 并创建一个 函数,您可以在 您的服务器上注册此令牌>。然后在该函数中访问此属性,您可以调用该函数并在 您的 服务器上重新注册任意次数,而不是在 Apple 上重新注册 服务器。

【讨论】:

以上是关于应用启动后如何获取 iOS 推送通知令牌的主要内容,如果未能解决你的问题,请参考以下文章

使用推送通知时如何获取用户设备令牌

如何在收到推送通知后让 android 应用程序在后台启动,以便它可以从服务器获取数据?

Apple 推送通知 - 从生产应用程序获取空推送令牌 - 将在修复配置文件问题后发送推送令牌

如何从我的所有用户那里获取设备令牌信息以进行推送通知?

无法在 react-native 中获取 iOS 推送通知设备令牌

Xamarin.iOS如何在注册到后端以获取推送通知后获取安装ID