准备工作:
在Enable Google Services for your App注册一个App,然后把GoogleService-Info.plist下载下来,备用。
接下来需要往接入的项目中做点“手脚”:
一、导入GoogleLogin的SDK(可以手动拖入也可以用pod管理)
pod引入方式 cocoapods
pod 'GoogleSignIn'
需要注意无论哪种方式都需要依赖一下库,如果没有请加上:
- LocalAuthentication.framework
- SafariServices.framework
- SystemConfiguration.framework
二、配置URLType,如图:
URL Schemes是颠倒的Client_ID,Client_ID可以从GoogleService-Info.plist中获取到;三、初始化
AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[GIDSignIn sharedInstance].clientID = kClientID; //GoogleService-Info.plist 中的CLIENT_ID
}- (BOOL)application:(nonnull UIApplication *)application openURL:(nonnull NSURL *)url options:(nonnull NSDictionary<NSString *, id> *)options {
return [[GIDSignIn sharedInstance] handleURL:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
}
四、使用
LoginViewController:
这里可以用Google提供的GoogleSigInButton也可以自定义,自定义需要自己实现一些代理方法,自定义如下:
LoginViewController
#pragma mark - 自定义按钮的点击事件
- (void)googleSignIn:(UIButton *)sender { GIDSignIn *signIn = [GIDSignIn sharedInstance]; signIn.shouldFetchBasicProfile = YES; signIn.delegate = self; signIn.uiDelegate = self; [signIn signIn];}
#pragma mark - Google SignInDelegate
- (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];}
//登录回调
#pragma mark - GIDSignInDelegate
- (void)signIn:(GIDSignIn*)signIn didSignInForUser:(GIDGoogleUser*)user withError:(NSError*)error {
if(error) {
//[self ShowExclaHud:@"授权失败"];
[TPProgressUtils showError:NSLocalizedString(@"ty_author_failure", nil)];
} else {
NSString*token = user.authentication.idToken;
NSString *countryCode = self.selectCountryView.countryCode; //获得返回数据resultDic实现客户端登录
}}
以上代码根据实际情况需要进行一个简单的封装,不能直接堆叠在对应的类中,会不太友好。
在做Google登录调试的时候,由于我们服务端只在外国区发布接口,所以我们需要将APP的域名切换到国外
到这里基本上APP端要做的事情就算集成完成了, 其实还是蛮简单的,没有什么复杂的过程,剩下的就和和服务端联调,一定要注意的是,服务端的client_id一定要和APP的对应(同一个应用拿到的Client_ID),不然服务端那边验证一直不会通过。刚开始我们就都以为各自的ID是正确的,这是一个蛋疼的联调过程。对以上有任何问题都可call me。大家一起踩坑。。。。
最后,科学上网。。。你懂得!!!