03-27-2026 16:35
03-27-2026 16:35
Hi -
My app allows the user to authenticate with the Fitbit Web API so we can access the user's step count. I am using AppAuth for this on both iOS and Android.
Recently this stopped working on Android, and I'm not sure why. The Fitbit OAuth web interface appears, but when the user taps either "Allow" or "Deny", it doesn't dismiss. Instead, it appears to refresh, and now there are two instances of my app in the Android app list.
Here's the code:
private fun authorize()
{
val authEndpoint = Uri.parse(config.FITBIT_AUTH_URL)
val tokenEndpoint = Uri.parse(config.FITBIT_TOKEN_URL)
val redirectUrl = Uri.parse(config.FITBIT_REDIRECT_URL)
val authConfig = AuthorizationServiceConfiguration(authEndpoint, tokenEndpoint)
val request = AuthorizationRequest.Builder(authConfig, config.FITBIT_CLIENT_ID, ResponseTypeValues.CODE, redirectUrl)
.setPrompt("consent")
.setScope(config.FITBIT_SCOPES.joinToString((" ")))
.build()
val authIntent = fitbitAuthService.getAuthorizationRequestIntent(request)
this.authLauncher.launch(authIntent)
}
val authLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
// THIS NEVER GETS CALLED
if (result.resultCode == Activity.RESULT_OK) {
val data = result.data
if (data != null) {
val authResponse = AuthorizationResponse.fromIntent(data)
val authException = AuthorizationException.fromIntent(data)
// success
}
} else {
// canceled
}
}in AndroidManifest.xml:
<activity
android:name="net.openid.appauth.RedirectUriReceiverActivity"
android:exported="true"
tools:node="replace">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="com.mycompany.myapp" android:host="fitbit-auth"/>
</intent-filter>
</activity>All this works fine on iOS using the corresponding AppAuth library.
Any ideas?
Answered! Go to the Best Answer.
03-30-2026 08:53
03-30-2026 08:53
I don't understand why, but removing the task affinity from the launch activity (which is not the activity that calls the above code) fixed this.
Best Answer03-30-2026 08:53
03-30-2026 08:53
I don't understand why, but removing the task affinity from the launch activity (which is not the activity that calls the above code) fixed this.
Best Answer