应用程序启动完成后,App Center崩溃报告确认消失

时间:2019-11-12 10:28:48

标签: ios objective-c crash-reports visual-studio-app-center

我正在Objective-C应用程序中实现App Center SDK,并且我需要实现崩溃报告发送的确认。 微软在其指南中提供的解决方案通常可以使用(https://docs.microsoft.com/en-us/appcenter/sdk/crashes/ios),但是在我的应用程序中,在application:didFinishLaunchingWithOptions:方法执行完之后,将显示主视图(在启动过程中,显示​​加载屏幕),并关闭带有确认的警报

我尝试将performSelectorOnMainThread:withObject:waitUntilDone与waitUntilDone上的YES一起使用-它不起作用。

如果我尝试以另一种方法(不在application:didFinishLaunchingWithOptions:中)实现此警报,则不会出现警报。

使用“ while”循环(等待答案)阻止UI会导致崩溃。

这是Microsoft的默认解决方案,它不能按我的意愿工作。

[MSCrashes setUserConfirmationHandler:(^(NSArray<MSErrorReport *> *errorReports) {
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"crash" message:@"message" preferredStyle:UIAlertControllerStyleAlert];                                                    

    UIAlertAction* sendAction = [UIAlertAction actionWithTitle:@"Send"
                                                         style:UIAlertActionStyleDefault
                                                       handler:^(UIAlertAction *action) {
                                                           [MSCrashes notifyWithUserConfirmation:MSUserConfirmationSend];
                                                       }];

    [alertController addAction:sendAction];
    alertController.preferredAction = sendAction;

    [alertController addAction:[UIAlertAction actionWithTitle:@"Always send"
                                                        style:UIAlertActionStyleDefault
                                                      handler:^(UIAlertAction *action) {
                                                          [MSCrashes notifyWithUserConfirmation:MSUserConfirmationAlways];
                                                      }]];

    [alertController addAction:[UIAlertAction actionWithTitle:@"Don't send"
                                                        style:UIAlertActionStyleDefault
                                                      handler:^(UIAlertAction *action) {
                                                          [MSCrashes notifyWithUserConfirmation:MSUserConfirmationDontSend];
                                                      }]];

    [self.window.rootViewController presentViewController:alertController animated:YES completion:nil];
    return YES;
})]

我希望用户在发送报告之前或不发送报告之前能够思考所需的时间,但是在应用程序启动完成并显示新的(应用程序主视图)后,警报会消失。

没有人遇到这个问题吗? 您是如何解决的?

1 个答案:

答案 0 :(得分:0)

已解决。

我希望这会对某人有所帮助。

[MSCrashes setUserConfirmationHandler:(^(NSArray<MSErrorReport *> *errorReports) {
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"crash"
                                                                             message:@"message"
                                                                      preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction* sendAction = [UIAlertAction actionWithTitle:@"Send"
                                                         style:UIAlertActionStyleDefault
                                                       handler:^(UIAlertAction *action) {
                                                           [MSCrashes notifyWithUserConfirmation:MSUserConfirmationSend];
                                                           [self.window makeKeyAndVisible];
                                                       }];

    [alertController addAction:sendAction];
    alertController.preferredAction = sendAction;

    [alertController addAction:[UIAlertAction actionWithTitle:@"Always send"
                                                        style:UIAlertActionStyleDefault
                                                      handler:^(UIAlertAction *action) {
                                                          [MSCrashes notifyWithUserConfirmation:MSUserConfirmationAlways];
                                                          [self.window makeKeyAndVisible];
                                                      }]];

    [alertController addAction:[UIAlertAction actionWithTitle:@"Don't send"
                                                        style:UIAlertActionStyleDefault
                                                      handler:^(UIAlertAction *action) {
                                                          [MSCrashes notifyWithUserConfirmation:MSUserConfirmationDontSend];
                                                          [self.window makeKeyAndVisible];
                                                      }]];

    self.alertWindowForCrashReport = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.alertWindowForCrashReport.rootViewController = [[UIViewController alloc] init];
    [self.alertWindowForCrashReport makeKeyAndVisible];
    [self.alertWindowForCrashReport.rootViewController presentViewController:alertController animated:YES completion:nil];

    return YES; // Return YES if the SDK should await user confirmation, otherwise NO.
})];

现在我要在新窗口中创建警报,将[self.alertWindowForCrashReport makeKeyAndVisible]发送到此新窗口以发出警报,然后在每个操作处理程序中将[self.window makeKeyAndVisible]发送到主窗口。