Xamarin Android 14.0 — возобновление активности из единого входа создает пустой дополнительный экземпляр приложенияAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Xamarin Android 14.0 — возобновление активности из единого входа создает пустой дополнительный экземпляр приложения

Сообщение Anonymous »


Я работаю над мобильным приложением на базе 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()); бросить (бывший); } вернуть текущего пользователя; }
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»