2013-03-24 118 views
23

我們完全被困住了,請幫忙。蘋果推送通知不生產

我和我的團隊做了一個iPhone應用程序,這是我們第一次在iOS上嘗試。

一切都很好,直到我們提交我們的應用程序,併成爲應用程序商店可用 - 推送通知服務不起作用。我搜索了網絡,並試圖通過人們的建議仔細檢查我們的應用程序,但我找不到錯在哪裏。所以這個問題在這裏發佈。

這是我們所做的事情:

  1. 我們構建應用程序,假設它的命名 「AppMaster」。

  2. 我們在iOS Provisioning Portal上創建了名爲「pushtest」的AppId。此ID在開發和生產上啓用了推送通知。

  3. 我們從上面的appId創建了名爲「AppMasterPushTest」的開發配置。此配置供內部測試,團隊中的每個人都將其安裝在他們的Mac上。

  4. 我們的服務器是由Java實現的,我們使用了java-apn包。在測試過程中,我們下載了用於開發的認證文件並寫出了.p12文件,並通過使用該包的api - 帶有該.p12文件的withSandboxDestination()將我們的消息推送到「沙箱」服務器。測試進行得很順利,收到通知。

  5. 我認爲我們已經做好準備了,所以我們創建了另一個名爲「AppMaster」的AppId,並且只爲生產啓用了推送通知。此ID用應用程序的包標識符編寫。

  6. 我們在步驟5中從AppId製作了名爲「appMaster」的另一個配置文件,分配方法設置爲「App Store」。下載它並重建應用程序。這一個被提交給蘋果公司,並在應用程序上運行。

  7. 服務器端,我們下載了生產認證並再次寫出.p12文件。並使程序通過使用api-withProductionDestination()將消息推送到生產服務器,並將.p12寫出。

  8. 我們從App Store安裝了應用程序。可悲的是,通知從未交付。

有什麼我們錯過了?順便說一句,我們在步驟5中創建的id看起來像「XXX.com.company.appname」,但在應用程序的捆綁標識符中,我們只設置了「com.company.appname」部分而沒有前綴。這可能是問題嗎?

歡迎任何想法。

請成爲我們的保護者。謝謝。

+1

你自己說過。推送應用程序ID和實際的包ID應該是相同的。您的證書也可能存在問題。確保您的主要分發證書和推送證書使用相同的SSH RSA密鑰對進行簽名。 – 2013-03-24 06:16:07

+0

您可以嘗試從.p12創建一個pem文件,然後嘗試通過PHP發送推送。這裏是鏈接 - http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12 – 2013-03-24 19:15:02

+0

謝謝你們。關於應用ID,我認爲Eran是對的。而我們的服務器是純java的,添加一個php工具將會是太多工作。 – 2013-03-25 07:58:35

回答

28

上面的註釋不正確。該應用程序ID具有前綴捆ID前:

的應用程序ID由具有 蘋果生成的10字符代碼前綴的應用程序包的ID。小組管理員必須輸入 套件ID。對於證書,它必須包含特定的軟件包ID;你不能使用「通配符」應用程序ID。

您應該檢查你的供應配置文件,以確保它包含正確的APS權利:

驗證在預配置配置文件的資格是 正確。爲此,請在文本編輯器中打開.mobileprovision文件。 該文件的內容採用XML結構。在授權 字典中找到aps-environment密鑰。對於開發配置文件 ,此密鑰的字符串值應爲 開發;對於分發配置文件,字符串值 應該是生產

發送推送通知到生產APNS服務器(在沙箱環境中工作的設備令牌在生產環境中不起作用)時,應確保使用生產設備令牌。

在將應用程序發佈到應用程序商店之前,您應該使用AdHoc配置配置文件測試您的應用程序。 AdHoc配置文件與生產推送環境配合使用。

編輯:

一些報價關於設備令牌:

Local and Push Notification Programming Guide

注意到,在生產環境中的設備令牌和 設備令牌發展(沙盒)環境不一樣 的值。

Technical Note TN2265

處理畸形通知

簡單的二進制接口,如果推送服務 收到的通知是在某些方面不正確斷開連接。您的供應商 可能會將此視爲發送 通知時發出的EPIPE或管道故障錯誤。另一方面,增強的二進制接口 會發送一個錯誤響應,其中包含有關刪除連接之前通知錯誤的更多詳細信息 。請確保您的提供商 正確捕獲並處理這些條件。

最常見的問題是無效的設備令牌。如果來自沙盒環境的令牌來自 ,例如當您在內部測試 開發版本時,則無法將其發送到生產推送 服務。每個推送環境將爲同一設備或計算機發出不同的令牌。如果您將設備令牌發送到錯誤的環境中,則推送服務會將該設備令牌視爲無效令牌,並丟棄該通知。

最後,this article是如何發送多個通知蘋果時,有些通知是無效的(最常見的原因是無效的設備令牌)的一個很好的解釋,可能會導致一些有效的通知,不也到達的。

+1

感謝Eran,我們檢查了我們的配置文件,它確實有「aps-environment」鍵,其值爲「生產」。現在我不確定設備令牌,但是對於我自己的iphone,我們的系統確實顯示出兩個不同的標記。仍然在努力... – 2013-03-25 07:55:41

+4

@HetfieldJoe如果你有兩個相同設備的標記,只有其中一個將用於生產環境。如果您嘗試發送給他們,如果您首先發送了錯誤的令牌(這將關閉連接),他們可能會同時失敗。 – Eran 2013-03-25 13:41:07

+1

這是一個新想法。將檢查它 – 2013-03-26 08:14:49