2012-06-12 28 views
2

我已經發布了帶有推送通知的應用更新,但是當我檢查我的服務器時,我注意到發送到數據庫的令牌爲「null」。我使用開發證書和臨時產品證書進行了大量測試。兩個都成功地工作,但應用程序商店的版本不,我不知道爲什麼。我在2周前發佈了關於這個問題的消息,有人告訴我,我不應該使用我用於臨時設置的配置文件,所以我創建了一個具有相同ID的新配置文件。更新昨天得到版本,我仍然有同樣的問題。我需要找到一個永久的解決方案,因爲我的用戶對所有這些更新感到惱火,但我不知道如何測試,直到它在應用商店獲得批准。應用程序爲應用商店的設備令牌返回空值

如果有人可以請提供想法或協助,我會很感激。提前致謝。

P.S.如果有幫助,我從我的設備上刪除我的應用程序,並從應用程序商店再次安裝它...它沒有問我是否想要接收推送通知,但是從手機設置中啓用了應用程序的推送...

+1

向我們展示的代碼! –

+0

@StevenKramer通向很多代碼的途徑。如果它適用於特殊應用,爲什麼它不適用於應用商店?我覺得沒有必要的代碼? –

+0

嗯,是的,但這裏有一個錯誤。無論是在你的代碼還是在系統框架中。該文件說「當應用程序成功註冊Apple推送服務(APS)時發送給代理人。」整個過程取決於在APNS和OS之間交換的有效設備令牌。 –

回答

11

有在溝通的APN 3個步驟:

  1. 您的應用程序註冊到您的iOS內收到您的appDelegate的APN。這會給你一個你應該用來發送通知的deviceToken。
  2. 您的應用程序發送deviceToken到管理服務器
  3. 管理服務器與蘋果的APN服務器連接來發送推送通知

在你的情況,我明白你的問題是在步驟1,因爲你說你有一個空的設備ID和應用程序沒有問你關於APNs的權限。因此,更改您的服務器證書或從gateway.sandbox.push.apple.com切換到gateway.push.apple.com不會有幫助,因爲之前發生錯誤。

這顯然是您的證書的問題。您應該檢查你已經做了你的蘋果iOS Provisioning戶所有必需的步驟:

  1. 與應用的軟件包標識符創建的AppId。避免通配符,如*。
  2. 配置您的InAppPurchase選項爲您的應用程序(這不是問題,因爲用於步驟3中的通信)
  3. 爲它使用1使用的AppId分佈創建的provisioning profile(我懷疑這可能是你的問題),並下載
  4. 打開XCode項目設置,並檢查您歸檔操作使用3 donwloaded正確的配置文件要確保你選擇正確的一個,當組織者詢問之一。 (如果上一步是確定的,那麼這就是你的問題,所以雙重或三重檢查)。

如果你想確保你的二進制與再次提交到AppStore上之前正確的配置文件生成,請執行下列操作:用取景器(第一

  1. 打開二進制文件,打開歸檔在庫/開發/的XCode /檔案館/ ...,右擊它和「顯示包內容」,導航到/產品/應用/ youApp,顯示包內容再次)
  2. 查找文件embedded.mobileprovision和開放它與文本編輯器
  3. 在二進制內容中,你應該能夠o本地化一些名爲「application-identifier」和「aps-environment」的字段。檢查他們是否有正確的值。

我敢打賭,如果您檢查以前存檔的應用程序,您將看到不正確的配置文件。 這是您的應用不返回deviceToken的唯一原因。(除非它收到它,但沒有正確發送到您的服務器,這是上述通信步驟2中的問題)。

+0

他怎麼能提交一個應用程序具有不正確的分銷配置配置文件?它會被iTunes拒絕。 – rasmus

+0

不是。它可以是正確的配置文件,但使用通配符作爲bundleId。這將正常工作,但不適用於APN。事實上,這是部署啓用APN的應用時的一個非常常見的問題。 –

0

如果您爲應用程序創建了一個新的供應配置文件,我認爲您還需要在您的服務器上生成新的證書。

+0

沒有證書鏈接到應用標識,而不是應用程序provison –

+0

@OmarAbdelhafith我相信這是真實的,以及... –

2

你使用gateway.push.apple.com而不是gateway.sandbox.push.apple.com

+0

我用gateway.push.apple.com ...謝謝,雖然我知道這是一個典型的錯誤 –

+0

順便說一句,我敢肯定,它不會爲ad hoc工作,如果它是.sandbox –

0

如果您可以通過連接包含設備令牌空問題您的應用程序安裝的設備,爲您在「控制檯應用程序」(主辦方>設備>控制檯)您的應用程序日誌。基於


  • 這個
    no valid 'aps-environment' entitlement string found for application

    的問題是由於目前的供應配置文件不包含 APNS信息,爲供應配置文件之前 創建APNS證書創建的。

    解決方案:創建新的Provisioning Profile &在Xcode中選擇Provisioning Profile將清除錯誤。

  • 可以執行終端命令來檢查「生產臨時 資料」支持APNS環境或不和它應該類似於以下內容:

安全CMS -D -i Path_Of_Your_AppStoreDistribution.mobileprovision

<key>Entitlements</key> 
<dict> 
    <key>application-identifier</key> 
    <string>H22LLUHM4D.com.company.appName</string> 
    <key>aps-environment</key> 
    <string>production</string> 
    <key>get-task-allow</key> 
    <false/> 
</dict> 
相關問題