为啥 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 导入失败

GCM(Google Cloud Messaging)是不是需要 Google 帐户?

Google-Cloud-Messaging服务的可靠性