2014年7月6日

在Android上使用Facebook API

要在Android上使用Facebook的API,可以使用Facebook Android SDK,使用上其實不太困難,不過要設定一開始的環境還蠻搞剛的,所以稍微將步驟紀錄一下。

開始設定

  1. 下載最新版的Facebook Android SDK,根據你的IDE放到project裡面。
    或是直接使用別人包好的aar

    compile ‘fr.avianey:facebook-android-api:+@aar’

  2. 產生Key hash (修改紅字部份)

    keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64


3. 到Facebook開發者網站,登入後點選右上角的照片,然後選擇Developer Settings

  1. 切換到Sample App的頁面,填入你步驟2得到的Key Hash,可以同時填入多個keyhash,然後按Save。

  2. 建立一個Facebook App

    1. 前往這裡,還沒註冊過開發者的話要先點Register Now,完成註冊動作。

    2. 點選最上面的Apps > Create a New App,完成App註冊的動作。

    3. 完成後畫面上會顯示App IDApp Secret

  3. 點選左方的Settings,然後點選右方下面的 +Add Platform,選Android

    • 填入你的Android app的packaga name
    • 填入你的Activity class name,非必要
    • 步驟2產生的的Key Hash
    • 打開Single Sign On
  4. Android App的設定

    1. 在你的Android App的res/string.xml,加上

      <string name="app_id">你的App ID(步驟5)</string>
    2. 然後在AndroidManifest.xml 加上 use-permissionmetadata

      <uses-permission android:name="android.permission.INTERNET"/>
      
      <application ...>
          ...略...
          <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/>    
      </application>
    3. 新增LoginActivity在你的AndroidManifest.xml

      <activity android:name="com.facebook.LoginActivity"/>
  5. 測試Facebook登入

    • 把下面這段code放到你的MainActivity onCreate的最後面。
    // start Facebook Login
    Session.openActiveSession(this, true, new Session.StatusCallback() {
    
    // callback when session changes state
    @Override
    public void call(Session session, SessionState state, Exception exception) {
        if (session.isOpened()) {
    
            // make request to the /me API
            Request.newMeRequest(session, new Request.GraphUserCallback() {
    
                // callback after Graph API response with user object
                @Override
                public void onCompleted(GraphUser user, Response response) {
                    if (user != null) {
                        Toast.makeText(getApplicationContext(), "Hello " + user.getName() + "!", Toast.LENGTH_LONG).show();
                    }
                }
            }).executeAsync();
        }
    }
    });
    • 加上onActivityResult
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
    }


如果可以看到Facebook登入權限的要求,然後登入看到Toast,那就是成功了。

沒有留言:

張貼留言