海外Android应用接入第三方登录

2,969 阅读3分钟

由于海外用户<手机号-验证码>的登录意向较低,所以接入三方登录以提升用户登录率。海外应用的三方登录普遍指google和facebook的授权登录。

Google login


Google Sign-In for Android has the following requirements:

  • A compatible Android device that runs Android 4.1 or newer and includes the Google Play Store or an emulator with an AVD that runs the Google APIs platform based on Android 4.2.2 or newer and has Google Play services version 15.0.0 or newer.
  • The latest version of the Android SDK, including the SDK Tools component. The SDK is available from the Android SDK Manager in Android Studio.
  • A project configured to compile against Android 4.1 (Jelly Bean) or newer.

以上要求来源于Google Identity官网,说的是对接入Google sign的设备以及工程的要求:

1.兼容4.1以上android系统版本且包含google play store的设备,或运行在google api平台上系统版本4.2.2以上且google service版本在15.0.0以上的模拟器

2.最新版本的android SDK

3.compileSdkVersion在4.1或以上

配置

代码接入钱需要进行开发者的一些配置,如果你的项目接入的Firebase 那么可以在Firebase的项目设置中配置,如果没有接入则可以在Google Identity中配置你的项目。 以下按照已经接入Firebase的项目前提进行配置,如果项目工程中已经加入了SHA1指纹,则不需要以下步骤。

1.生成SHA1指纹,添加到工程中。(android studio中点击gradle->Tasks->android->signingReports查看项目中各种变体的加密签名信息 )(keytool -v -list -keystore xxxx 同样可以查看)

2.项目设置中找到google-service.json文件下载下来,替换原工程文件,IDE中能发现json文件中更新了client id字段

代码接入

SDK接入

1.接入google login sdk


//根目录gradle文件
allprojects {
    repositories {
        google()
        // gradle 版本低于4.1,需要加入以下maven地址(注意是gradle version,并非gradle plugin version)
        // maven {
        //     url 'https://maven.google.com'
        // }
    }
}
//业务工程gradle文件
implementation 'com.google.android.gms:play-services-auth:15.0.1'

使用Google sign

		//构建GoogleSign Client
       GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(context.getString(R.string.default_web_client_id))
                .requestEmail()
                .requestProfile()
                .requestId()
                .build();
        GoogleSignInClient client = GoogleSignIn.getClient(context, gso);
        

        //吊起google的账号选择弹窗页面
        Intent signInIntent = mGoogleSignInClient.getSignInIntent();
        activity.startActivityForResult(signInIntent, GOOGLE_SIGN_IN);


    //在回调中处理业务逻辑,此处已经拿到google账号的信息,如果你的项目后台有自己的usercenter,可在此处进行登录
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode != GOOGLE_SIGN_IN) {
            return;
        }
        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
        handleSignInResult(task);
    }

备注:一切以官网最新建议使用方法和配置为主,详情见

developers.google.com/identity/si…

Facebook login

配置

在facebook developer中配置好你的应用,填入包名,launch类名,秘钥散列。

如何配置,秘钥散列的生成方式都在下面的网页中 developers.facebook.com/docs/facebo…

代码接入

SKD接入


//根目录gradle文件
buildscript {
    repositories {
    	//需要依赖jcenter来下载对应的依赖包
        jcenter()
    }
}
//业务工程gradle文件  
implementation 'com.facebook.android:facebook-login:[8.1)'

使用Facebook signin

详情见:developers.facebook.com/docs/facebo… 里面有详细使用方法

Q & A

如果出现添加应用和指纹不成功(之前其他项目添加过),需要找到原来的项目删除应用,并且删除认 证信息 support.google.com/firebase/an…

如果出现调用google API 返回异常12500,需要在firebase项目设置中配置support email