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

如何在Jetpack Compose中使用需传入Fragment的acquireToken?

在Jetpack Compose中使用MSAL 4.1.0的acquireToken方法

针对你的问题,有两种可行的解决方式:

方式一:使用不需要Fragment的重载逻辑

MSAL的PublicClientApplication支持直接传入Activity实例的acquireToken调用逻辑,你可以用withActivity替代withFragment参数:

// 从Compose上下文获取宿主Activity(需确保宿主是FragmentActivity子类,比如AppCompatActivity)
val activity = LocalContext.current as FragmentActivity

val parameters = AcquireTokenParameters.Builder()
    .withScopes(scopes.toList())
    .withCallback(authenticationCallback)
    .withActivity(activity) // 替换为传入宿主Activity
    .build()

_msalPublicClient.acquireToken(parameters)

方式二:传入宿主Activity的根Fragment

如果必须使用withFragment参数,可从宿主FragmentActivity中获取根Fragment(Compose通常加载在该容器中):

val activity = LocalContext.current as FragmentActivity
// 获取Activity的根Fragment容器对应的Fragment实例
val rootFragment = activity.supportFragmentManager.findFragmentById(android.R.id.content)

val parameters = AcquireTokenParameters.Builder()
    .withScopes(scopes.toList())
    .withCallback(authenticationCallback)
    .withFragment(rootFragment) // 传入根Fragment
    .build()

_msalPublicClient.acquireToken(parameters)

注意事项

如果你的身份验证流程需要使用WebView,必须确保宿主Activity是FragmentActivity或其子类,否则无法正常获取Fragment实例。优先推荐方式一,避免Fragment相关的额外依赖。

内容的提问来源于stack exchange,提问作者me.at.coding

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:05:27