`isRegisteredForRemoteNotifications`在我第一次查询时返回false

时间:2015-09-03 13:44:22

标签: ios push-notification apple-push-notifications

我正在创建一个iPhone应用,并希望在应用中的某个位置询问用户推送通知,这是他打开电源的时间。

流程是这样的:启动应用程序 - >玩游戏 - >结束游戏 - >自定义弹出窗口出现一个开关并询问您是否要打开推送通知? - >如果是,则调用registerForRemoteNotifications(iOS 8) - >如果没有用户可以进入设置(在我的应用程序内)并打开一个应该再次询问他的开关。

问题是,当用户进入设置(在我的应用内)打开它时,我不知道是否调用了registerForRemoteNotifications。 如果我检查isRegisteredForRemoteNotifications,它会在调用第一个registerForRemoteNotifications之前返回no,因此这不是一个选项。

我可以先调用registerForRemoteNotifications,但如果用户从通知中心停用了应用,则不会调用回调,因此我无法显示弹出窗口,说明您已停用通知。

所以基本上我想要的是Apple推出的弹出通知在我的应用程序中的特定点,并允许用户手动打开,关闭我的应用程序内的通知。此外,当我显示设置屏幕时,我想知道用户是否从应用程序外部禁用了通知,因此他看到通知已被禁用。

有没有办法实现这个目标?我是否必须在NSUserDefaults中保存局部变量才能知道是否调用了registerForRemoteNotifications

1 个答案:

答案 0 :(得分:2)

您可以使用[UIApplication registerUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings]来显示Apple的推送通知权限弹出窗口。

如果您想查看自己的应用设置'您可以使用此通知状态:

UIUserNotificationType currentType = [UIApplication currentUserNotificationSettings].types;
UIUserNotificationType required = UIUserNotificationTypeBadge | UIUserNotificationTypeAlert;

if (currentType == UIUserNotificationTypeNone) {
    //show enable message
} else if (!(currentType & required)){
    //show enable UIUserNotificationTypeBadge or
    //UIUserNotificationTypeAlert message
}