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 使用 UnityPlayerActivityUnityPlayerNativeActivity 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 身份验证出错的主要内容,如果未能解决你的问题,请参考以下文章

unity重写软键盘for Android NGUI

Appcenter Android Build for React-Native with Unity

unity3d IL2CPP for android

unity代码加密for Android,mono编译

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