Интеграция Google Fit Sdk для многопользовательского приложения - PullRequest
0 голосов
/ 19 июня 2020

Я интегрировал SDK Google Fit в свое приложение. Поскольку это многопользовательское приложение, два или более пользователей захотят получить доступ к своим учетным записям Google. Я заметил, что SDK самостоятельно выбирает последнюю вошедшую учетную запись, и у других нет выбора для выполнения OAuth. Кроме того, если в качестве альтернативы в мое приложение входят два пользователя, User1 выбирает account1 для выполнения oAuth и выходит из системы, User 2 Logs выбирает account2, выполняет oAuth и выходит из системы. Когда User1 снова входит в систему, в идеале аутентификация, выполненная на User1 и account1, должна сохраняться, и ее не следует просить снова выбрать учетную запись. То же самое касается User2 и account2, а также такого же количества пользователей и соответствующих учетных записей. Как я могу этого добиться?

fun signIn(){
    mGoogleSignInClient = GoogleSignIn.getClient(
        requireActivity(),
        viewModel.getGSO(getString(R.string.client_id))
    )
    val signInIntent = mGoogleSignInClient.signInIntent
    startActivityForResult(signInIntent, REQUEST_OAUTH_REQUEST_CODE)
   }

fun getGSO(clientId: String): GoogleSignInOptions {
    val gso =
        GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(clientId)
            .requestServerAuthCode(clientId)
            .requestScopes(Scope(Scopes.FITNESS_ACTIVITY_READ))
            .requestScopes(Scope(Scopes.FITNESS_LOCATION_READ))
            .requestEmail()
            .build()
    return gso
}

override fun onActivityResult(
    requestCode: Int,
    resultCode: Int,
    data: Intent?
) {
    super.onActivityResult(requestCode, resultCode, data)
    when {
        resultCode == RESULT_OK && requestCode == REQUEST_OAUTH_REQUEST_CODE -> {
            val task = GoogleSignIn.getSignedInAccountFromIntent(data)
            handleSignInResult(task)
        }
        else -> print("RequestCancelled")
    }
}

fun handleSignInResult(completedTask: Task<GoogleSignInAccount?>) {
    try {
        val account = completedTask.getResult(ApiException::class.java)
        val authCode = account?.serverAuthCode

        storeUser()

       readHistoryData(startTime,endTime)
    } catch (e: ApiException) {
        print("There was an error signing into GoogleFit")
   }
}
...