Android 接入 Google 和 Facebook 第三方登录指南(初始版)

132 阅读4分钟

在现代 Android 社交应用中,第三方登录几乎是必备功能。本文将以 Android 为例,详细讲解如何接入 Google 登录Facebook 登录,并提供完整示例代码与注意事项。

📌 目录

  1. 前言

  2. 接入第三方登录的优势

  3. Google 登录接入指南

  4. Facebook 登录接入指南

  5. 处理登录回调与用户信息

  6. 常见问题与注意事项

  7. 总结

🔹 一、前言

第三方登录可以简化用户注册和登录流程,提高用户转化率,同时减少密码管理的麻烦。
在 Android 上,Google 登录主要适配 Google 账号,Facebook 登录主要适配 Facebook 账号。通过这两种方式,用户可快速注册或登录你的应用。

🔹 二、接入第三方登录的优势

  • 降低注册门槛:用户无需输入邮箱或密码即可登录

  • 提升用户留存:登录体验更流畅

  • 获取基本用户信息:如昵称、头像、邮箱等

  • 支持社交分享与社交功能:便于后续拓展

🔹 三、Google 登录接入指南

准备工作

  1. Android Studio ≥ 4.0

  2. AndroidX 项目

  3. Google Play Services 库

build.gradle 添加依赖:

dependencies { implementation 'com.google.android.gms:play-services-auth:20.7.0' }

配置 Google 服务

  1. 打开 Google Cloud Console

  2. 创建项目,并启用 Google Sign-In API

  3. 配置 OAuth 客户端 ID,类型选择 Android

  4. 获取 SHA-1 指纹(./gradlew signingReport)并填写

实现登录逻辑

class GoogleLoginActivity : AppCompatActivity() {

    private lateinit var googleSignInClient: GoogleSignInClient
    private val RC_SIGN_IN = 1001

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_google_login)

        // 配置登录选项
        val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .build()

        googleSignInClient = GoogleSignIn.getClient(this, gso)

        findViewById<Button>(R.id.btnGoogleLogin).setOnClickListener {
            val signInIntent = googleSignInClient.signInIntent
            startActivityForResult(signInIntent, RC_SIGN_IN)
        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == RC_SIGN_IN) {
            val task = GoogleSignIn.getSignedInAccountFromIntent(data)
            try {
                val account = task.getResult(ApiException::class.java)
                // 登录成功
                val email = account?.email
                val name = account?.displayName
                val idToken = account?.idToken
                Toast.makeText(this, "登录成功:$name", Toast.LENGTH_SHORT).show()
            } catch (e: ApiException) {
                Toast.makeText(this, "登录失败: ${e.statusCode}", Toast.LENGTH_SHORT).show()
            }
        }
    }
}

🔹 四、Facebook 登录接入指南

准备工作

  1. Android Studio ≥ 4.0

  2. AndroidX 项目

  3. Facebook SDK

build.gradle 添加依赖:

dependencies { implementation 'com.facebook.android:facebook-login:latest.release' }

配置 Facebook App

  1. 打开 Facebook Developer Console

  2. 创建 App 并选择 Facebook Login

  3. 配置 包名Key Hash

  4. 获取 App ID

AndroidManifest.xml 添加:

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>

实现登录逻辑

class FacebookLoginActivity : AppCompatActivity() {

    private lateinit var callbackManager: CallbackManager

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_facebook_login)

        callbackManager = CallbackManager.Factory.create()
        val loginButton = findViewById<LoginButton>(R.id.btnFacebookLogin)
        loginButton.setPermissions(listOf("email", "public_profile"))

        loginButton.registerCallback(callbackManager,
            object : FacebookCallback<LoginResult> {
                override fun onSuccess(result: LoginResult) {
                    val accessToken = result.accessToken.token
                    Toast.makeText(this@FacebookLoginActivity, "Facebook 登录成功", Toast.LENGTH_SHORT).show()
                }

                override fun onCancel() {
                    Toast.makeText(this@FacebookLoginActivity, "Facebook 登录取消", Toast.LENGTH_SHORT).show()
                }

                override fun onError(error: FacebookException) {
                    Toast.makeText(this@FacebookLoginActivity, "登录出错: ${error.message}", Toast.LENGTH_SHORT).show()
                }
            })
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        callbackManager.onActivityResult(requestCode, resultCode, data)
    }
}

🔹 五、处理登录回调与用户信息

  • Google:GoogleSignInAccount 获取 idToken, email, displayName

  • Facebook:AccessTokenGraphRequest 获取用户头像、昵称、邮箱

示例(Facebook Graph API):

GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken()) { obj, _ ->
    val name = obj?.getString("name")
    val email = obj?.getString("email")
}

🔹 六、常见问题与注意事项

  1. SHA-1 与包名配置错误

    • 会导致 Google 登录失败或 Facebook 登录异常
  2. 网络权限

    <uses-permission android:name="android.permission.INTERNET"/>
    

  3. Facebook Key Hash

    • Windows / Mac 生成方法不同,确保使用正确命令
  4. 隐私政策

    • 第三方登录必须在应用中提供隐私政策声明
  5. 测试账号

    • Facebook 有测试用户机制,开发阶段可用测试账号登录

🔹 七、总结

通过本文,你可以:

  • 在 Android 项目中快速集成 Google 和 Facebook 登录

  • 获取用户基本信息,实现社交注册/登录

  • 避免常见配置错误,提高上线效率

💡 核心思路:配置 OAuth / SDK → 发起登录 → 处理回调 → 获取用户信息 → 业务逻辑处理