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

如何在Parse-SDK中使用新Activity Result API替代onActivityResult

适配方案如下

方案1:升级Parse官方依赖(改造成本最低)

  • 最新稳定版的 parse-facebook-android 已经完成了新Activity Result API的适配,ParseFacebookUtils.logInWithReadPermissionsInBackground 内部会自行处理授权Activity的结果捕获,不需要你额外编写registerForActivityResult相关逻辑。
  • 只需将项目中Parse相关依赖升级到最新稳定版,删除原有废弃的onActivityResult重写逻辑,你现有的登录代码可以直接正常运行。
    依赖参考配置:
    dependencies {
        implementation "com.parse:parse-android:4.2.0"
        implementation "com.parse:parse-facebook-android:4.2.0"
    }
    

方案2:无法升级依赖时的手动实现

如果项目有兼容性限制不能升级Parse依赖,可以手动实现Facebook授权流程,再关联Parse用户:

  1. 按照Facebook官方接入要求,使用registerForActivityResult实现Facebook授权逻辑,获取到授权后的AccessToken对象。
  2. 用获取到的Facebook凭证手动触发Parse用户登录,代码示例如下:
private val facebookLoginLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    // Facebook授权结果处理,获取AccessToken
    val accessToken = AccessToken.getCurrentAccessToken()
    if (accessToken == null || accessToken.isExpired) {
        Toast.makeText(this, "Facebook授权失败", Toast.LENGTH_LONG).show()
        return@registerForActivityResult
    }
    // 关联Parse用户
    val facebookCredentials = hashMapOf(
        "access_token" to accessToken.token,
        "id" to accessToken.userId,
        "expiration_date" to accessToken.expires.time
    )
    ParseUser.logInWithInBackground("facebook", facebookCredentials) { user: ParseUser?, err: ParseException? ->
        // 此处直接复用你原有回调逻辑即可
        when {
            err != null -> {
                Log.e("FacebookLoginExample", "done: ", err)
                Toast.makeText(this, err.message, Toast.LENGTH_LONG).show()
            }
            user == null -> {
                Toast.makeText(this, "The user cancelled the Facebook login.", Toast.LENGTH_LONG).show()
                Log.d("FacebookLoginExample", "Uh oh. The user cancelled the Facebook login.")
            }
            user.isNew -> {
                Toast.makeText(this, "User signed up and logged in through Facebook.", Toast.LENGTH_LONG).show()
                Log.d("FacebookLoginExample", "User signed up and logged in through Facebook!")
                getUserDetailFromFB()
            }
            else -> {
                Toast.makeText(this, "User logged in through Facebook.", Toast.LENGTH_LONG).show()
                Log.d("FacebookLoginExample", "User logged in through Facebook!")
                showAlert("Oh, you!", "Welcome back!")
            }
        }
    }
}

这种方式所有的Activity启动和结果捕获都由你自行控制,完全适配新的Activity Result API,不需要依赖Parse封装方法的内部逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:15:01