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 推送通知头痛;适用于开发但不适用于生产的主要内容,如果未能解决你的问题,请参考以下文章