问题描述
我正在 Android 中开发一些应用程序,这些应用程序将共享从身份验证服务器收到的身份验证和身份验证令牌。 我想按照此处的建议使用 android 自定义帐户: https://developer.android.com/training/id-auth/custom_auth 以便在设置 -> 帐户中添加用户,然后所有授权的应用程序都可以访问身份验证令牌。
- AbstractAccountAuthenticator 的实例
- 发布相关 IBinder 的服务
- 执行登录和存储帐户的活动
- authenticator.xml 和 prefs.xml 文件 另一个应用程序就像访问身份验证的客户端一样。 两个应用都有相同的用户界面来执行以下操作(使用 android.accounts.AccountManager):
- 列出我喜欢的帐户
- 添加一个执行身份验证并存储它的新帐户
- 获取身份验证令牌
在带有身份验证的应用中,我可以毫无问题地执行所有操作。
在客户端应用程序中,我只能执行前两个操作:
- 检查是否有我这种类型的帐户
- 访问存储在身份验证应用程序中的身份验证令牌
如果客户端应用程序尝试添加调用 android.accounts.AccountManager#addAccount() 的新帐户,则请求会正确传递到身份验证应用程序中的 AbstractAccountAuthenticator 实例(通过服务传递请求),但登录活动未针对以下错误:
2021-01-14 09:15:33.902 10413-10452/xxx.client1 W/Binder: Caught a RuntimeException from the binder stub implementation.
java.lang.SecurityException: Permission Denial: starting Intent { cmp=xxx.customaccount/xxx.ui.login.LoginActivity clip={text/plain {...}} (has extras) } from ProcessRecord{db30657 10413:xxx.client1/u0a155} (pid=10413,uid=10155) not exported from uid 10154
at android.os.Parcel.createExceptionorNull(Parcel.java:2373)
at android.os.Parcel.createException(Parcel.java:2357)
at android.os.Parcel.readException(Parcel.java:2340)
at android.os.Parcel.readException(Parcel.java:2282)
at android.app.IActivityTaskManager$Stub$Proxy.startActivity(IActivityTaskManager.java:3696)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1723)
at android.app.Activity.startActivityForResult(Activity.java:5320)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:675)
at android.app.Activity.startActivityForResult(Activity.java:5278)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:662)
at android.app.Activity.startActivity(Activity.java:5664)
at android.app.Activity.startActivity(Activity.java:5617)
at android.accounts.AccountManager$AmsTask$Response.onResult(AccountManager.java:2330)
at android.accounts.IAccountManagerResponse$Stub.onTransact(IAccountManagerResponse.java:97)
at android.os.Binder.execTransactInternal(Binder.java:1159)
at android.os.Binder.execTransact(Binder.java:1123)
Caused by: android.os.remoteexception: Remote stack trace:
at com.android.server.wm.ActivityStackSupervisor.checkStartAnyActivityPermission(ActivityStackSupervisor.java:1032)
at com.android.server.wm.ActivityStarter.executeRequest(ActivityStarter.java:999)
at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:669)
at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1100)
at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser(ActivityTaskManagerService.java:1072)
为登录活动添加 android:export=true 身份验证开始但存储无法正常工作(我认为这不是正确的方向,因为身份验证应该在身份验证应用程序中启动以正确管理结果活动)。 有关如何解决此问题的任何建议?
谢谢
gcast
更新:怀疑必须在使用其他 android 组件作为绑定服务的应用程序中(因此在客户端应用程序和身份验证应用程序中)实现令牌共享。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)