You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Facebook Android SDK v12.0.0结合Jetpack Compose实现登录示例咨询

Facebook Android SDK v12.0.0 配合Jetpack Compose的登录实现示例(基于Activity Results API)

前置依赖配置

  • 首先在模块级build.gradle文件中引入对应版本的SDK依赖:
implementation 'com.facebook.android:facebook-android-sdk:12.0.0'
  • 按照原有流程在AndroidManifest.xml中配置Facebook应用ID、客户端令牌等必要信息,在Application类的onCreate方法中完成SDK初始化。

Compose 端登录逻辑实现

v12.0.0版本SDK已经内置了适配Activity Results API的预置Contract,无需自定义契约即可直接使用,核心实现代码如下:

import android.app.Activity
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import com.facebook.login.LoginManager
import com.facebook.login.LoginResult

@Composable
fun FacebookLoginPage() {
    // 注册Facebook登录结果回调
    val fbLoginLauncher = rememberLauncherForActivityResult(
        contract = LoginManager.getInstance().createLogInActivityResultContract(),
        onResult = { activityResult ->
            when {
                activityResult.resultCode == Activity.RESULT_OK -> {
                    val loginResult = activityResult.data?.getParcelableExtra<LoginResult>("login_result")
                    loginResult?.let { result ->
                        result.error?.let {
                            // 登录异常处理逻辑
                            return@let
                        }
                        // 登录成功,获取AccessToken处理后续业务
                        val accessToken = result.accessToken
                        // 此处添加你的业务逻辑,比如服务端token校验、用户信息拉取等
                    }
                }
                activityResult.resultCode == Activity.RESULT_CANCELED -> {
                    // 用户取消登录处理逻辑
                }
            }
        }
    )

    Column(
        modifier = Modifier.fillMaxSize(),
        horizontalAlignment = Alignment.CenterHorizontally,
        verticalArrangement = Arrangement.Center
    ) {
        Button(onClick = {
            // 触发登录,申请需要的权限
            LoginManager.getInstance().logInWithReadPermissions(
                fbLoginLauncher,
                listOf("public_profile", "email")
            )
        }) {
            Text("Facebook账号登录")
        }
    }
}

补充说明

  • 登出逻辑和原有实现一致,直接调用LoginManager.getInstance().logOut()即可清除本地登录状态
  • 登录成功后SDK会自动缓存AccessToken,可随时通过AccessToken.getCurrentAccessToken()获取当前登录的有效token
  • 权限申请可根据业务需求调整,需要更高权限的操作对应调用logInWithPublishPermissions方法即可

内容的提问来源于stack exchange,提问作者Mauricio Domenech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 08:36:00