在现代 Android 社交应用中,第三方登录几乎是必备功能。本文将以 Android 为例,详细讲解如何接入 Google 登录 和 Facebook 登录,并提供完整示例代码与注意事项。
📌 目录
🔹 一、前言
第三方登录可以简化用户注册和登录流程,提高用户转化率,同时减少密码管理的麻烦。
在 Android 上,Google 登录主要适配 Google 账号,Facebook 登录主要适配 Facebook 账号。通过这两种方式,用户可快速注册或登录你的应用。
🔹 二、接入第三方登录的优势
降低注册门槛:用户无需输入邮箱或密码即可登录
提升用户留存:登录体验更流畅
获取基本用户信息:如昵称、头像、邮箱等
支持社交分享与社交功能:便于后续拓展
🔹 三、Google 登录接入指南
准备工作
Android Studio ≥ 4.0
AndroidX 项目
Google Play Services 库
在 build.gradle 添加依赖:
dependencies { implementation 'com.google.android.gms:play-services-auth:20.7.0' }
配置 Google 服务
打开 Google Cloud Console
创建项目,并启用 Google Sign-In API
配置 OAuth 客户端 ID,类型选择 Android
获取 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 登录接入指南
准备工作
Android Studio ≥ 4.0
AndroidX 项目
Facebook SDK
在 build.gradle 添加依赖:
dependencies { implementation 'com.facebook.android:facebook-login:latest.release' }
配置 Facebook App
打开 Facebook Developer Console
创建 App 并选择 Facebook Login
配置 包名 和 Key Hash
获取 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,displayNameFacebook:
AccessToken或GraphRequest获取用户头像、昵称、邮箱
示例(Facebook Graph API):
GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken()) { obj, _ ->
val name = obj?.getString("name")
val email = obj?.getString("email")
}
🔹 六、常见问题与注意事项
SHA-1 与包名配置错误
- 会导致 Google 登录失败或 Facebook 登录异常
网络权限
<uses-permission android:name="android.permission.INTERNET"/>
Facebook Key Hash
- Windows / Mac 生成方法不同,确保使用正确命令
隐私政策
- 第三方登录必须在应用中提供隐私政策声明
测试账号
- Facebook 有测试用户机制,开发阶段可用测试账号登录
🔹 七、总结
通过本文,你可以:
在 Android 项目中快速集成 Google 和 Facebook 登录
获取用户基本信息,实现社交注册/登录
避免常见配置错误,提高上线效率
💡 核心思路:配置 OAuth / SDK → 发起登录 → 处理回调 → 获取用户信息 → 业务逻辑处理