使用Xcode 7和iOS 9的Google Cloud Messaging

我设法使用GCM与Android设备,但现在我试图在iOS应用程序上实现。

我想我遵循了所有必要的步骤来使用GCM服务。 我已经按照https://developers.google.com/cloud-messaging/ios/client?configured=true将服务添加到现有的应用程序。

我认为一切都configuration正确,但我无法收到任何通知。 我有APN证书和GoogleService-info.plist文件,在控制台上输出:

2016-01-05 13:47:53.864:GCM | 无效的密钥在签入plist:GMSInstanceIDDeviceDataVersion连接到GCM 2016-01-05 13:47:57.501:GGLInstanceID | 将来无效的上次签入时间戳。 2016年1月5日13:47:57.501 TerneraGallega [1014:444977]与AUTHID签到成功:4958686017822257121,消化:KSJNg + Aj82uavBXrFeOAfA ==,lastCheckinTimestamp:1451998077000注册令牌:NC-dd9fCvFs:APA91bHMfbvLczxSPLQsLeEJASU_RfV4wvVuPs2u4VJDtpC8oB2cm1AKr6cH_LFeLsQzb94Kk9iwez8fsOvgzNns_9DU3i8Ema1oCKIwcNFzenNpAhViyGHah4E7-RkQlg1durYSEQRD已订阅/主题/全球

只要我收到这个,如果我做了POST请求:

{ “到”: “NC-dd9fCvFs:APA91bHMfbvLczxSPLQsLeEJASU_RfV4wvVuPs2u4VJDtpC8oB2cm1AKr6cH_LFeLsQzb94Kk9iwez8fsOvgzNns_9DU3i8Ema1oCKIwcNFzenNpAhViyGHah4E7-RkQlg1durYSEQRD”, “content_available”:真实的, “通知”:{ “体”: “伟大的比赛!”, “称号”: “葡萄牙对丹麦”}}

第一次尝试它返回一个成功的消息,但没有日志和通知显示在设备(与应用程序在前台)

几分钟后,再次尝试POST请求,现在它返回一个失败

{“multicast_id”:7256343774952522277,“success”:0,“failure”:1,“canonical_ids”:0,“results”:[{“error”:“NotRegistered”}]}

现在,我从Google页面下载了GCM示例,configuration了APN,并在设备上打开GCM示例Swift文件时立即获得了GoogleService-info.plist:

注册成功! 检查xcodedebugging控制台fot注册令牌,您可以使用…

在此之后,如果您设置POST请求

{ “到”: “mVEtHyTXEOg:APA91bGvK_Uf2ZKgpguWUOto3CXQzIT1z22uJ446mYkNqMwL9VLDYdGtdm_4vS8rcl3T9OeqEC1UWbdKAOyuoweW1GiU0mv0cDSPW03y4XGx19JcR6rxsiWRNUjtADX6iNAW8wM8UBJl”, “content_available”:真实的, “通知”:{ “体”: “伟大的比赛!”, “称号”: “葡萄牙对丹麦”}}

它再次返回一个

{“multicast_id”:7435981433811133310,“success”:0,“failure”:1,“canonical_ids”:0,“results”:[{“error”:“NotRegistered”}]}

谁可以在应用程序上实施GCM的人可以指出我错过了什么?

– – – -编辑 – – – –

最后,我通过使用分发证书而不是开发证书来实现它的工作…似乎我已经configuration好了所有东西,但是我缺less一些开发证书。

PS:在ID下的APNconfiguration文件页面中,我启用了两个推送通知证书(这就是为什么我认为一切都很好configuration)

但是我会把这个问题留给我,因为我无法在开发环境下使用它

我能够有效地做与编辑修复相同的事情,而不会弄乱证书​​。 显然,如果你已经拥有了所有东西,并且正在使用开发环境和生产环境,那么这将不起作用,但是如果你刚刚处于开发阶段,就很容易改变。

在应用程序中的Gcm示例项目(用于objective-c):didRegisterForRemoteNotificationsWithDeviceToken我简单地更改了代码:

  _registrationOptions = @{kGGLInstanceIDRegisterAPNSOption:deviceToken, kGGLInstanceIDAPNSServerTypeSandboxOption:@YES}; 

  _registrationOptions = @{kGGLInstanceIDRegisterAPNSOption:deviceToken, kGGLInstanceIDAPNSServerTypeSandboxOption:@NO}; 

我知道这不完全是一个真正的解决办法,但它至less使它的工作没有改变任何证书(只要生产证书设置。