安卓集成Google登录并进一步获取性别生日手机号等信息

由于公司做海外产品需接入Google三方登录,并且登录后除获取邮箱,用户名和用户id等基本信息外还要获取用户的性别年龄甚至手机号等信息。后面的需求实现起来就有点坑了,主要原因:Google的文档写得真心乱。看网上很多人踩了很多坑还是没找到很好的方法,于是把自己采坑后成功解决的步骤记录下来供大家参考,不谢。

1,打开官网文档,https://developers.google.com/identity/sign-in/android/start

在这里插入图片描述
点击按钮配置一个项目,选择create a new project创建新项目,输入项目名称。
在这里插入图片描述

配置项目,选择Android平台,将包名和SHA-1码填入。

注意,如果你不想每次调试都打正式签名包,你应该首先配一个debug签名的SHA-1进去,点击下图中的learn more链接可以找到获取debug签名SHA-1的方法。我在mac下获取的终端命令是:keytool -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore

在这里插入图片描述
创建成功后按照文档一步一步写代码集成就可以啦。可以下载Google官方的实例代码或者文末我的示例工程。这个主要的坑就是这个项目配置,包名和对应的SHA-1码一定要填对,而且如果是直接部署(run)到手机用的是debug的签名文件,就一定要配debug签名文件的SHA-1码,否则会返回错误码10。同理正式打包后测试也要配正式签名文件的SHA-1码。

接下来就是进一步获取用户的性别年龄甚至手机号等信息了。

代码在文末的demo里,这里就不写了。主要是需要用到Google的people api。需加上以下依赖库。
在这里插入图片描述
这里需注意:
1.因为用到了people api,所以需要在Google后台的配置刚才这个项目的people api为启用状态。否则报错如下:“People API has not been used in project 788056243672 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/people.googleapis.com/overview?project=788056243672 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.”,
如果报错点击这个地址可直接进入启用people api界面。或则直接到后台找到people api启用。
2。 一定要写明要请求的用户信息的字段,即通知setPersonFields(“names,emailAddresses,phoneNumbers,genders,birthdays”)方法,字段以逗号分隔。不写的话报错如下:personFields mask is required. Please specify one or more valid paths. Valid paths are documented at https://developers.google.com/people/api/rest/v1/people/get,点击这个地址可以看到有哪些用户信息字段可申请。
在这里插入图片描述

项目下载:https://download.csdn.net/download/hongenit/11103754

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现手机获取验证登录功能,大致可以分为以下步骤: 1. 引入相关依赖库 在项目的 build.gradle 文件中添加如下依赖库: ``` implementation 'com.google.android.gms:play-services-auth:19.2.0' implementation 'com.google.android.material:material:1.3.0' ``` 2. 添加手机获取验证登录按钮 在布局文件中添加一个按钮,用于触发手机获取验证登录操作: ``` <Button android:id="@+id/btn_phone_auth" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="手机获取验证登录" /> ``` 3. 处理手机获取验证登录操作 在 Activity 或 Fragment 中,添加以下代码处理手机获取验证登录操作: ```java private static final int RC_PHONE_AUTH = 123; private void startPhoneAuth() { // 创建手机号验证器 PhoneAuthProvider provider = PhoneAuthProvider.getInstance(); // 启动手机号验证流程 provider.verifyPhoneNumber( "+86" + etPhone.getText().toString(), // 获取用户输入的手机号 60, // 验证码有效期为 60 秒 TimeUnit.SECONDS, this, // Activity or Fragment new PhoneAuthProvider.OnVerificationStateChangedCallbacks() { @Override public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) { // 验证成功后的操作 signInWithPhoneAuthCredential(phoneAuthCredential); } @Override public void onVerificationFailed(@NonNull FirebaseException e) { // 验证失败后的操作 Toast.makeText(getApplicationContext(), "手机号验证失败:" + e.getMessage(), Toast.LENGTH_SHORT).show(); } @Override public void onCodeSent(@NonNull String verificationId, @NonNull PhoneAuthProvider.ForceResendingToken forceResendingToken) { // 验证码发送成功后的操作 Intent intent = new Intent(getApplicationContext(), PhoneAuthActivity.class); intent.putExtra("verificationId", verificationId); startActivityForResult(intent, RC_PHONE_AUTH); } }); } private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) { // 创建 Firebase 认证实例 FirebaseAuth auth = FirebaseAuth.getInstance(); // 使用验证凭证登录 auth.signInWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // 登录成功后的操作 FirebaseUser user = task.getResult().getUser(); Toast.makeText(getApplicationContext(), "手机号验证登录成功:" + user.getDisplayName(), Toast.LENGTH_SHORT).show(); } else { // 登录失败后的操作 Toast.makeText(getApplicationContext(), "手机号验证登录失败:" + task.getException().getMessage(), Toast.LENGTH_SHORT).show(); } } }); } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RC_PHONE_AUTH && resultCode == RESULT_OK) { // 获取从 PhoneAuthActivity 返回的验证凭证 String verificationId = data.getStringExtra("verificationId"); String code = data.getStringExtra("code"); // 创建 PhoneAuthCredential PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code); // 使用验证凭证登录 signInWithPhoneAuthCredential(credential); } } ``` 需要注意的是,上述代码中的 `etPhone` 是一个用户输入手机号码的 EditText 控件。 4. 处理验证码输入界面 在上述代码中,启动手机号验证流程成功后,会跳转到一个验证码输入界面,如下所示: ``` <com.google.android.material.textfield.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入验证码"> <com.google.android.material.textfield.TextInputEditText android:id="@+id/et_code" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="number" /> </com.google.android.material.textfield.TextInputLayout> <Button android:id="@+id/btn_submit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="提交" /> ``` 在 PhoneAuthActivity 中添加以下代码处理验证码输入操作: ```java private void submitCode() { String code = etCode.getText().toString().trim(); if (TextUtils.isEmpty(code)) { etCode.setError("验证码不能为空"); return; } // 返回验证凭证 Intent data = new Intent(); data.putExtra("code", code); setResult(RESULT_OK, data); finish(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_phone_auth); etCode = findViewById(R.id.et_code); btnSubmit = findViewById(R.id.btn_submit); btnSubmit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { submitCode(); } }); } ``` 至此,安卓开发手机获取验证登录功能就实现了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值