[英]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.