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

Posted

技术标签:

【中文标题】APNS 推送通知头痛;适用于开发但不适用于生产【英文标题】:APNS Push Notifications headache; works for development but not production 【发布时间】:2010-12-24 08:07:33 【问题描述】:

朋友们好 我已经在这里至少一个星期了。在我的一生中,我无法在生产中收到推送通知,在开发中工作正常。

我已经尝试过,我可以在网上找到的所有解决方案,但没有任何效果。

我已重新生成证书至少 100 次

我的 entitlements.plist 文件很好 -

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>get-task-allow</key>
    <false/>
    <key>aps-environment</key>
    <string>production</string>
    <key>application-identifier</key>
    <string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>
    <key>keychain-access-groups</key>
    <array>
        <string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>
    </array>
</dict>
</plist>

当然,当我更改环境并将 get-task-allow 设置为 true 时,它​​适用于 gateway.sandbox.push.apple.com。我也尝试使用确切的包名称而不是“$(AppIdentifierPrefix)$(CFBundleIdentifier)”

但是当我将 aps-environment 更改为生产环境并将 get-task-allow 更改为 false(甚至尝试使用 true)时 - 设备不会收到任何通知。

我尝试过使用 pushmebaby,编写我自己的脚本,easyapns - 所有这些都与开发工作。 我只是想不通它为什么会在生产中中断。

我的构建设置很好,我创建了发布配置的副本,将其称为 ad-hoc,并将代码签名元素设置为 entitlements.plist 并将身份设置为相应的配置文件。

我使用与生成开发者证书相同的方法来生成证书文件

openssl pkcs12 -in aps-production-cert.p12 -out aps-production-cert.pem -nodes

当我使用 codesign -dvvvv --entitlements -Forecast.app 时,我明白了 - 看起来不错。

Executable=/Users/seantan/Documents/Alpha/build/Ad-Hoc-iphoneos/Forecast.app/Forecast
Identifier=com.xxxxxxxx.wforecast
Format=bundle with Mach-O universal (armv6 armv7)
CodeDirectory v=20100 size=2651 flags=0x0(none) hashes=124+5 location=embedded
CDHash=63a3d238db30f8e4fd3c2a545867fe2fe645a981
Signature size=4313
Authority=iPhone Distribution: xxxxxxxx
Authority=Apple Worldwide Developer Relations Certification Authority
Authority=Apple Root CA
Signed Time=Dec 24, 2010 2:24:08 PM
Info.plist entries=25
Sealed Resources rules=3 files=200
Internal requirements count=1 size=216
??qq?<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>application-identifier</key>
    <string>SYK86VV33F.com.xxxxxx.wforecast</string>
    <key>aps-environment</key>
    <string>production</string>
    <key>get-task-allow</key>
    <true/>
    <key>keychain-access-groups</key>
    <array>
        <string>SYK86VV33F.*</string>
    </array>
</dict>
</plist>

我完全没有想法/解决方案。任何人都可以指出正确的方向吗?

在有人建议之前,我已经尝试使用 gateway.push.apple.com 进行生产,使用 gatetway.sandbox.push.apple.com 进行开发

【问题讨论】:

有人吗?我真的需要一些帮助:( 嗯,有人吗?我已经在这里呆了 10 天了 :( 你解决过这个问题吗? 【参考方案1】:

我也有类似的问题。逐步完成this Apple developer document 中描述的说明帮助了我。我不得不进行一些更改,所以我不能确切地说是哪个解决了这个问题。也许你的问题有所不同,但这里希望能对你有所帮助。

【讨论】:

刚刚遇到了同样的问题,并在Q&A中描述了我的磨难 链接已失效。

以上是关于APNS 推送通知头痛;适用于开发但不适用于生产的主要内容,如果未能解决你的问题,请参考以下文章

Pushsharp 推送通知仅适用于沙盒,不适用于生产

推送通知不适用于生产

Apple 推送通知不适用于分发,但适用于开发

推送通知不适用于生产

IOS VoiP 推送不适用于 APNS 推送

我正在使用 `fcm` gem 发送推送通知,它适用于 android 但不适用于 IOS