APNs 消息发送到服务器,设备 iOS 上没有通知

Posted

技术标签:

【中文标题】APNs 消息发送到服务器,设备 iOS 上没有通知【英文标题】:APNs Message send to Server, No notification comes on device iOS 【发布时间】:2015-05-21 07:51:13 【问题描述】:

我已经为服务器配置了 apns_certificate.pem 和 apns_privatekey.pem。我正在使用 node.js 服务器发送推送通知。我已成功向 apns 服务器发布通知,但设备未收到任何推送通知。

我也经历过Troubleshooting Push Notifications。 我已经按照故障排除文档中的说明在服务器端按照以下命令检查了所有 pem 文件。

$ openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert YourSSLCertAndPrivateKey.pem -debug -showcerts -CAfile server-ca-cert.pem

成功了。

我检查了我的服务器是否能够通过以下命令连接到 apns 服务器。

$ telnet 1-courier.push.apple.com 5223
$ telnet gateway.sandbox.push.apple.com 2195
$ telnet gateway.push.apple.com 2195

我在 ios 项目上正确配置了它,我也得到了设备令牌。

但我仍然没有在我的设备上收到推送通知。

【问题讨论】:

发送通知时应用程序是否正在运行?如果有:你实现了相应的方法吗? 应用程序在后台运行。我也实现了“(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo”方法 最后发现是服务器的问题。服务器使用的是 Node.js。从节点模块向 apns 发送推送通知存在一些问题。我使用发布在 RayWanderlich 的推送通知教程上的 php 服务器站点代码。它工作顺利。 【参考方案1】:

请检查设备令牌是否有效。 对于哪个设备令牌,服务器发送推送通知。 推送通知还应检查应用后台模式。

如果以上都正确,您将收到推送通知。

还要检查应用委托中的这两种方法,并将设备令牌从您的 iOS 应用发送到服务器:

    - (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken  
        NSString *str = [NSString stringWithFormat:@"Device Token=%@",deviceToken];
str = [str stringByReplacingOccurrencesOfString:@" " withString:@""];
        NSLog(@"This is device token%@", str);
    

    - (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err  
        NSString *str = [NSString stringWithFormat: @"Error: %@", err];
        NSLog(@"Error %@",err);    
    

【讨论】:

我在我的问题中提到我已经获得设备令牌并且注册成功。 然后使用设备令牌检查服务器端代码以向设备发送消息。

以上是关于APNs 消息发送到服务器,设备 iOS 上没有通知的主要内容,如果未能解决你的问题,请参考以下文章

PHP - APNs 消息已交付但在 iOS 设备上未收到

iOS 直接向 APNS 发送请求,无需服务器

ios通知消息传递状态

服务器 apns 上丢失的设备令牌

iOS推送原理

我们可以从 iOS 设备向 APNs 发送推送通知吗?