Как использовать Android-навигацию при получении OAuthToken с сайта - PullRequest
0 голосов
/ 11 октября 2019

Я работаю над преобразованием нашего приложения в новейшие стандарты с использованием новейших библиотек. В настоящее время для входа в систему пользователь переходит на Chrome CustomTab. Затем они входят в систему со своей информацией, и веб-сайт перенаправляет обратно к нашей активности входа в систему, которая затем приводит нас к любому виду после этого. Вот как мы в настоящее время делаем это:

class OAuthCallbackActivity : AppCompatActivity() {
    companion object {
        private const val STATE_KEY = "state"
        private const val RESPONSE_TYPE_KEY = "code"
    }


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (Intent.ACTION_VIEW == intent.action && intent.data != null) {
            val status = getStatusFromUri()
            Timber.e("The intent from the callback activity was fine")

           if (!intent.data!!.getQueryParameter("code").isNullOrBlank() &&
                    !intent.data!!.getQueryParameter("state").isNullOrBlank()) {
                startActivity(LoginActivity.startIntent(this, intent.data))
            }
        } else {

        }

        finish()
    }

    private fun getStatusFromUri(): String? {
        return intent.data!!.getQueryParameter(STATE_KEY)
    }
}

Это действие захватывает intent.data для LoginActivity и запускает его. Вот код для LoginActivity:

class LoginActivity : BaseActivity() {
    private lateinit var viewModel: LoginViewModel

    companion object {
        const val CALLBACK_KEY = "LoginActivity.CALLBACK_KEY"

        fun startIntent(context: Context): Intent {
            return Intent(context, LoginActivity::class.java).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
        }

        fun startIntent(context: Context, uriData: Uri?): Intent {
            val result = Intent(context, LoginActivity::class.java)
            result.putExtra(CALLBACK_KEY, uriData)
            return result
        }
    }

    override fun layoutResId(): Int {
        return R.layout.activity_login
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        viewModel = ViewModelProviders.of(this).get(LoginViewModel::class.java)

        // View Binding was here

        viewModel.checkForUserSession() // checks to see if a user session already exists in storage

        // Observers
        val loadingObserver = Observer<Boolean> { isLoading ->
            when(isLoading) {
                true -> progress_indicator.visibility = VISIBLE
                false -> progress_indicator.visibility = GONE
            }
        }

        val authObserver = Observer<UserSession> { userSession ->
            if(userSession != null)  advanceToEnrollment()
        }

        viewModel.isLoadingRequired.observe(this, loadingObserver)
        viewModel.userSession.observe(this, authObserver)
    }

    override fun onStart() {
        super.onStart()
        viewModel.processNewIntent(getIntent()) // this parses the intent.data that was passed, then grabs the data needed to construct a JWT
    }

    private fun advanceToEnrollment() {
        startActivity(EnrollmentActivity.startIntent(this))
        finish()
    }
}

Как мне справиться с этим в архитектуре одиночной активности Android-навигации? В настоящее время мы переходим к новому действию, в котором размещены несколько фрагментов.

Спасибо за любую помощь!

e:

Я хотел бы получить OAuthToken из обратного вызова uri из Chrome(выглядит как my_app: // oauth) и сохраните его в SharedPreferences, затем перейдите к другому фрагменту. Я полагаю, что мой вопрос заключается в том, как мне обработать намерение, возвращенное с веб-сайта, содержащего маркер oauth, с помощью навигации по Android без необходимости запуска нового действия для прослушивания этого обратного вызова намерения. Извините, если я не был ясен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...