Xamarin Android 14.0 — возобновление активности из единого входа создает пустой дополнительный экземпляр приложения ⇐ Android
Xamarin Android 14.0 — возобновление активности из единого входа создает пустой дополнительный экземпляр приложения
Я работаю над мобильным приложением на базе Xamarin, в котором эта функция работает должным образом и, похоже, не работает в Android 14.
При изменении активности или возврате в приложение из браузера для входа в систему единого входа вместо возобновления существующего процесса создается новый экземпляр приложения и отображается пустой экран с меткой AndroidManifest в верхней части окна. экран.
Я считаю, что я рассмотрел описанные изменения BroadcastReceiver [https://developer.android.com/about/ver ... adcasts%5C] (здесь), поэтому я не думаю, вот и всё.
Изначально приложение создаст SplashScreen и передаст его в MainActivity с помощью этого метода: StartActivity(new Intent(this, typeof(MainActivity)));
Это создавало второй экземпляр приложения и переходило к процессу входа/подключения. Во время тестирования я уже удалил это и теперь запускаю приложение непосредственно в MainActivity, который не создает новый экземпляр и открывает окно браузера для входа в Microsoft, как и ожидалось.
Однако теперь после входа в учетную запись Microsoft вместо возврата к исходному приложению, как это было в Android 13 и более ранних версиях, создается новый экземпляр, как показано ранее, с пустой страницей и меткой заголовка.
Вот код входа в систему единого входа:
public async Task OnSignInAsync() { UserToken currentUser = null; если (publicClientApplication == ноль) { this.publicClientApplication = PublicClientApplicationBuilder.Create(ClientID) .WithIosKeychainSecurityGroup(AppInfo.PackageName) .WithRedirectUri($"msal{ClientID}://auth") .Строить(); } учетные записи вар = ждут this.publicClientApplication.GetAccountsAsync(); пытаться { пытаться { вар firstAccount = account.FirstOrDefault(); вар authResult = ждут this.publicClientApplication.AcquireTokenSilent(Scopes, firstAccount).ExecuteAsync(); currentUser = ожидайте этого.RefreshUserDataAsync(authResult?.AccessToken).ConfigureAwait(false); если (текущийпользователь == ноль) throw new MsalUiRequiredException("0","Невозможно получить текущую информацию о пользователе."); } улов (MsalUiRequiredException ex) { // пользователь еще не был подключен. пытаться { var authResult = ожидайте this.publicClientApplication.AcquireTokenInteractive (области) .WithParentActivityOrWindow(ParentWindow) .ExecuteAsync(); currentUser = ожидайте этого.RefreshUserDataAsync(authResult?.AccessToken).ConfigureAwait(false); } поймать (Исключение ex2) { // Управляйте исключением с помощью логгера по мере необходимости System.Diagnostics.Debug.WriteLine(ex2.ToString()); } } если (текущийпользователь!= ноль) { currentUser.LoginModelOAuth = новый LoginModelOAuth(); currentUser.LoginModelOAuth.iv = Константы.IV; currentUser.LoginModelOAuth.kv = EncryptAES(currentUser.UserPrincipalName, Constants.IV); } } поймать (Исключение ex) { // Управляйте исключением с помощью логгера по мере необходимости System.Diagnostics.Debug.WriteLine(ex.ToString()); бросить (бывший); } вернуть текущего пользователя; }
Я работаю над мобильным приложением на базе Xamarin, в котором эта функция работает должным образом и, похоже, не работает в Android 14.
При изменении активности или возврате в приложение из браузера для входа в систему единого входа вместо возобновления существующего процесса создается новый экземпляр приложения и отображается пустой экран с меткой AndroidManifest в верхней части окна. экран.
Я считаю, что я рассмотрел описанные изменения BroadcastReceiver [https://developer.android.com/about/ver ... adcasts%5C] (здесь), поэтому я не думаю, вот и всё.
Изначально приложение создаст SplashScreen и передаст его в MainActivity с помощью этого метода: StartActivity(new Intent(this, typeof(MainActivity)));
Это создавало второй экземпляр приложения и переходило к процессу входа/подключения. Во время тестирования я уже удалил это и теперь запускаю приложение непосредственно в MainActivity, который не создает новый экземпляр и открывает окно браузера для входа в Microsoft, как и ожидалось.
Однако теперь после входа в учетную запись Microsoft вместо возврата к исходному приложению, как это было в Android 13 и более ранних версиях, создается новый экземпляр, как показано ранее, с пустой страницей и меткой заголовка.
Вот код входа в систему единого входа:
public async Task OnSignInAsync() { UserToken currentUser = null; если (publicClientApplication == ноль) { this.publicClientApplication = PublicClientApplicationBuilder.Create(ClientID) .WithIosKeychainSecurityGroup(AppInfo.PackageName) .WithRedirectUri($"msal{ClientID}://auth") .Строить(); } учетные записи вар = ждут this.publicClientApplication.GetAccountsAsync(); пытаться { пытаться { вар firstAccount = account.FirstOrDefault(); вар authResult = ждут this.publicClientApplication.AcquireTokenSilent(Scopes, firstAccount).ExecuteAsync(); currentUser = ожидайте этого.RefreshUserDataAsync(authResult?.AccessToken).ConfigureAwait(false); если (текущийпользователь == ноль) throw new MsalUiRequiredException("0","Невозможно получить текущую информацию о пользователе."); } улов (MsalUiRequiredException ex) { // пользователь еще не был подключен. пытаться { var authResult = ожидайте this.publicClientApplication.AcquireTokenInteractive (области) .WithParentActivityOrWindow(ParentWindow) .ExecuteAsync(); currentUser = ожидайте этого.RefreshUserDataAsync(authResult?.AccessToken).ConfigureAwait(false); } поймать (Исключение ex2) { // Управляйте исключением с помощью логгера по мере необходимости System.Diagnostics.Debug.WriteLine(ex2.ToString()); } } если (текущийпользователь!= ноль) { currentUser.LoginModelOAuth = новый LoginModelOAuth(); currentUser.LoginModelOAuth.iv = Константы.IV; currentUser.LoginModelOAuth.kv = EncryptAES(currentUser.UserPrincipalName, Constants.IV); } } поймать (Исключение ex) { // Управляйте исключением с помощью логгера по мере необходимости System.Diagnostics.Debug.WriteLine(ex.ToString()); бросить (бывший); } вернуть текущего пользователя; }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Приложения ASP.NET Web Forms с аутентификацией единого входа ENTRA (Azure AD)
Anonymous » » в форуме C# - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Приложения ASP.NET Webforms с аутентификацией единого входа ENTRA (Azure AD)
Anonymous » » в форуме C# - 0 Ответы
- 10 Просмотры
-
Последнее сообщение Anonymous
-