2015-08-25 60 views
3

我希望我的應用只在用戶登錄時才能接收遠程通知。我一直在閱讀Apple的Local and Remote Notification Programming Guide,我不確定是否需要致電registerUserNotificationSettings:當應用程序啓動時(application:didFinishLaunchingWithOptions:),或者這只是一個示例,我可以在用戶登錄後(如果他登錄)註冊遠程通知。註冊用戶登錄時的遠程通知

另一方面,如果我想在用戶註銷時停止接收遠程通知...是否可以「註銷」應用程序?

謝謝

回答

3

當應用第一次啓動時,您不必註冊推送/本地通知。可以在用戶登錄後調用它,事實上,這可能是一個希望的UI/Flow決定,因爲用戶更可能在已決定登錄應用程序後同意接收通知。

關於註銷,你不應該「取消註冊」。您只需向服務器發送一個指示,表明用戶當前已註銷,因此不應發送任何推送通知。該應用程序仍將選擇接受未來的通知(例如,如果用戶在設備上的設置應用程序上查看它)。

1

@Chonch說真話,但如果你想繼承人如何做到這一點:

if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) 
{ 
    //UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound |UIRemoteNotificationTypeAlert) categories:nil]; 
    //[application registerUserNotificationSettings:settings]; 
    [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge categories:nil]]; 
    [[UIApplication sharedApplication] cancelAllLocalNotifications]; 
} else { 
    //register to receive notifications 
    UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound; 
    [application registerForRemoteNotificationTypes:myTypes]; 
} 

然後你只需取消通知,如果您的用戶已註銷或者沒有登錄:)

2

您不需要在該級別處理它。只需讓它註冊,因爲您已將推送服務實施到您的應用程序中,然後從服務器端處理推送,當您從應用程序發送令牌時,還會發送標誌例如「recievePush」並將此條目保存到數據庫中。這樣你將擁有更多的控制力和靈活性。當用戶登錄時,將該標誌設置爲true,並在用戶註銷時將該標誌設置爲false。當發送推只檢查標誌...

2

您可以註冊和取消註冊登錄/註銷,但這會導致問題。例如。如果用戶在不註銷的情況下重新安裝應用程序,您仍然可以在沒有登錄用戶的情況下進行有效的註冊。請參閱this question

爲了避免這個問題,您應該預防性地取消註冊,當應用程序啓動時沒有登錄用戶。每次應用程序啓動時,您都應該更新註冊,因此在每次應用程序啓動時註冊/取消註冊,具體取決於用戶是否登錄,此外還需要在用戶登錄/註銷時註冊/取消註冊。這樣,如果用戶重新安裝應用程序並在第一次啓動它時,它將被取消註冊。

這是您可以實現的最佳行爲,因爲Twitter,Facebook,Skype等都具有相同的問題:如果登錄用戶在未先登出的情況下重新安裝應用程序,設備仍然會接收用戶登錄的推送通知在卸載之前,即使他沒有使用重新安裝的應用程序登錄。