2012-12-03 136 views
4

我知道有可能檢查用戶是否禁用了推送設置,如objective c - Detect when user change the app's notifications settings中所述。當應用程序禁用推送時,iOS應用程序應該做什麼?

根據上面的文章,即使用戶已禁用應用程序的推送通知,也會發送推送通知。據我瞭解,我應該始終註冊推送通知applicationDidFinishLaunching:

大多數例子看起來像這樣,即用戶設置被忽略。

- (void)applicationDidFinishLaunching:(UIApplication *)app { 
    // other setup tasks here.... 

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

} 

如果應用程序應該考慮這些設置,那麼正確的實現如何看起來像?

我之所以問這個問題,是因爲我們有很多客戶抱怨說,儘管他們已經禁用了推送通知,但他們正在收到推送通知。這似乎適用於iOS 6.

作爲開發者,我應該關注用戶禁用推送通知的情況嗎?我一遍又一遍地閱讀文檔。特別是文檔application:didReceiveRemoteNotification:。它沒有說明是否在用戶禁用推送通知時調用它。

+1

您可以更準確地瞭解iOS更改的性質或回答您提到的不一致嗎?我的理解是,應用程序註冊通知(無論用戶的設置如何,因爲在後續通知時,用戶可能已經更改了他們的設置),通知在將來的日期生成,用戶可以看到通知,並可以採取行動或不採取行動,或者用戶不通知。我不確定這裏的問題到底是什麼。但是,不,註冊不會失敗,因爲用戶當前已關閉通知。 – Rob

+0

我也明白,禁用iOS時不會顯示推送通知。然而,沒有提到應用程序在註冊並且用戶已禁用推送通知時收到通知。即使用戶禁用推送通知,始終註冊安全嗎?我試圖相應地澄清這個問題。 –

+0

我在看這篇文章,並且對不同iOS版本的差異感到困惑:[objective c - 當用戶更改應用程序的通知設置時檢測](http://stackoverflow.com/questions/1535403/determine-on-iphone-如果用戶 - 已啓用 - 推通知)。根據其中一個答案的評論,iOS 5已經發生了變化。 –

回答

3

確保您實現這些方法知道設備是否註冊與否

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)_deviceToken { 
     if ([application enabledRemoteNotificationTypes] < 4) { 
     NSLog(@"Notifications are disabled for this application"); 
    return; 
     } 
     // The device is registered for notifications 
} 
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{ 
    NSLog(@"FAILED TO REGISTER FOR PUSH NOTIFICATIONS"); 
    NSLog(@"%@", error.userInfo); 
} 

它是確定的推送通知每次您的應用程序啓動註冊。但是您必須確保實施上述方法,以確定用戶是否已啓用或禁用應用程序的通知。

+0

這聽起來像我正在尋找的答案。如果你在if語句中解釋魔術'4'會更好。我會將其添加到我的代碼中。 –

+0

這裏有更多關於UIApplication的enabledRemoteNotificationTypes的信息http://developer.apple.com/library/ios/DOCUMENTATION/UIKit/Reference/UIApplication_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006728-CH3-SW65如果值> = 4,則啓用它。 –

+0

更多解釋:由於enabledRemoteNotificationTypes返回值是按位typedef枚舉,我對UIRemoteNotificationTypeAlert被啓用感興趣。因此我正在檢查4.如果您對其他警報(如徽章和聲音)感興趣,則可以單獨檢查這些警報 –

相關問題