你好我是iPhone的新手。
我正在开发Iphone应用程序,该应用程序在开发环境中成功接收推送通知,但未在adhoc发布中收到通知。
我有两个证书,即开发和发展。生产
谁能告诉我我错过了什么?
答案 0 :(得分:43)
正如我昨天发布的对同一问题的回答:(prev. answer)
我有类似的问题。经过一些测试后,我得出以下结论:
如果安装的应用程序(使用development provision profile
编译)比此设备有development token
,则应使用development certificate
将推送发送到此类设备。
如果安装的应用程序(使用distribution provision profile
编译)比此设备有production token
,则应使用production certificate
将推送发送到此类设备。
并且,如果您的应用尚未发布,我认为APNS
将不接受production certificate
,因此您可能无法将推送发送到您的ad-hoc应用。
你能做什么?例如,将应用程序发送给使用development certificate
编译的测试人员。
<强>更新:强> 我再次学习了这个问题并找到了一些有趣的信息:
Ad-hoc provision profile
。<key>aps-environment</key>
<string>production</string>
aps-environment
的值。它等于production?
如果是,那么您应该使用production certificate
向您的ad-hoc应用推送通知发送。
如果值为development
,那么您应该使用development certificate
向ad-hoc应用推送通知发送。
Production Push SSL Certificate
是否已启用。如果这对您没有帮助,请尝试更新您的临时配置文件。
答案 1 :(得分:2)
在测试针对开发环境的推送通知时,应该记住一个严格的检查表。其中大部分都已在上面提到。但这是解决我的问题的一件事,我想分享。我希望它对某人有帮助。那就是:
请注意设备令牌ID,这与开发和&amp;&amp;生产环境。
- (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];
}
答案 2 :(得分:1)
推送通知有时令人头疼,并且由许多元素组成。如果你错过了一些东西,那么你的PNS将无法工作,并且很难理解为什么。根据经验,请查看以下清单:
- 推送证书和私钥是使用正确的应用程序ID(与配置文件所附的相同)正确生成的
- 证书和私钥均取自相同的下载PNS证书
- 两个文件都正确地连接成.pem文件
- 当应用程序处于活动状态时,您的应用程序会处理推送通知。
无论如何,我建议您遵循一个好的教程,例如:http://mobiforge.com/developing/story/programming-apple-push-notification-services逐字逐句。祝你好运!
答案 3 :(得分:1)
我遇到了同样的事情并花了很长时间试图解决这个问题。我生成了一个新的生产证书,创建了一个Ad-Hoc配置文件(这样我就可以通过生产中的推送通知来测试)并且根本没有任何工作。
我相应地修复了推送脚本(服务器端)(使用新生成的.pem文件并连接到ssl://gateway.push.apple.com:2195)。脚本告诉我通知已经发送,但我的设备实际上没有收到通知。
原来问题真是太傻了!显然,当使用具有新证书的应用程序(或通过Ad-Hoc)时,设备令牌会发生变化。我只能推测他们改变原因的原因,但我所知道的是,一旦我抓住了正确的令牌并使用我的测试脚本向设备发送通知,我就明白了!
答案 4 :(得分:1)
除了来自Nekto的猜测......
而且,如果您的应用尚未发布,我认为APNS不会接受生产证书,因此您可能无法将推送发送到您的ad-hoc应用。
与此同时,我可以确认即使应用尚未发布,也可以在ad-hoc应用上接收推送通知。
答案 5 :(得分:0)
据我了解,您无法使用开发证书向Ad Hoc构建发送通知。你可以想象这个场景是好的直到您发布应用程序。应用程序发布后,向包含生产证书的临时版本发送通知也会将其发送给您的应用持有者。我解决这个问题的方式是:
现在您将拥有一个可以构建的应用程序来专门测试通知。不是一个优雅的解决方案,但它的工作原理。
答案 6 :(得分:0)
我刚刚遇到了一个非常类似的问题,事实证明这可能是显而易见的,但我会在这里发布,以防万一其他人和我一样愚蠢。
我正在使用MoonAPNS
并且可以接收开发通知但不接收生产。
经过几天的圈子后,我回到了这一行:
PushNotification push = new PushNotification(true, p12file, p12password);
之前忽略了true
参数,通过服务器代码调试显示这是设置是否使用沙盒服务器 - D'哦!将其切换到false
,一切都很顺利。
故事的道德:不要忘记将您的通知指向非沙盒服务器!
答案 7 :(得分:0)
我遇到了同样的问题,经过大量的睾丸检查后我终于得到了问题所在。
那是因为苹果生产apns服务器不再允许包含私钥数据的P12文件。但是开发apns服务器将接受包含私钥的P12文件。
因此,当您从钥匙串导出P12文件时,只需选择没有私钥的生产证书文件,您就会收到关于您的自定义应用程序的通知(即使未发布)。
答案 8 :(得分:0)
回答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
更改后,我可以收到通知