如何使推送通知在 iOS 的生产环境中工作?

Posted

技术标签:

【中文标题】如何使推送通知在 iOS 的生产环境中工作?【英文标题】:How do I make push notifications work in production for iOS? 【发布时间】:2015-02-20 02:43:40 【问题描述】:

直到我将我的应用程序提交到 App Store(现在可用)后,我才意识到分发令牌和生产令牌之间存在差异。在开发过程中,推送通知对我有用,但从 App Store 下载后,它不起作用。

我为开发和分发启用了推送通知。我已经创建了适当的开发和分发配置文件并启用了推送通知。

我的一些问题是:

既然应用程序已在应用商店中,我可以在我的 .php 文件中做些什么来允许推送通知而无需提交其他更新,即将 APNS 服务器位置从开发更改为生产?

我是否必须更改在 AppDelegate.m 中获取令牌的方式?现在我在didRegisterForRemoteNotificationsWithDeviceToken 中有这个:

NSString *token = [ [deviceToken description] stringByTrimmingCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@"<>"] ];

// Remove spaces from the token
token = [token stringByReplacingOccurrencesOfString:@" " withString:@""];

如何在 Xcode 中测试生产模式?我已经创建了 Ad-Hoc 证书。

谢谢

【问题讨论】:

【参考方案1】:

您只需对您的 php 脚本进行两​​次更改,其余的就可以了:

    将目标更改为 gateway.push.apple.com:2195 而不是 gateway.sandbox.push.apple.com:2195`。 使用生产证书而不是开发证书签署您的推送通知。

其余的应该可以正常工作。生产令牌将相应地发送生产推送通知。

【讨论】:

1.我已经在 php 文件中这样做了。 2.不知道你的意思,我已经有一个 APNs Production ios 证书,如果这就是你的意思。但是,它似乎仍然不起作用。我不需要更改获取令牌的方式吗?我的代码获取开发令牌。有区别吗? 你的令牌没问题。关于证书,在发送开发推送的时候,你还记得生成一个.pem 文件吗?您必须再次这样做,除了使用分发证书而不是开发证书。 是的,我使用本指南生成了一个用于开发的.pem 文件:raywenderlich.com/32960/…,我对分发证书做了完全相同的事情。但是,由于 Xcode 不允许应用程序使用分发配置文件在我的设备上运行,我如何获取生产令牌来测试它? 要使用分发证书进行测试,请使用您的设备创建一个 AdHoc 配置文件,然后将其导出为 IPA 文件。从那里,将其拖到管理器中的设备中。您现在可以在设备上使用该应用发送生产证书。【参考方案2】: 首先导出带有adhoc证书的ipa文件并安装到你的iphone上。 通过这种方式,您可以测试您的生产证书,但您不能直接通过 xcode 测试(运行)。 检查您的 php 端消息是否发送成功。

【讨论】:

【参考方案3】:

我意识到我没有将 ck.pem 文件(证书和密钥的组合)上传到服务器上。

现在已经修复了。

【讨论】:

以上是关于如何使推送通知在 iOS 的生产环境中工作?的主要内容,如果未能解决你的问题,请参考以下文章

无法在临时分发上通过 pushsharp 发送推送通知

如何在 macOS 应用程序的生产环境中测试推送通知?

VOIP 服务不能在生产环境中工作,但在测试服务器中工作正常

APNS 推送通知头痛;适用于开发但不适用于生产

IOS 在生产环境中没有收到推送通知

iOS 推送通知在生产环境 (GPGS) 中不起作用