Unity for Android 中的 Azure AD 身份验证出错
Posted
技术标签:
【中文标题】Unity for Android 中的 Azure AD 身份验证出错【英文标题】:Error with Azure AD Authentication in Unity for Android 【发布时间】:2019-05-14 16:12:55 【问题描述】:我正在使用 MSAL 3.x 在我的 android 应用程序中构建 Azure AD 身份验证,但是在尝试通过用户交互获取令牌时会引发错误。 MSAL 3.x 的文档表明需要父活动或窗口,但是使用 Unity 我对此非常迷茫。在这里的任何帮助将不胜感激。
我尝试了主要文档中的各种输入建议,但似乎没有一个适合 Unity。可以在以下位置找到文档:https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/wiki/Acquiring-tokens-interactively
authResult = await app.AcquireTokenInteractive(scopes).ExecuteAsync();
authResult = await app.AcquireTokenInteractive(scopes).WithParentActivityOrWindow("need something here").ExecuteAsync();
【问题讨论】:
【参考方案1】:Unity 使用 UnityPlayerActivity
或 UnityPlayerNativeActivity
depending on the version。
对于 Android 应用程序,MSAL.NET 中的 Activity 是必需的,因为它是创建以交互方式获取令牌的进程所需的上下文。
对于其他情况,您可能想use the main/launcher activity。
对于 Unity,您可能需要查看 extending a Unity Activity 并为您的 MSAL.NET 代码创建一个挂钩。
【讨论】:
嗨亚当,你能详细说明一下吗?我在2018.3,你是说UnityPlayerActivity/UnityPlayerNativeActivity可以当Activity。感谢您的帮助。 我尝试使用AndroidJavaClass jclass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject activity = jclass.GetStatic<AndroidJavaObject>("currentActivity");
来获取对当前活动的引用。它不起作用,这是可以访问的正确活动吗?我需要更多吗?或者这甚至是正确的区域吗?
嗨 JolofNar,这与这篇文章非常相似:***.com/questions/10069340/…。这是正确的轨道——您需要对 Activity 的引用。
感谢亚当,到目前为止这很有帮助。但是我该如何处理对活动的引用?我必须将它传递给java然后再取回来吗? AndroidJavaClass jclass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject activity = jclass.GetStatic<AndroidJavaObject>("currentActivity"); authResult = await app.AcquireTokenInteractive(scopes).WithParentActivityOrWindow(activity).ExecuteAsync();
是我到目前为止的工作,但这不起作用。是不是因为我传入的引用是 AndroidJavaObject 而不是 Activity?
ps,你可能不得不为我简单地布置它,因为我在这个项目之外没有使用 java 的经验。以上是关于Unity for Android 中的 Azure AD 身份验证出错的主要内容,如果未能解决你的问题,请参考以下文章
Appcenter Android Build for React-Native with Unity
Unity接入北斗探针SDK(基于UnityPlayerActivity)丨二usb-serial-for-android导出jar包
unity错误android minimum api level must be set to 23 or higher for the oculus xr plugin