Я интегрировал 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")
}
}