如何在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用户:
- 按照Facebook官方接入要求,使用
registerForActivityResult实现Facebook授权逻辑,获取到授权后的AccessToken对象。 - 用获取到的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
相关产品推荐
相关产品推荐

