我希望我的应用只在用户登录后才会收到远程通知。我一直在阅读Apple的Local and Remote Notification Programming Guide,我不确定是否需要拨打registerUserNotificationSettings:
当应用程序启动时(application:didFinishLaunchingWithOptions:
),或者这只是一个示例,我可以在用户登录后注册远程通知(如果有)。
另一方面,如果我想在用户退出时停止接收远程通知......是否可以“取消注册”该应用?
由于
答案 0 :(得分:3)
首次启动应用时,您无需注册推送/本地通知。在用户登录后调用它是可以的,事实上,它可能是一个愿望UI /流程决策,因为用户更有可能同意接收通知决定登录该应用程序。
关于退出,您不应该注销"。您需要做的就是向服务器发送一条指示,告知用户当前已注销,因此不应发送任何推送通知。该应用程序将来仍然会选择接收通知(例如,如果用户在设备上的“设置”应用中查看该通知)。
答案 1 :(得分:2)
您不需要在该级别上处理它。只是让它注册,因为你已经将推送服务实现到你的应用程序中,然后从服务器端处理推送,当你从你的应用程序发送令牌时,也发送标志,例如" recievePush"并将此条目保存到您的数据库中。这样您将拥有更多的控制力和灵活性。当用户登录时将标志设置为true,当用户注销时将标志设置为false。发送推送时,只需检查标志......
答案 2 :(得分:2)
您可以在登录/注销时注册和取消注册,但这会导致问题。例如。如果用户在没有注销的情况下重新安装应用程序,您仍然可以在没有登录用户的情况下进行有效注册。请参阅this question。
当应用程序在没有登录用户的情况下启动时,您应该预防性地取消注册,以避免此问题。每次应用程序启动时都应该更新注册,因此在每个应用程序启动时注册/取消注册,具体取决于用户是否登录,另外还要在用户登录/注销时注册/取消注册。这样,如果用户重新安装应用程序并在第一次启动它,它将被取消注册。
这是您可以实现的最佳行为,因为Twitter,Facebook,Skype等具有相同的问题:如果登录用户重新安装应用程序而不先注销,则设备仍会收到用户登录之前的推送通知卸载,即使他没有使用重新安装的应用程序登录。
答案 3 :(得分: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];
}
然后,如果您的用户已注销或未登录,您只需取消通知。:)