Ios 临时分发中的推送通知问题
你好,我是IPhone新手 我正在开发Iphone应用程序,它在开发环境中成功地接收推送通知,但在临时分发中没有接收通知 我有两个证书,即开发和生产 谁能告诉我我错过了什么 正如我昨天发布的同一个问题的答案:() 我也有类似的问题。在做了一些测试之后,我得出了以下结论:Ios 临时分发中的推送通知问题,ios,push-notification,apple-push-notifications,Ios,Push Notification,Apple Push Notifications,你好,我是IPhone新手 我正在开发Iphone应用程序,它在开发环境中成功地接收推送通知,但在临时分发中没有接收通知 我有两个证书,即开发和生产 谁能告诉我我错过了什么 正如我昨天发布的同一个问题的答案:() 我也有类似的问题。在做了一些测试之后,我得出了以下结论: 如果安装的应用程序(使用开发条款配置文件编译的)超过该设备的开发令牌,则您应使用开发证书向该设备发送推送 如果安装了应用程序(使用分发供应配置文件编译的应用程序),则该设备具有生产令牌,并且您应使用生产证书向该设备发送推送 而且
开发条款配置文件编译的
)超过该设备的开发令牌
,则您应使用开发证书
向该设备发送推送分发供应配置文件编译的应用程序
),则该设备具有生产令牌
,并且您应使用生产证书
向该设备发送推送APNS
将不接受生产证书
,因此您可能无法向您的临时应用程序发送推送
你能做什么?例如,将应用程序发送给使用开发证书编译的测试人员
更新:
我又学了一次这个问题,发现了一些有趣的信息:
下载您的临时供应档案
从1打开供应配置文件。使用文本编辑器
搜索线路
aps环境
生产
生产证书的推送通知
如果值为development
,则应向您的特别应用程序发送带有开发证书的推送通知
如果这对您没有帮助,请尝试更新您的临时资源调配配置文件。推送通知有时令人头痛,由许多元素组成。如果您在途中错过了一些东西,您的PNS将无法工作,并且很难理解原因。根据经验,查看以下清单:
-推送证书和私钥使用正确的应用程序ID(与配置配置文件所附加的ID相同)正确生成。
-证书和私钥均取自同一下载的PNS证书。
-两个文件都正确地连接到一个.pem文件中。
-当推送通知传入时,应用程序会在应用程序处于活动状态时处理推送通知。
无论如何,我建议遵循一个好的教程,比如:逐字逐句。祝你好运 据我所知,您不能向具有开发证书的特别构建发送通知。正如您所想象的,在您发布应用程序之前,这个场景是正常的。一旦应用程序发布,向包含生产证书的特别构建发送通知也会将其发送给应用程序持有者。我处理这件事的方式是:
现在,您将拥有一个可以专门测试通知的应用程序。这不是一个优雅的解决方案,但它很有效。我遇到了同样的问题,花了相当长的时间试图解决它。我生成了一个新的生产证书,创建了一个特别的配置文件(这样我就可以在生产过程中使用推送通知进行测试),但什么都没用 我相应地修复了推送脚本(服务器端)(使用新生成的.pem文件并连接到ssl://gateway.push.apple.com:2195). 脚本告诉我通知已经发送,但我的设备实际上没有收到通知
原来这个问题真的很傻!显然,当使用带有新证书的应用程序时(通过该证书或临时证书),设备令牌会发生变化。我只能推测它们为什么会改变的原因,但我所知道的是,一旦我抓到了正确的令牌并使用我的测试脚本向设备发送通知,我就得到了它 我刚刚克服了一个非常类似的问题,结果证明这可能是显而易见的,但我会把它贴在这里,以防其他人像我一样愚蠢 我正在使用
moonans
,可以接收开发通知,但不能接收生产通知。
在兜了几天圈子之后,我又回到了这一行:
PushNotification push = new PushNotification(true, p12file, p12password);
之前忽略了true
参数,通过服务器代码进行的调试显示这是设置是否使用沙盒服务器-D'Oh!将其切换为false
,一切正常
这个故事的寓意是:不要忘记将通知指向非沙盒服务器 除了内克托的猜测 而且,如果您的应用程序尚未发布,我认为APNS将不接受生产证书,因此您可能无法向您的临时应用程序发送推送
同时,我可以确认,即使应用程序尚未发布,也可以在临时应用程序上接收推送通知 我也遇到了同样的问题,经过多次测试,我终于找到了问题所在 这是因为苹果生产apns服务器不再允许包含私钥数据的P12文件。但是开发apns服务器将接受P12文件,即使其中包含私钥 因此,当您从keychain导出P12文件时,只需选择您的生产证书文件,而不选择priv
- (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];
}