2011-10-12 107 views
15

你好,我是iPhone的新手。Adhoc發佈推送通知問題

我正在使用開發環境成功接收推送通知的Iphone應用程序,但未在adhoc分發中收到通知。

我有兩個證書,即開發&生產。

誰能告訴我我錯過了什麼?

回答

43

正如我昨天張貼的回答同樣的問題:(prev. answer

我有類似的問題。做一些測試後,我得出了以下結論:

  1. 如果應用程序(即與development provision profile編譯)安裝比這樣的設備有development token,你應該使用development certificate發送推到這樣的設備。

  2. 如果應用程序(即用distribution provision profile編譯)安裝比這樣的設備有production token,你應該使用production certificate發送推到這樣的設備。

而且,如果您的應用尚未發佈,我認爲APNS不會接受production certificate,那麼可能是你將無法發送推送到您的ad-hoc應用。

你可以做什麼?例如,發送應用程序給你的測試人員,編譯development certificate

更新: 我學會了這個問題,一個更多的時間,發現了一些有趣的信息:

  1. 下載您Ad-hoc provision profile
  2. 從文本編輯器打開配置文件。
  3. 搜索行 <key>aps-environment</key> <string>production</string>
  4. 檢查密鑰的值aps-environment。是否等於production?
  5. 如果是,那麼您應該發送到production certificate的臨時應用推送通知。

    如果該值爲development那麼您應該發送到您的特設應用推送通知development certificate

  6. 現在打開iOS Provisioning Portal - >App IDs。選擇你的應用。
  7. 檢查是否啓用了Production Push SSL Certificate

如果這沒有幫助你,那麼嘗試更新你的專用配置文件。

+0

我覺得你不符合我所說清楚後,它爲發展概況,但不是即興distribution.I也是用'pushmebaby'應用產生notification.Thanks –

+0

我清楚地理解你。閱讀我的第二點:2.如果您的應用程序未在AppStore中發佈,我不確定您是否可以使用生產證書。 – Nekto

+0

我也測試了開發證書和adhoc ditribution配置文件,但它仍然沒有顯示任何東西。 –

1

推送通知有時會令人頭疼,並且由許多元素組成。如果你錯過了某些事情,你的PNS將無法正常工作,並且很難理解爲什麼。根據經驗法則,查看以下清單:
- 使用正確的App ID(配置配置文件附加到的同一個ID)正確生成推送證書和私鑰。
- 證書和私鑰都來自同一個下載的PNS證書。
- 兩個文件都正確連接到一個.pem文件中。
- 應用程序處於活動狀態時,您的應用程序會在推送通知進入時處理這些通知。

在任何情況下,我建議遵循一個很好的教程,如這樣:http://mobiforge.com/developing/story/programming-apple-push-notification-services wordfor word。祝你好運!

+0

感謝教程,我遵循了所有的步驟。我不需要.pem文件,因爲我使用只需要證書的'pushmebaby'應用程序。 –

0

據我所知,你不能發送通知到具有開發證書的Ad Hoc構建。正如你可以想象這種情況是好的,直到你發佈的應用程序。一旦應用程序發佈發送通知到包含製作的特設版本,Cert也會將它們發送給您的應用程序持有者。我得到的方式是:

  1. 在蘋果中創建一個新的應用程序,它與iTunes中的應用程序具有相同的基線。
  2. 爲此「幻影」應用程序創建新的生產密鑰和證書。
  3. 使用新的生產密鑰構建新應用程序並使用該構建進行測試。

現在你將有一個應用程序,你可以構建專門測試通知。不是一個優雅的解決方案,但它工作

+0

不知道爲什麼這是downvoted,創建一個單獨的捆綁是一個合法的機制與平臺,如HockeyApp的beta測試。 – Leon

1

我遇到了同樣的事情,花了相當一段時間試圖找出答案。我生成了一個新的生產證書,創建了Ad-Hoc供應配置文件(這樣我就可以通過生產中的推送通知進行測試),而且根本沒有任何工作。

我相應地固定了推送腳本(服務器端)(使用新生成的.pem文件並連接到ssl://gateway.push.apple.com:2195)。該腳本告訴我,通知已交付,但我的設備實際上並沒有得到它。

原來這個問題真的很無聊!顯然,當使用新證書(或通過Ad-Hoc)使用應用程序時,設備令牌會發生變化。我只能推測他們爲什麼改變的原因,但我所知道的是,一旦我抓住正確的標記並使用我的測試腳本向設備發送通知,我就知道了!

+0

+1。我還必須使用ssl://gateway.push.apple.com:2195(需要刪除沙箱),並且必須使用設備令牌來獲取生產證書。 – Geek

0

我剛剛克服了一個非常類似的問題,事實證明這可能應該是顯而易見的,但我會在這裏發佈它,以防萬一其他人與我一樣愚蠢。

我正在使用MoonAPNS,可能會收到開發通知但不能生產。 後的兜兜轉轉好幾天我回到這一行:

PushNotification push = new PushNotification(true, p12file, p12password); 

以前有忽視true參數,通過服務器代碼調試顯示這是設定是否使用沙盒服務器 - d」哦!切換到false,一切都很好。

道德故事:不要忘記在非沙盒服務器上指出您的通知!

1

除了從Nekto猜測...

而且,如果您的應用尚未發佈,我認爲APNS將不接受生產許可證,所以也許你將無法發送推送到您的專門應用程序。

與此同時,我可以確認即使應用程序尚未發佈,也可以在即席應用程序上接收推送通知。

0

我得到了同樣的問題,經過大量的睾丸後,我終於得到了什麼問題。

這是因爲蘋果生產apns服務器不允許包含私鑰數據的P12文件。但是,如果包含私鑰,開發apns服務器將接受P12文件。

因此,當您從Keychain導出P12文件時,只需選擇沒有私鑰的生產證書文件,即可在您的adhoc應用程序中獲得通知(即使未發佈)。

1

在測試推送到開發環境時,應該記住一個嚴格的清單。他們中的大多數已經在上面提到。但這是解決我的問題的一件事,我想分享一下。我希望它能幫助別人。也就是:

請注意設備令牌ID,這是不同的開發& &生產環境。

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 
     NSString *deviceTokenStr = [[[[deviceToken description] 
             stringByReplacingOccurrencesOfString: @"<" withString: @""] 
            stringByReplacingOccurrencesOfString: @">" withString: @""] 
            stringByReplacingOccurrencesOfString: @" " withString: @""]; 
     UIAlertView *alert= [[UIAlertView alloc]initWithTitle:deviceTokenStr message:Nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil]; 
     [alert show]; 
}