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
相关产品推荐
相关产品推荐

