Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS-registerForRemoteNotifications回调在单独的UIView中_Ios_Objective C_Notifications - Fatal编程技术网

iOS-registerForRemoteNotifications回调在单独的UIView中

iOS-registerForRemoteNotifications回调在单独的UIView中,ios,objective-c,notifications,Ios,Objective C,Notifications,我有以下流程:在第一次应用程序启动时,我提供了一个视图,向用户解释为什么我需要他接受推送通知。然后,他有两个选项:跳过(如果他这样做,我将永远不会注册推送通知),或接受推送通知,在这种情况下,我会显示推送通知弹出窗口,他可以接受或拒绝 我有两个问题。首先,我总是使用以下代码在AppDelegate中注册推送通知: if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) {

我有以下流程:在第一次应用程序启动时,我提供了一个视图,向用户解释为什么我需要他接受推送通知。然后,他有两个选项:跳过(如果他这样做,我将永远不会注册推送通知),或接受推送通知,在这种情况下,我会显示推送通知弹出窗口,他可以接受或拒绝

我有两个问题。首先,我总是使用以下代码在AppDelegate中注册推送通知:

    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。你知道回电话的事吗?