使用 android:exported 的显式声明值时,Azure B2C 中断

Azure B2C broken when explicitly-declared value for android:exported is used

我的 Xamarin.Forms 应用程序使用 Azure AD B2C 进行身份验证。目前,我必须使用 Android 12 而不是 Android 10。根据文档,它需要进行一定的更改:

Warning: If an activity, service, or broadcast receiver uses intent filters and doesn't have an explicitly-declared value for android:exported, your app can't be installed on a device that runs Android 12 or higher.

(https://developer.android.com/about/versions/12/behavior-changes-12#security)

这是我来自 MsalActivity.cs 的代码:

namespace UserDetailsClient.Droid
{
  [Activity(Exported = false)]
  [IntentFilter(new[] { Intent.ActionView },
    Categories = new[] { Intent.CategoryBrowsable, Intent.CategoryDefault },
    DataHost = "auth",
    DataScheme = "msal5c32fe58-4a77-49ea-8b5d-010c4a684e4f")]
  public class MsalActivity : BrowserTabActivity
  {
  }
}

添加 (Exported = false) 后,我能够部署和 运行 应用程序。但现在我无法登录。登录屏幕确实出现了。并且用户可以输入凭据,但是提交后,我们卡在这个屏幕上:

输出中没有新内容 window。如何诊断和修复?

否,您需要设置 Exported = true。官方文档说如果 activity 有任何 intent 过滤器,它的默认值是 true,所以你的项目在 Android 10,它是 Exported = true。当你更新到Android 12时,你也需要将其设置为true。

可以查看官方文档:https://developer.android.com/guide/topics/manifest/activity-element