簡體   English   中英

如何使用Facebook Android SDK 3.8獲取Facebook訪問令牌?

[英]How to get facebook access token with Facebook Android SDK 3.8?

我可以問你一個問題? 如何獲取使用Facebook Android SDK 3.8創建的Facebook訪問令牌? 我嘗試了各種方法來做到這一點。 但似乎我做的方式不正確。 該應用是Android 4.0 SDK和API級別14。

在我的用戶界面中,我有一個經典的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指向一個我沒有注冊為開發人員的應用程序,所以... :)瞧,該應用程序位於沙箱中。 現在,我的屏幕上顯示“此應用程序需要您的信息”

現在唯一缺少的是訪問令牌,該令牌此時為空字符串。

這是代碼

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

您需要將參數從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的登錄文件中稱這里 ,在結束“認證變化觸發”一節。

我得到這樣的訪問令牌:

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...");
    }
}

如果您不想麻煩Facebook SDK, 使用此庫https://github.com/sromku/android-simple-facebook

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM