2011-09-29 254 views
4

據我所知,如果有多個應用程序在設備上安裝不同的應用程序ID,爲每個應用程序生成的推送通知令牌應該是唯一的。Iphone - 多個應用程序,不同的應用程序ID,相同的令牌

在我的情況,我有不同的配置配置文件編譯幾個應用程序和他們每個人是根據不同的應用ID(儘管他們中的一些具有相同的捆綁種子ID,有些則沒有)。

對於我生成的每個應用程序,我生成了開發推送通知SSL並導出SSL以生成PEM。接下來,我下載配置文件並將其應用於XCode。

當我試圖在我的設備上運行它,我從獲得:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 

上所有的應用程序都是一個相同的設備令牌。我想知道那是爲什麼?

而當我試圖通過我的服務器推送通知時,沒有收到錯誤消息。但通知從未傳送到已安裝的設備。

請給我關於這個問題的建議。提前致謝。

+2

單個設備令牌是正確的。我開發了幾個應用程序,它們使用相同的服務器進行推送,即使在同一臺設備上,也可以獲得正確的消息。我認爲這是一種神奇的... – AlexVogel

回答

21

設備令牌不是爲每個應用獨特的,不管它是生產或開發環境。您可能想知道,如果設備令牌對於所有應用程序都是相同的,那麼推送通知如何被路由到正確的設備和正確的應用程序?答案是應用程序的唯一捆綁ID。 App Store上的每個應用程序都有一個唯一的標識符,例如:com.mycompanyname.dummyapp。當應用程序註冊自己的推送通知時,應用程序包標識和設備令牌都會在Apple的服務器上註冊。

Willy,您可能要檢查的最後一件事是配置Push通知的第一步是從Keychain管理器創建一個CertificateSigningRequest.certSigningRequest文件。如果您有2個應用程序,則必須執行此步驟兩次,以便最終生成2個不同的文件,這些文件將用於Apple門戶中以創建SSL.cer文件。您的問題可能是您使用相同的.certSigningRequest來創建不同的SSL.cer文件,而不是使用不同的SSL.cer文件。

+2

我們在部署時遇到了問題,一個項目生成多個目標,每個目標都有自己獨特的應用程序ID和推送通知證書。然而,某些目標收到了所有推送通知,而其他目標卻沒有收到。經過很多頭部刮擦,我們意識到使用相同的證書籤名請求來生成所有推送通知證書。重新創建具有唯一證書籤名請求的所有文件的技巧。優秀的答案@伊萬桑切斯 –

+0

ios 7處理設備令牌不同(他們是獨特的每個應用程序):https://stackoverflow.com/a/20111644/289319 – user24957

4

對於開發配置的配置文件,該設備令牌將是使用開發配置文件設備上的所有其他應用程序一樣。

在生產(應用程序商店),設備令牌將是爲每個應用程序獨一無二的,因爲據我所知。但我不是100%確定的。

至於爲什麼推送通知未發送到您的設備,這是很難不詳細回答。

+0

在我的服務器上我收到蘋果服務器回覆的消息,如{「aps」:{「alert」:「message」,「badge」:0,「sound」:「default 「}}。這是不是意味着消息已成功發送到設備? – Willy

+0

如果您使用APS格式的版本2,Apple將在關閉連接之前傳遞一個帶有錯誤代碼的有效內容。您可以在Apple的開發者文檔中閱讀更多關於它的信息。 –

+3

令牌對於每個應用程序不一定是唯一的。請參閱http://stackoverflow.com/questions/2338267/is-the-apn-device-token-unique-to-each-individual-app – malonso

相關問題