2014-04-25 94 views
1

我可以問你一個問題嗎? 如何使用Facebook Android SDK 3.8創建Facebook訪問令牌? 我已經嘗試過各種方式來做到這一點。但是看起來我沒有以正確的方式去做。 該應用程序是Android 4.0 SDK和API等級14.如何使用Facebook Android SDK 3.8獲取Facebook訪問令牌?

在我的用戶界面中,我有一個經典的Android按鈕。

<Button 
android:id="@+id/btn_facebook" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:layout_marginBottom="5dp" 
android:layout_marginLeft="20dp" 
android:layout_marginRight="20dp" 
android:layout_marginTop="80dp" 
android:background="@drawable/button_facebook_normal" 
android:text="@string/btn_facebook" 
android:textColor="@color/white" /> 

在我的AndroidManifest.xml

<!-- FACEBOOK SDK --> 
<activity android:name="com.facebook.LoginActivity" /> 
<meta-data 
android:name="com.facebook.sdk.ApplicationId" 
android:value="@string/app_id" /> 

的strings.xml

<string name="app_id">XXXXXXXX</string> 

我只是想獲得該按鈕的訪問令牌的onClick,然後我可以將它發送到API應用程序的後端。 在我的配置中,名稱空間丟失,但我不知道將它放在Facebook sdk配置中的位置。

非常感謝。


我努力得到的東西這個 https://developers.facebook.com/docs/facebook-login/access-tokens#usertokens


好我的AppId是指的一個應用程序,我沒有註冊爲developper所以... :)瞧,應用程序在沙箱裏。現在我有一個屏幕上顯示「此應用程序requiert您的信息」

現在唯一缺少的是訪問令牌這在此時一個空字符串..

下面是代碼

private String getAccessToken() { 
    Session.OpenRequest request = new Session.OpenRequest(this); 
    request.setPermissions(Arrays.asList("email", "user_birthday")); 
    request.setCallback(mCallback); 

    // get active session 
    Session mFacebookSession = Session.getActiveSession(); 
    if (mFacebookSession == null || mFacebookSession.isClosed()) { 
     mFacebookSession = new Session(this); 
    } 
    mFacebookSession.openForRead(request); 
    return mFacebookSession.getAccessToken(); // the access token is empty here 
} 

StatusCallback mCallback =新Session.StatusCallback(){

@Override 
    public void call(Session session, SessionState state, 
      Exception exception) { 
     // TODO Auto-generated method stub 
      System.out.println("test : "+session.getAccessToken());// the access token is empty here too. 




    } 

}; // the code you already have 

回答

2

您需要從onActivityResult方法facebook的會話onActivityResult方法傳遞參數,以及訪問令牌不會空,如下所示:

/** 
    * Required for Facebook. 
    */ 
    @Override 
    protected void onActivityResult(int arg0, int arg1, Intent arg2) { 
     super.onActivityResult(arg0, arg1, arg2); 
     Session.getActiveSession().onActivityResult(TheActivity.this, arg0, arg1, arg2); 
    } 

這是Facebook的Android的登錄文件here中指出,在年底的「認證變化觸發」一節。

0

我得到的訪問令牌是這樣的:

private void onSessionStateChange(Session session, SessionState state, Exception exception) 
{ 
    if (state.isOpened()) 
    { 
     Log.i(TAG, "Logged in..."); 
     pb.setVisibility(View.VISIBLE); 
     authButton.setClickable(false); 
     final Session curSession = Session.getActiveSession(); 

     Request r = Request.newMeRequest(curSession, new Request.GraphUserCallback() 
     { 
      @Override 
      public void onCompleted(GraphUser user, Response response) 
      { 
       try 
       { 
        GlobalVars.fbId = user.getId(); 
        GlobalVars.fbUName = user.getName(); 
        GlobalVars.fbUFirstName = user.getFirstName(); 

        String loginCheckURL = GlobalVars.server_url 
              +"login.php?fb_user&fbID="+GlobalVars.fbId 
              +"&fb_access_token=" +curSession.getAccessToken(); 

        Log.e("Login Check", loginCheckURL); 
        new GetUserDetailsTask().execute(loginCheckURL); 
       } 
       catch (Exception e) 
       { 
        justSomeMethThatHandlesTheVariousProblemsWeMightFaceWhileFacebookLogin(response.getError()); 
       } 
      } 
     }); 
     r.executeAsync(); 
    } 
    else if (state.isClosed()) 
    { 
     Log.i(TAG, "Logged out..."); 
    } 
} 
+0

最後我使用了Android的Facebook簡單項目。當我完成這個時,我會在這裏推送代碼。 https://github.com/sromku/android-simple-facebook –

+0

「請求」類的確切位置是什麼? –

相關問題