Я намерен создать стороннее приложение fitbit для синхронизации будильника.
Однако я столкнулся с некоторыми трудностями, связанными с регистрацией моего приложения, точнее с получением токена доступа, даже если мой клиент уже зарегистрирован в приложении. (Учитывая сценарий, когда пользователь переустанавливает свое приложение).
Я использую пользовательские вкладки 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 из данного Intent:
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, но это для целей тестирования только) пользовательские вкладки Chrome будут открываться и оставаться на пустой странице (очевидно, она не будет правильно перенаправлена).
Я прочитал веб-API FitBit, и в нем говорится следующее: если приложение, использующее поток неявного предоставления, отправляет пользователя на страницу авторизации до истечения срока действия ранее выданного токена доступа, пользователю не будет предложено, если область действия не увеличилась. Пользователь будет немедленно перенаправлен в приложение с токеном доступа.
Итак, мой вопрос: есть ли ошибка в моих размышлениях о проблеме или
ошибка пользовательских вкладок Chrome, которую я должен перехватить?
Заранее большое спасибо.