我一直在研究这个问题。 我知道那里有很多文章,并且已经学到了很多东西。
我以同样的方式创建了我的开发和生产SSL。 开发连接到ssl://gateway.sandbox.push.apple.com:2195 生产连接到ssl://gateway.push.apple.com:2195 连接似乎工作正常。
至于应用程序。 发展: 当我从xCode直接运行到我的设备时,它运行开发版本。该应用程序成功地将开发令牌记录在数据库中。然后,我运行一个服务来发送推送通知,并正确传递。 msg已成功发送。
特设:
当我构建存档并将其导出以进行Ad-hoc分发时,我会仔细检查包内容codesign -dvvvv --entitlements - Elepago.app
并查看aps-environment是否已正确设置为production。我将其打包并通过iTunes将其加载到我的设备上。当应用程序启动时,我看到数据库中记录了新的生产令牌。因此必须正确设置环境。当我将推送通知发送到生产密钥(与开发相同,只是更改SSL .pem密钥和服务器)时,它表示已成功交付。然而,它实际上从未到达设备!!!
这个问题让我抓狂。我刚刚完成并清理了我的分发证书,并使用全新的CSR重建了它。我还更新了所有配置文件以使用该新证书。 [任何想法如何将这些证书与应用程序联系起来,除了我已经检查过的aps-environment之外。]
非常感谢任何见解。
答案 0 :(得分:8)
因此,经过数小时和数小时的头痛,我最终重建了SSL .pem文件并且有效!!
这就是我的所作所为:
这些是我最初用于开发和制作的相同说明,但可能/显然搞砸了。然后我测试了我的ad-hoc版本,它工作了!!!
此外,值得注意的是,当使用错误的.pem密钥时,我没有收到来自APNS的任何错误反馈。我使用上面链接中的simplepush.php文件作为发送PN的基础。
答案 1 :(得分:4)
开发和生产的设备令牌不相同。
在测试生产时,使用UIAlertView查看生产令牌。做类似以下的事情:
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
NSString *deviceID = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
deviceID = [deviceID stringByReplacingOccurrencesOfString:@" " withString:@""];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Device Token", nil) message:deviceID delegate:nil cancelButtonTitle:NSLocalizedString(@"OK", nil) otherButtonTitles:nil];
[alert show];
}
使用此令牌推送生产通知。
答案 2 :(得分:1)
希望这有帮助。
答案 3 :(得分:0)
当我在Java上开发时,我的问题是一样的 但我解决了它因为生产=真是生产,生产=假发展。
有效负载(有效负载,密钥库,密码,生产,设备)
希望得到这个帮助。