Xamarin Forms: Android CustomTabs закрывается, когда приложение находится в фоновом режиме

TL;DR: CustomTabs закрываются, когда приложение находится в фоновом режиме, но нам нужно, чтобы оно оставалось активным. Как мы можем этого добиться?

У нас есть приложение, которое использует CustomTabs для входа пользователя. Мы добавили двухфакторную аутентификацию, но это создает проблему. Когда вы нажимаете кнопку входа в систему, намерение пользовательских вкладок запускается следующим образом:

        var tcs = new TaskCompletionSource<BrowserResult>();
        try
        {
            var activity = (Activity)Forms.Context;

            var builder = new CustomTabsIntent.Builder().EnableUrlBarHiding();

            var customTabsIntent = builder.Build();

            customTabsIntent.Intent.AddFlags(ActivityFlags.NoHistory);
            
            Action<string> callback = null;
            callback = url =>
            {
                MainActivity.Callbacks -= callback;

                tcs.SetResult(new BrowserResult
                {
                    ResultType = BrowserResultType.Success,
                    Response = url
                });
            };

            MainActivity.Callbacks += callback;

            customTabsIntent.LaunchUrl(activity, Android.Net.Uri.Parse(options.StartUrl));

        }
        catch (Exception ex)
        {
            throw new Exception($"error: {ex.Message}");
        }

        return tcs.Task;

Это работает, как и ожидалось, и вы можете войти в систему, конечно, теперь запрашивается код для кода двухфакторной аутентификации, что в большинстве случаев означает, что вы должны запустить приложение в фоновом режиме, открыть свой аутентификатор (аутентификация, аутентификатор Google и т. д.), а затем вернуться в приложение с кодом. Проблема в том, что когда мы снова открываем приложение, CustomTabs и его сеанс полностью исчезают. Это означает, что вам нужно снова щелкнуть по нему, снова войти в систему, и то же самое происходит снова и снова. Я искал решение в течение нескольких дней. Может ли кто-нибудь помочь нам найти способ оставить CustomTabs и его сеанс открытыми, чтобы вы могли просто ввести свой код аутентификатора и долго и счастливо войти в систему?


person CliffConclusion    schedule 02.07.2020    source источник


Ответы (1)


Хорошо, кажется, что следующий код, который кто-то добавил, был причиной этого:

customTabsIntent.Intent.AddFlags(ActivityFlags.NoHistory);

Я удалил его, и теперь он работает. Я вижу некоторые другие проблемы, но я не думаю, что это связано с этой проблемой. Если это произойдет, я дам вам знать здесь.

person CliffConclusion    schedule 03.07.2020