Las pestañas personalizadas de Chrome de Android / la API web de Fitbit no se redireccionarán si la aplicación ya está autorizada. (OAuth2.0)

Tengo la intención de crear una aplicación fitbit de terceros para la sincronización de alarmas.

Sin embargo, he encontrado algunas dificultades con respecto al registro de mi aplicación, más explícitamente en obtener el token de acceso incluso si mi cliente ya está registrado en la aplicación. (Teniendo en cuenta el escenario de que un usuario vuelva a instalar su aplicación).

Estoy usando pestañas personalizadas de Chrome (como WebView está prohibido por FitBit) para solicitar el token de acceso:

String url = "https://www.fitbit.com/oauth2/authorize?" + "response_type=token" + "&client_id=XXXXXX" + "&scope=activity"+ "&redirect_uri=fitbittester://logincallback"; customTabsIntent.launchUrl(MainActivity.this, Uri.parse(url)); 

Al redirigir al esquema personalizado definido con un filtro de intenciones:

 <activity android:name=".TestActivity" android:label="TestActivity" android:theme="@style/AppTheme.NoActionBar"> <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="fitbittester" android:host="logincallback" /> </intent-filter> </activity> 

TestActivity debería iniciarse, donde obtendré mi AccessToken de la intención dada:

 public class TestActivity extends AppCompatActivity { String string; @Override protected void onNewIntent(Intent intent) { string = intent.getDataString(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); onNewIntent(getIntent()); Toast.makeText(TestActivity.this, string , Toast.LENGTH_LONG).show(); Log.e("TAG", string); Log.e("TAG", string.substring(string.indexOf("&access_token")+14)); } 

}

Todo funciona bien en la primera ejecución (siempre que el cliente no está autorizado), pero después de eso si desea obtener mi token de acceso de nuevo (sé que debería almacenarlo localmente – SharedPreferences más probable, pero esto es para fines de prueba Sólo) las pestañas personalizadas de cromo se abrirán y permanecerán en una página vacía (aparentemente no se redireccionará correctamente).

He leído la API WEB FitBit y dice lo siguiente: Si una aplicación que utiliza el flujo implícito de subvención envía un usuario a la página de autorización antes de que expire el token de acceso emitido anteriormente, el usuario no se le pedirá a menos que el ámbito ha aumentado. El usuario será redirigido inmediatamente a la aplicación con un token de acceso.

Así que mi pregunta es si hay una falla en mi pensamiento sobre el problema o
Un cromo pestañas personalizadas culpa debo interceptar?

Muchas gracias por adelantado.

He encontrado una solución para este problema. Básicamente, estoy insertando un nuevo parámetro en la Url con la consulta de la API de Fitbit. ("& Prompt = login"). Este parámetro solicitará al usuario que vuelva a iniciar sesión cada vez que solicite el token de autorización, desconectándolo si ya está conectado.

Así que supongo que fitbit hace un redireccionamiento 302 cuando el usuario ya ha iniciado sesión. Por lo tanto, usé esta solución (mezcló esta solución con CustomTabActivityHelper de la demo de la ficha de Chrome ) y arregló el problema. Hurra.

Pude "arreglar" el problema llamando a la función de calentamiento antes de cargar la url que redirecciona.

El redireccionamiento de las pestañas personalizadas de Chrome a la aplicación para Android cerrará la aplicación.

  • Obtener tiempo de caducidad de token de acceso de Google en Android
  • Uso de Google OAuth 2 en dispositivos incrustados basados ​​en Android
  • La mejor manera de usar las API de Google con OAuth 2.0 en Android
  • En Google App Engine, ¿puedo relacionar un Token de Google OAuth 2 y un símbolo de SACSID que obtuve con el AccountManager de Android?
  • Obtener la solicitud de permiso "tener acceso sin conexión" al llamar a GoogleAuthUtil.getToken
  • Autenticar mi "aplicación" en Google Cloud Endpoints no es un "usuario"
  • ¿Cómo crear una cuenta de usuario _segmentar desde un token de Google para Android?
  • Intento del navegador y regreso a la actividad correcta (ficha abierta)
  • ¿Por qué el método GoogleAuthUtil.getToken () genera dos tipos de tokens?
  • Error "No se puede crear una conexión fiable con el servidor" al iniciar sesión con google plus
  • ¿Cómo obtener la huella digital del certificado de firma (SHA1) para OAuth 2.0 en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.