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

