临时分发中的推送通知问题
Posted
技术标签:
【中文标题】临时分发中的推送通知问题【英文标题】:Push Notification Issue in Adhoc Distribution 【发布时间】:2011-10-12 08:40:48 【问题描述】:您好,我是 iPhone 新手。
我正在开发 Iphone 应用程序,该应用程序在开发环境中成功接收推送通知,但在临时分发中没有收到通知。
我有两个证书,即开发和生产。
谁能告诉我我错过了什么?
【问题讨论】:
【参考方案1】:正如我昨天发布的同样问题的答案:(prev. answer)
我也有类似的问题。经过一番测试,我得出以下结论:
如果安装的应用程序(使用development provision profile
编译)比此类设备具有development token
并且您应该使用development certificate
向此类设备发送推送。
如果安装的应用程序(使用distribution provision profile
编译)比此类设备具有production token
并且您应该使用production certificate
向此类设备发送推送。
而且,如果您的应用尚未发布,我认为 APNS
不会接受 production certificate
,因此您可能无法将推送发送到您的临时应用。
你能做什么?例如,将应用程序发送给使用development certificate
编译的测试人员。
更新: 这个问题我又学了一遍,发现了一些有趣的信息:
-
下载您的
Ad-hoc provision profile
。
使用文本编辑器从 1. 打开配置文件。
搜索行
<key>aps-environment</key>
<string>production</string>
检查键aps-environment
的值。是否等于production?
如果是,那么您应该使用production certificate
向您的临时应用发送推送通知。
如果值为development
,那么您应该使用development certificate
向您的临时应用发送推送通知。
Production Push SSL Certificate
是否启用。
如果这对您没有帮助,请尝试更新您的临时配置文件。
【讨论】:
我想你不清楚我所说的,它适用于开发配置文件,但不适用于临时分发。我也在使用pushmebaby
应用程序生成通知。谢谢
我很了解你。阅读我的第二点: 2. 如果您的应用未在 AppStore 中发布,我不确定您是否可以使用生产证书。
我还测试了开发证书和临时分发配置文件,但它仍然没有显示任何内容。
您应该尝试:开发配置文件 + 开发证书。临时配置文件 + 开发证书不起作用。你看我的帖子了吗? =)
为什么我的开发令牌和生产令牌是一样的?【参考方案2】:
在测试开发环境的推送通知时,应该牢记一些重要的清单。其中大部分已经在上面提到过。但这是解决我问题的一件事,我想分享。我希望它可以帮助某人。那就是:
请注意设备令牌ID,这对于开发和生产环境是不同的。
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
NSString *deviceTokenStr = [[[[deviceToken description]
stringByReplacingOccurrencesOfString: @"<" withString: @""]
stringByReplacingOccurrencesOfString: @">" withString: @""]
stringByReplacingOccurrencesOfString: @" " withString: @""];
UIAlertView *alert= [[UIAlertView alloc]initWithTitle:deviceTokenStr message:Nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
[alert show];
【讨论】:
【参考方案3】:推送通知有时令人头疼,它由许多元素组成。如果您在途中遗漏了某些东西,您的 PNS 将无法工作,并且很难理解原因。根据经验,请查看以下清单: - 推送证书和私钥使用正确的应用 ID(与配置文件附加到的相同)正确生成。 - 证书和私钥都来自同一个下载的 PNS 证书。 - 两个文件都正确连接成一个 .pem 文件。 - 当应用处于活动状态时,您的应用会在推送通知进入时对其进行处理。
无论如何,我建议遵循一个好的教程,例如:http://mobiforge.com/developing/story/programming-apple-push-notification-services 逐字逐句。祝你好运!
【讨论】:
感谢您的教程,我已按照所有步骤操作。我不需要 .pem 文件,因为我正在使用仅需要证书的pushmebaby
应用程序。【参考方案4】:
我遇到了同样的事情,并花了很长时间试图弄清楚。我生成了一个新的生产证书,创建了一个 Ad-Hoc 配置文件(以便我可以通过生产中的推送通知进行测试),但没有任何效果。
我相应地修复了推送脚本(服务器端)(使用新生成的 .pem 文件并连接到 ssl://gateway.push.apple.com:2195)。脚本告诉我通知已发送,但我的设备实际上并没有收到。
原来这个问题真的很傻!显然,当使用带有新证书的应用程序(或者通过 Ad-Hoc)时,设备令牌会发生变化。我只能推测它们改变的原因,但我所知道的是,一旦我抓住了正确的令牌并使用我的测试脚本向设备发送通知,我就明白了!
【讨论】:
+1。我还必须使用 ssl://gateway.push.apple.com:2195(需要删除沙箱)并且必须使用设备令牌来获取生产证书。【参考方案5】:除了来自 Nekto 的猜测...
而且,如果您的应用尚未发布,我认为 APNS 将不接受生产证书,因此您可能无法将推送发送到您的临时应用。
与此同时,我可以确认,即使应用程序尚未发布,也可以在临时应用程序上接收推送通知。
【讨论】:
【参考方案6】:据我了解,您无法向具有开发证书的 Ad Hoc 构建发送通知。正如您可以想象的那样,在您发布应用程序之前,这种情况是可以的。发布应用程序后,向包含生产证书的临时构建发送通知也会将它们发送给您的应用程序持有者。我解决这个问题的方法是:
-
在 Apple 中创建一个与 iTunes 中的应用具有相同基线的新应用。
为此“幻影”应用创建新的生产密钥和证书。
使用新的生产密钥构建新应用并使用该构建进行测试。
现在您将拥有一个可以专门用于测试通知的应用。这不是一个优雅的解决方案,但它确实有效。
【讨论】:
不知道为什么这被否决了,创建一个单独的包是在 HockeyApp 等平台上进行 beta 测试的合法机制。【参考方案7】:我刚刚克服了一个非常相似的问题,结果它可能应该是显而易见的,但我会在这里发布,以防其他人像我一样愚蠢。
我正在使用MoonAPNS
,可以接收开发通知,但不能接收生产通知。
兜了几天兜兜转转,又回到了这一行:
PushNotification push = new PushNotification(true, p12file, p12password);
之前忽略了true
参数,通过服务器代码进行的调试显示这是设置是否使用沙盒服务器 - 哦!切换到false
,一切都很好。
故事的寓意:不要忘记将通知指向非沙盒服务器!
【讨论】:
【参考方案8】:我遇到了同样的问题,经过大量的睾丸后,我终于找到了问题所在。
那是因为苹果生产的apns服务器不再允许包含私钥数据的P12文件。但是开发 apns 服务器将接受包含私钥的 P12 文件。
因此,当您从钥匙串导出 P12 文件时,只需选择没有私钥的生产证书文件,您就会在您的临时应用程序上收到通知(即使未发布)。
【讨论】:
【参考方案9】:2016.10.13 的答案
在我更改以下教程的密钥后,我遇到了类似的问题: https://support.magplus.com/hc/en-us/articles/203808718-iOS-Creating-a-Push-Notification-Certificate
但仍然无法工作 在我检查服务器代码后发现
ssl:ssl://gateway.sandbox.push.apple.com:2195
必须改为ssl://gateway.push.apple.com:2195
更改后,我可以收到通知
【讨论】:
以上是关于临时分发中的推送通知问题的主要内容,如果未能解决你的问题,请参考以下文章