Пользовательские вкладки Android Chrome / Fitbit API не будут перенаправляться, если приложение уже разрешено. (OAuth 2.0)

Я намерен создать стороннее приложение для фиттинга для синхронизации сигналов тревоги.

Тем не менее, я столкнулся с некоторыми трудностями, связанными с регистрацией моего приложения, более явно о том, как получить токен доступа, даже если мой клиент уже зарегистрирован в приложении. (Учитывая сценарий, когда пользователь переустанавливает свое приложение).

Я использую пользовательские вкладки Chrome (так как WebView запрещен FitBit), чтобы запросить токен доступа:

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)); 

При перенаправлении на пользовательскую схему, определенную с помощью фильтра-намерения:

 <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 должен запускаться, где я получу свой AccessToken с данного намерения:

 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)); } 

}

Все работает нормально при первом запуске (при условии, что клиент еще не разрешен), но после этого, если вы хотите снова получить мой токен доступа (я знаю, что я должен хранить его локально – SharedPreferences, скорее всего, но это для целей тестирования Только) пользовательские вкладки хрома откроются и останутся на пустой странице (видимо, она не будет перенаправлена ​​должным образом).

Я прочитал API-интерфейс FitBit и сказал следующее: Если приложение, использующее поток неявных грантов, отправляет пользователя на страницу авторизации до истечения срока действия ранее выпущенного токена доступа, пользователь не будет запрашиваться, если область действия не увеличилась. Пользователь будет перенаправлен немедленно в приложение с помощью токена доступа.

Поэтому мой вопрос в том, есть ли ошибка в моем мышлении о проблеме или
Я должен перехватить хромированные пользовательские вкладки?

Заранее большое спасибо.

Я нашел обходной путь для этой проблемы. В основном я вставляю новый параметр в Url с запросом для Fitbit API. («& Prompt = login»). Этот параметр будет запрашивать у пользователя повторный вход в систему каждый раз, когда он запрашивает токен авторизации, выгружая его, если он уже вошел в систему.

Поэтому я предполагаю, что фибит переадресовывает 302, когда пользователь уже вошел в систему. Поэтому я использовал это решение (смешав это решение с CustomTabActivityHelper из демонстрации на вкладке Chrome ), и он исправил проблему. Ура.

Я смог «исправить» проблему, вызвав функцию разминки перед загрузкой URL-адреса, который перенаправляется.

Chrome Custom Tabs переадресация на Android-приложение закроет приложение