iOS-registerForRemoteNotifications回调在单独的UIView中
我有以下流程:在第一次应用程序启动时,我提供了一个视图,向用户解释为什么我需要他接受推送通知。然后,他有两个选项:跳过(如果他这样做,我将永远不会注册推送通知),或接受推送通知,在这种情况下,我会显示推送通知弹出窗口,他可以接受或拒绝 我有两个问题。首先,我总是使用以下代码在AppDelegate中注册推送通知:iOS-registerForRemoteNotifications回调在单独的UIView中,ios,objective-c,notifications,Ios,Objective C,Notifications,我有以下流程:在第一次应用程序启动时,我提供了一个视图,向用户解释为什么我需要他接受推送通知。然后,他有两个选项:跳过(如果他这样做,我将永远不会注册推送通知),或接受推送通知,在这种情况下,我会显示推送通知弹出窗口,他可以接受或拒绝 我有两个问题。首先,我总是使用以下代码在AppDelegate中注册推送通知: if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) {
if ([application respondsToSelector:@selector(registerUserNotificationSettings:)])
{
UIUserNotificationType types = (UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound);
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:types categories:nil];
[application registerUserNotificationSettings:settings];
[application registerForRemoteNotifications];
}
在-(BOOL)应用程序中:(UIApplication*)应用程序使用options:(NSDictionary*)launchOptions
方法完成启动
我现在正试图在用两个按钮显示的视图中使用完全相同的代码,我已经从AppDelegate中删除了代码。这样行吗?在AppDelegate中包含代码的问题在于,它直接提示用户在第一次启动时接受或拒绝推送通知,这是我想要避免的
然后,当用户接受或拒绝推送通知(在弹出窗口上)时,我需要知道一个问题。我不在乎他做了什么决定,我只需要知道他一做出决定,就可以提出下一个观点
我尝试了以下委托方法:
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
和-(void)application:(UIApplication*)application未能注册远程通知错误:(NSError*)错误
但当我点击“允许”或“不允许”时,他们不会被呼叫
正确的方法是什么?我找到了这个问题的解决方案。 首先,正如@ystack所评论的,您完全可以在应用程序中的任何位置调用远程通知注册 其次,我在我的应用程序委托中添加了此方法:
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
[application registerForRemoteNotifications];
[[NSNotificationCenter defaultCenter]
postNotificationName:@"pushNotification"
object:self];
}
然后,我在特定的ViewController中添加了以下内容:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(pushNotificationClicked:)
name:@"pushNotification"
object:nil];
- (void)pushNotificationClicked:(NSNotification *) notification {
if ([[notification name] isEqualToString:@"pushNotification"]){
//do whatever you want
}
}
最后,在同一个ViewController中使用此方法:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(pushNotificationClicked:)
name:@"pushNotification"
object:nil];
- (void)pushNotificationClicked:(NSNotification *) notification {
if ([[notification name] isEqualToString:@"pushNotification"]){
//do whatever you want
}
}
这样,当用户按“允许”或“不允许”时,我会收到一个回调。是的,您可以从应用程序中的任何位置调用远程通知注册。谢谢@ystack。你知道回电话的事吗?