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

Android应用使用MSAL库多设备出现Service not registered崩溃

MSAL Android CustomTabs服务未注册崩溃修复方案

问题说明

触发崩溃的核心原因是MSAL内部CustomTabsManager在执行解绑服务操作时,对应的CustomTabs服务已经被浏览器进程/系统回收,此时调用unbindService就会抛出IllegalArgumentException,这是MSAL旧版本公共依赖库的已知缺陷。你所列出的多为预装定制浏览器、系统资源管控严格的机型,更容易触发CustomTabs服务提前销毁的场景,加上你指定了用户代理为BROWSER,无法切换WEBVIEW规避,所以会集中出现该崩溃。

修复方案

  • 优先升级MSAL依赖到最新稳定版本,该异常在com.microsoft.identity:common库3.6.0及以上版本已经官方修复,内部解绑逻辑增加了服务绑定状态的校验,不会重复调用解绑接口触发崩溃。如果当前项目无法直接升级大版本,可以通过反射拦截CustomTabsManager的unbind方法,手动捕获IllegalArgumentException异常直接吞掉即可,该异常不影响授权流程的正常结束,也不会带来功能副作用。
  • 补充完善MSAL配置中的浏览器安全名单,你当前仅配置了小米国际版浏览器,建议将Chrome、Edge、三星内置浏览器、OPPO/VIVO内置浏览器等主流支持CustomTabs的浏览器包名和签名哈希全部加入白名单,避免MSAL调用不兼容CustomTabs的浏览器导致服务绑定异常。
  • 检查授权页Activity的启动模式,不要配置为singleInstance,该启动模式会导致LocalBroadcast接收时序异常,提前触发授权完成逻辑,在CustomTabs服务还未完成绑定时就调用解绑操作,也会触发该崩溃。

附错误日志&配置参考

崩溃日志

Fatal Exception: java.lang.IllegalArgumentException: Service not registered: com.microsoft.identity.common.internal.ui.browser.CustomTabsManager$1@4af7a6e
       at android.app.LoadedApk.forgetServiceDispatcher(LoadedApk.java:1160)
       at android.app.ContextImpl.unbindService(ContextImpl.java:1475)
       at android.content.ContextWrapper.unbindService(ContextWrapper.java:644)
       at com.microsoft.identity.common.internal.ui.browser.CustomTabsManager.unbind(CustomTabsManager.java:164)
       at com.microsoft.identity.common.internal.ui.browser.BrowserAuthorizationStrategy.dispose(BrowserAuthorizationStrategy.java:182)
       at com.microsoft.identity.common.internal.ui.browser.BrowserAuthorizationStrategy.completeAuthorization(BrowserAuthorizationStrategy.java:157)
       at com.microsoft.identity.common.internal.controllers.LocalMSALController.completeAcquireToken(LocalMSALController.java:258)
       at com.microsoft.identity.common.internal.commands.InteractiveTokenCommand.notify(InteractiveTokenCommand.java:77)
       at com.microsoft.identity.common.internal.controllers.CommandDispatcher.completeInteractive(CommandDispatcher.java:608)
       at com.microsoft.identity.common.internal.controllers.CommandDispatcher.access$1100(CommandDispatcher.java:83)
       at com.microsoft.identity.common.internal.controllers.CommandDispatcher$4$1.onReceive(CommandDispatcher.java:565)
       at androidx.localbroadcastmanager.content.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:313)
       at androidx.localbroadcastmanager.content.LocalBroadcastManager$1.handleMessage(LocalBroadcastManager.java:121)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:148)
       at android.app.ActivityThread.main(ActivityThread.java:7325)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

原有配置文件

{
  "client_id": "client_id",
  "authorization_user_agent": "BROWSER",
  "account_mode": "MULTIPLE",
  "redirect_uri": "redirect_uri",
  "authorities": [
    {
      "type": "B2C",
      "authority_url": "authority_url",
      "default": true
    },
    {
      "type": "B2C",
      "authority_url": "authority_url"
    }
  ],
  "browser_safelist": [
    {
      "browser_package_name": "com.mi.globalbrowser",
      "browser_signature_hashes": [
        "g7zGEnZipieE6ZyBA4Bz00kxU8h0F9QTwPLL-dnRVwngI0FJWJiD3rCEJsIQ_VK064SNdxzqggnnnAqT8LI89A=="
      ]
    }
  ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:54:03