アラーム同期用のサードパーティの 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 が起動し、指定された Intent から 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 が最も可能性が高いですが、これはテスト目的のためですのみ) chrome カスタム タブが開いて、空のページにとどまります (明らかに、適切にリダイレクトされません)。
FitBit WEB API を読みましたが、次のように書かれています: 以前に発行されたアクセス トークンの有効期限が切れる前に、暗黙的許可フローを使用するアプリケーションがユーザーを認証ページに送信した場合、スコープが拡大されない限り、ユーザーはプロンプトを表示されません。ユーザーは、アクセス トークンを使用してすぐにアプリケーションにリダイレクトされます。
だから私の質問は、問題についての私の考えに誤りがあるのか
、それともクロムのカスタムタブの誤りがあるのかということです。
事前にどうもありがとうございました。