2014-04-25 96 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

“请求”类的确切位置是什么? –

相关问题