Fitbit API を Androidアプリから叩いてみた 認証編

前回書いた 「準備編」からの続きです

実際にAndroidアプリでFitbitアカウントで認証をしてみましょう。

Fitbitもご多分に漏れずOAuth認証です。

FitbitのJava Wrapperがほとんどやってくれますのでとても簡単です。

流れとしては

 ①コンシューマーキーとコンシューマーシークレット、コールバックを渡して認証用URLを生成

 ②認証用URLをブラウザで開く

 ③ユーザーにメールアドレスとパスを入れて認証をしてもらう

 ④認証が正常に終わったらコールバックのURLをintent-filterで受け取りTokenとToken Secretを受け取る。

これでユーザーが自分のFitbitの情報を取得するのに必要な情報がそろいます。

コードは以下に

①&②認証用ページをブラウザで開く

//認証用とAPIの呼び出しの際に必要なURL
    String apiBaseUrl = "api.fitbit.com";
    String webBaseUrl = "https://www.fitbit.com";


//コールバック先を指定
    String callbackUrl = "fitbit://callback";

//おまじない 
     FitbitAPIEntityCache entityCache = new FitbitApiEntityCacheMapImpl();
     FitbitApiCredentialsCache credentialsCache = new FitbitApiCredentialsCacheMapImpl();
     FitbitApiSubscriptionStorage subscriptionStore = new FitbitApiSubscriptionStorageInMemoryImpl();
     FitbitApiClientAgent apiClientAgent = new FitbitApiClientAgent(
        apiBaseUrl, webBaseUrl, credentialsCache);

     apiClientService = new FitbitAPIClientService<FitbitApiClientAgent>(
        apiClientAgent, "自分のアプリのコンシューマーキー", "コンシューマーシークレット",
        credentialsCache, entityCache, subscriptionStore);

     LocalUserDetail userDetail = new LocalUserDetail("-");

     String authorizationURL = apiClientService
        .getResourceOwnerAuthorizationURL(userDetail,
      callbackUrl);

//ブラウザで認証ページを開く
     Uri uri = Uri.parse(authorizationURL);
     Intent i = new Intent(Intent.ACTION_VIEW, uri);
     startActivity(i);
     

④ブラウザで認証が済んだら指定したコールバックをintent filterで受け取る

認証後の受け取りようActivityなりをManifest.xmlに事前に設定しておこう

今回はcallback用Activityを1個作りました

        <activity
            android:name="com.abalol.fitbetter.callback"
            android:launchMode="singleTask" >
            <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:host="callback"
                    android:scheme="fitbit" />
            </intent-filter>
        </activity>

最後に実際にActivityでcallbackのurlに含まれるトークン等を取得します。


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.callback);

        if (uri != null && uri.toString().startsWith("fitbit://callback")) {
            // oauth_verifierを取得する
            String verifier = uri.getQueryParameter("oauth_verifier");
            String token = uri.getQueryParameter("oauth_token");

            APIResourceCredentials resourceCredentials = MainActivity.apiClientService
                    .getResourceCredentialsByTempToken(token);

            if (!resourceCredentials.isAuthorized()) {
                resourceCredentials.setTempTokenVerifier(verifier);
                try {
                    MainActivity.apiClientService
                            .getTokenCredentials(new LocalUserDetail(
                                    resourceCredentials.getLocalUserId()));

                    // 認証完了
                    String AccessToken = resourceCredentials.getAccessToken();
                    String TokenSecret = resourceCredentials
                            .getAccessTokenSecret();

                } catch (FitbitAPIException e) {
                    e.printStackTrace();
                }
            }
        }

これで認証したユーザーの各情報を取得する準備が整いました

About the author

One thought on “Fitbit API を Androidアプリから叩いてみた 認証編”

Comments are closed.