繁体   English   中英

成功登陆Google后,App在IOS崩溃(目标C)

[英]After successfully Google login App is crashing in IOS(Objective C)

我正在使用Xcode 8.0,在iOS 10.0上测试并使用手动安装的SDK,GoogleSignIn / GoogleSignIn.h。

成功登录后,应用程序崩溃。我在下面提到的错误消息

错误:

由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [pinakinAudioListViewController signIn:didSignInForUser:withError:]:无法识别的选择器发送到实例0x7fc44e863c00'***第一次抛出调用堆栈:(0 CoreFoundation 0x000000010229034b exceptionPreprocess + 171 1 libobjc.A名为.dylib
0x000000010596121e objc_exception_throw + 48 2 CoreFoundation
0x00000001022fff34 - [NSObject(NSObject)doesNotRecognizeSelector:] + 132 3 CoreFoundation 0x0000000102215a2e ___forwarding_ + 526 4 CoreFoundation 0x0000000102215798 _CF_forwarding_prep_0 + 120 5 Pinakin
0x0000000100e517af 37- [GIDSignIn addCallDelegateCallback:] _ block_invoke + 116 6 Pinakin
0x0000000100e49981 - [GIDCallbackQueue fire] + 147 7 Pinakin
0x0000000100e5735b - [GIDTokenFetchDelegate didFinishTokenFetchWithAuth:fetcher:error:] + 53 8 CoreFoundation
0x000000010221705c __invoking_ + 140 9 CoreFoundation
0x0000000102216ee1 - [NSInvocation invoke] + 289 10 Pinakin
0x0000000100e5c771 + [GTMOAuth2Authentication invokeDelegate:selector:object:object:object:] + 207 11 Pinakin
0x0000000100e5ba79 - [GTMOAuth2Authentication tokenFetcher:finishedWithData:error:] + 648 12 CoreFoundation
0x000000010221705c invoking_ + 140 13 CoreFoundation
0x0000000102216ee1 - [NSInvocation invoke] + 289 14 Pinakin
0x0000000100e61bd3 67- [GTMSessionFetcher completionHandlerWithTarget:didFinishSelector:] _ block_invoke + 268 15 Pinakin 0x0000000100e692c5 __71- [GTMSessionFetcher invokeFetchCallbacksOnCallbackQueueWithData:错误:] _ block_invoke + 25 16 libdispatch.dylib 0x00000001064ff980 _dispatch_call_block_and_release + 12 17 libdispatch.dylib 0x00000001065290cd _dispatch_client_callout + 8 18 libdispatch.dylib 0x0000000106509a1d _dispatch_main_queue_callback_4CF + 733 19 CoreFoundation 0x00000001022544f9 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE + 9 20 CoreFoundation 0x0000000102219f8d __CFRunLoopRun + 2205 21 CoreFoundation 0x0000000102219494 CFRunLoopRunSpecific + 420 22 GraphicsServices
0x00000001081c2a6f GSEventRunModal + 161 23 UIKit
0x0000000103449f34 UIApplicationMain + 159 24 Pinakin
0x0000000100daa00f main + 111 25 libdyld.dylib
0x000000010657568d开始+ 1 26 ???
0x0000000000000001 0x0 + 1)libc ++ abi.dylib:以NSException类型的未捕获异常终止

我使用此代码创建了自定义登录

GIDSignIn *sigNIn=[GIDSignIn sharedInstance];
[sigNIn setDelegate:self];
[sigNIn setUiDelegate:self];
sigNIn.shouldFetchBasicProfile = YES;

sigNIn.scopes = @[@"https://www.googleapis.com/auth/userinfo.email",@"https://www.googleapis.com/auth/userinfo.profile"];
sigNIn.clientID =@"851647387203-6n9vm1jpn8uv2c0g1qsrdi4nn69f8rh5.apps.googleusercontent.com";
[sigNIn signIn];

在AppDelegate中

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
    sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {         

    BOOL wasHandled=false;
    if ([url.scheme hasPrefix:@"fb"]) {

        wasHandled = [[FBSDKApplicationDelegate sharedInstance] application:application
                                                                    openURL:url
                                                          sourceApplication:sourceApplication
                                                                 annotation:annotation
                      ];

        //Facebook callback
    }
    else       //Google Plus callback
    {
        wasHandled= [[GIDSignIn sharedInstance] handleURL:url
                                        sourceApplication:sourceApplication
                                               annotation:annotation];

    }

    NSLog ( @"application openURL");
    NSLog ( @"URL = %@", url);
    NSLog ( @"Application = %@", sourceApplication);

    return wasHandled;
}

只需在你的pinakinAudioListViewController实现signIn:didSignInForUser:withError:委托GIDSignInDelegate方法。

- (void)signIn:(GIDSignIn *)signIn didSignInForUser:(GIDGoogleUser *)user withError:(NSError *)error {
  NSLog(@"User signed in!");
}

请不要忘记实现signIn:didDisconnectWithUser:withError:

另请参阅: https//developers.google.com/identity/sign-in/ios/api/protocol_g_i_d_sign_in_delegate-p

为您的ViewController实现GIDSignInDelegate方法:

- (void)signInWillDispatch:(GIDSignIn *)signIn error:(NSError *)error
{
    [SVProgressHUD dismiss];
}
- (void)signIn:(GIDSignIn *)signIn presentViewController:(UIViewController *)viewController
{
    [self presentViewController:viewController animated:YES completion:nil];
}
- (void)signIn:(GIDSignIn *)signIn dismissViewController:(UIViewController *)viewController
{
    [self dismissViewControllerAnimated:YES completion:nil];
}
- (void)signIn:(GIDSignIn *)signIn didSignInForUser:(GIDGoogleUser *)user withError:(NSError *)error
{
    NSLog(@"%@",user);
}

您也可以将此方法写入AppDelegate类:

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation
{
    return ([[FBSDKApplicationDelegate sharedInstance] application:application openURL:url sourceApplication:sourceApplication annotation:annotation])  || ([[GIDSignIn sharedInstance] handleURL:url sourceApplication:sourceApplication annotation:annotation]);
}

希望这对你有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM