如何作为 Apple 推送通知服务提供商获取设备令牌?

Posted

技术标签:

【中文标题】如何作为 Apple 推送通知服务提供商获取设备令牌?【英文标题】:How to get device tokens as Apple Push Notification Service provider? 【发布时间】:2014-08-05 08:36:29 【问题描述】:

我想添加对向 ios 应用发送 Apple 推送通知的支持。这是一个新闻应用,所以每次发生重要的新闻事件时,我都会向安装了该应用的所有用户和设备广播推送通知。

根据Apple Push Notification Service documentation,在图 3-3 中,Client App 必须将设备令牌发送给 Provider。

为了能够向安装了我的应用程序的所有设备发送推送通知,我是否必须创建一个 Web 服务,以便在客户端应用程序注册通知时接收并存储来自客户端应用程序的设备令牌?为了发送推送通知,我需要一个令牌和有效负载。我想向所有用户发送推送通知,通常是数千名用户。那么如何才能最好地访问设备令牌,以便向所有用户发送推送通知?

【问题讨论】:

【参考方案1】:

是的。您必须创建一个网络服务来将推送通知发送到使用您的应用程序的任何设备。 就设备令牌而言,您可以使用以下代码通过代码获取它们:

- (void)applicationDidFinishLaunching:(UIApplication *)app 
   // other setup tasks here....
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];


// Delegation methods
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken 
    const void *devTokenBytes = [devToken bytes];
    self.registered = YES;
    [self sendProviderDeviceToken:devTokenBytes]; // custom method


- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err 
    NSLog(@"Error in registration. Error: %@", err);

您需要在您的AppDelegate.m 中写入此内容,这将获取发送推送通知所需的设备令牌。

此外,您可以将这些令牌存储在某些数据库服务器上,以便在发送通知时进一步使用。下次您想向选定或所有用户发送一些通知时,可以使用这些令牌。

【讨论】:

以上是关于如何作为 Apple 推送通知服务提供商获取设备令牌?的主要内容,如果未能解决你的问题,请参考以下文章

来自 APNS(Apple 推送通知服务器)的反馈服务

GCM for iOS 和 Apple 提供的推送通知服务有啥区别

Apple 推送通知令牌

如何在没有 Apple Watch 应用的情况下使用 cordova 在 Apple Watch 上获取 iPhone 应用的推送通知?

Apple 反馈服务和推送通知错误

过滤 Apple 推送通知