2012-01-17 123 views
8

我已經嘗試了鏈接http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12中的例子,爲我的iPhone推送通知消息。我可以成功運行除了第一次註冊應用程序推送通知的步驟之外的所有步驟。註冊iPhone應用程序推送通知不起作用

我也跟着代碼的不同變化:

[[UIApplication sharedApplication] registerForRemoteNotificationTypes: 
(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; 

但沒有爲我工作。我在iPhone 4中測試它,我的Xode版本是4.2,OS是Lion。 請指教。

+0

你面臨什麼問題?你通過這個鏈接:http://mobiforge.com/developing/story/programming-apple-push-notification-services也http://stackoverflow.com/questions/8075255/push-notification-for-development-certificate/8075436#8075436 – Sarah 2012-01-17 11:07:03

回答

31

你可以嘗試以下方法進行註冊:

  • 確保您的Xcode項目被配置爲使用顯式的綁定ID從供應門戶
  • 確保你沒有構建目標與通配符或團隊的provisioning profile,檢查這對項目目標設置
  • 如果您創建配置推送應用程序ID之前的provisioning profile,重新置備輪廓

也期待在錯誤的對象在UIApplicationDelegate方法

application:didFailToRegisterForRemoteNotificationsWithError: 

編輯1

在文本編輯器中打開配置文件並查找字符串

<key>aps-environment</key> 

如果您的配置文件不包含此設置,則無法正確設置推送。

+0

1)是的,我有明確的捆綁ID 2)我沒有使用通配符,3)我已經重新生成配置文件,並試圖再次運行應用程序。 – Vinod 2012-01-17 12:51:51

+0

您在上述代理方法中遇到什麼錯誤? – nduplessis 2012-01-17 13:13:17

+0

關於推送註冊錯誤,請參閱上面的編輯 – nduplessis 2012-01-17 13:25:55

0

你有沒有在你的應用中看過推送通知對話框?如果您關閉對話框,則需要24小時才能重新顯示。通過將iPhone上的時間設置爲提前2天來查看是否顯示。

也有你實現的委託方法:

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

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { 

- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { 

嘗試把一個的NSLog(@「」)在didRegisterForRemoteNotificationsWithDeviceToken和didFailToRegisterForRemoteNotificationsWithError,看看它是越來越在那裏?

此外,您還需要爲推送通知設置的應用標識,並且您需要生成推送通知證書才能發送消息。

+0

是的,我有這些方法。此外,我有啓用推送通知服務的應用程序ID。 – Vinod 2012-01-17 12:46:14

+0

我正在爲方法「didFinishLaunchingWithOptions」獲取NSlog輸出而不是其他人。現在我得到錯誤無法獲取令牌,錯誤:錯誤域= NSCocoaErrorDomain代碼= 3000「沒有有效的'aps環境'授權字符串找到應用程序」UserInfo = 0x1657c0 {NSLocalizedDescription =無效'aps環境'授權字符串找到對於應用程序} – Vinod 2012-01-17 13:03:42

+0

檢查您是否針對正確的配置文件進行構建。聽起來像是我的問題。您將不得不通過推送通知針對應用程序標識創建配置文件。 – jodm 2012-01-17 14:59:40

3

下面是從應用程序委託我幹活的代碼示例(AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound]; 
} 

要檢查登記就OK,實現這三種方法

– application:didReceiveRemoteNotification: 
– application:didRegisterForRemoteNotificationsWithDeviceToken: 
– application:didFailToRegisterForRemoteNotificationsWithError: 

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIApplicationDelegate_Protocol/Reference/Reference.html

或者你可以去到設置查看是否有權限設置可用

這樣的:

iPad Notification Settings

+0

我已經添加了以上3種方法,然後我在控制檯「無法獲取令牌,錯誤:錯誤域= NSCocoaErrorDomain代碼= 3000」無法找到應用程序的有效'aps-environment'權利字符串錯誤「UserInfo = 0x143bc0 { NSLocalizedDescription =找不到適用於應用程序的「aps-environment」授權字符串}「但是該應用程序正在iPhone上運行,屏幕爲空白。另外,我還沒有啓動代碼的有效載荷/ php部分。 – Vinod 2012-01-17 12:49:27

+0

我已經爲每種方法添加了NSlog打印,我只能從「didFinishLaunchingWithOptions」方法獲得輸出,然後出現上述錯誤。 – Vinod 2012-01-17 13:02:30

+0

@Vinod很好,現在當你有錯誤的迴應時,你可以找到問題所在。閱讀此:http://stackoverflow.com/questions/5681172/bundle-identifier-and-push-certificate-aps-environment-entitlement-error – 2012-01-17 13:27:55

1

如果這個問題在生產中出現(與您在AppStore上的應用程序),它很可能是因爲您創建/啓用應用程序的APNS生產模式後有創建了分發配置文件。

在這種情況下,沒有別的選擇,只能用正確的證書再次提交...

憑經驗:ALWAYS啓用/爲您的應用創建生產證書之前創建分佈圖。

您可以使用'nduplessis'(見下文)描述的方法來手動檢查您的應用程序是否會在批准後運行通知。

0

前往功能 - >推送通知。如果有錯誤然後嘗試此解決方案!

如果Xcode版本已更改從7到8然後嘗試此解決方案!

Xcode 7從您的供應配置文件複製aps環境權利。在Xcode 8上打開推送通知會將權利添加到您的供應配置文件和權利文件中。

嘗試將aps環境權利添加到您的應用程序的權利文件,或者關閉並重新啓用通知功能。