为啥 Google Cloud Messaging 通知不适用于 iPhone 生产环境?
Posted
技术标签:
【中文标题】为啥 Google Cloud Messaging 通知不适用于 iPhone 生产环境?【英文标题】:why Google Cloud Messaging notification not working with iPhone production environment?为什么 Google Cloud Messaging 通知不适用于 iPhone 生产环境? 【发布时间】:2015-07-25 09:45:05 【问题描述】:我正在开发一个从 php 服务器接收推送通知的 iPhone 应用程序。
为了发送通知,我使用的是 Google Cloud Messaging。 GCM 在 iPhone 开发环境中工作正常,但我无法在 iPhone 生产环境中接收通知,并且我不断收到此错误消息:
"multicast_id":7214972633373567187,
"success":0,
"failure":1,
"canonical_ids":0,
"results":[
"error":"NotRegistered"
]
我尝试了很多,也搜索了很多,但没有找到任何解决方案来解决这个问题。请帮帮我。
我创建了.p12
生产环境证书并上传到谷歌云消息配置文件。
【问题讨论】:
【参考方案1】:终于找到了解决办法。现在使用 GCM(谷歌云消息)我可以向 iPhone 设备发送通知。
在appDelegate.m
中只需更改applicationDidBecomeActive
方法中的一个条件。
这是用于生产环境的代码:
_registrationOptions = @kGGLInstanceIDRegisterAPNSOption:deviceToken,
kGGLInstanceIDAPNSServerTypeSandboxOption:@NO;
这是用于开发环境的代码:
_registrationOptions = @kGGLInstanceIDRegisterAPNSOption:deviceToken,
kGGLInstanceIDAPNSServerTypeSandboxOption:@YES;
【讨论】:
我是这样做的:#ifdef DEBUG // 调试/测试构建所需的 NSNumber *sandbox = @YES; #else NSNumber *沙盒 = @NO; #endif NSDictionary *registrationOptions = @kGGLInstanceIDRegisterAPNSOption:deviceToken, kGGLInstanceIDAPNSServerTypeSandboxOption:sandbox;【参考方案2】:设置"priority": "high"
"to": "gcm_device_token",
"priority": "high",
"content_available": false,
"notification":
"sound": "default",
"badge": "1",
"title": "Push Title",
"body": "Push Body"
这是用于生产环境的代码: appDelegate.m
_registrationOptions = @kGGLInstanceIDRegisterAPNSOption:deviceToken,
kGGLInstanceIDAPNSServerTypeSandboxOption:@NO;
这是用于开发环境的代码: appDelegate.m
_registrationOptions = @kGGLInstanceIDRegisterAPNSOption:deviceToken,
kGGLInstanceIDAPNSServerTypeSandboxOption:@YES;
【讨论】:
【参考方案3】:要使用iPhone push notifications in Production
环境,您需要遵循以下几点:
-
您的
.cer
和.p12
需要使用production profile
创建
您的应用需要上传到iTunes store
。
只有当您从 iTunes store
下载 binary
时,您的生产配置文件才会发挥作用,您可以在生产环境中发送和接收消息。
【讨论】:
感谢您的回答。我在生产环境中创建了所有证书,并在 Google Cloud Messaging 服务上上传了所有证书,但没有收到生产环境的单一通知 @nishitpatel 当我们谈论 iPhone 为什么要在 GCM 上上传?我想,在理想条件下,您创建 .cer 和 .p12 ,然后从中创建 .pem(s)。一旦你拥有两个 .pem(s) ,你就可以在 1 中合并,然后在你的代码中使用它 你是对的,但我的服务器不支持 iPhone 推送通知,所以我使用 GCM 来避免服务器冲突。 那你做错了。而且我不确定您的服务器不支持 iPhone 推送通知是什么意思。如果您使用 APN,它只需要 php 和 curl 支持来发送 iPhone 推送通知。以上是关于为啥 Google Cloud Messaging 通知不适用于 iPhone 生产环境?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Chrome 中实现 Google Cloud Messaging - Topic Messaging?
Google Cloud Messaging VS Google Cloud Platform
GCM(Google Cloud Messaging)推送完全解析
Google Cloud Messaging Bridging Header 导入失败