Facebook登录失败:{会话状态:CLOSED_LOGIN_FAILED,令牌:{的accessToken令牌:ACCESS_TOKEN_REMOVED权限:[]},APPID:131 *** 64547} [英] facebook login fails: {Session state:CLOSED_LOGIN_FAILED, token:{AccessToken token:ACCESS_TOKEN_REMOVED permissions:[]}, appId:131***64547}

查看:866
本文介绍了Facebook登录失败:{会话状态:CLOSED_LOGIN_FAILED,令牌:{的accessToken令牌:ACCESS_TOKEN_REMOVED权限:[]},APPID:131 *** 64547}的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试这个code。使用FB进行登录到我的应用程序。

 公共类FacebookLogin2Activity扩展BaseActivity {    私人字符串标记=MainActivity;    @覆盖
    公共无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);        的setContentView(R.layout.facebook_login);        会话的会话= Session.getActiveSession();
        如果(会话= NULL&放大器;!&安培; session.isOpened()){
            fetchUserDetails(会话);
        }        LoginButton authButton =(LoginButton)findViewById(R.id.authButton);
        authButton.setOnErrorListener(新OnErrorListener(){            @覆盖
            公共无效onerror的(FacebookException错误){
                Log.e(TAG,错误+ error.getMessage());
            }
        });
        //设置权限列表,不要忘了添加电子邮件
        authButton.setReadPermissions(Arrays.asList(basic_info,电子邮件,
                生日));        //方案A
        // Session.openActiveSession(这一点,真正的,新的Session.StatusCallback(){
        //
        当会话改变状态// //回调
        // @覆盖
        //公共无效呼叫(会话的会话,SessionState会的状态,
        //异常除外){
        // fetchUserDetails(会话);
        //}
        //});        // // B选项
        //会话状态回拨事件
        authButton.setSessionStatusCallback(新Session.StatusCallback(){            @覆盖
            公共无效呼叫(会话的会话,SessionState会的状态,
                    例外的例外){                如果(session.isOpened()){
                    fetchUserDetails(会话);
                }
            }
        });
    }    私人无效fetchUserDetails(会话的会话){
        Log.i(TAG,访问令牌+ session.getAccessToken());        Request.newMeRequest(会话,新Request.GraphUserCallback(){
            @覆盖
            公共无效onCompleted(GraphUser用户,响应响应){
                //一些code
                }
            }        })executeAsync()。
    }

但我得到这个错误

我应该怎么检查?

  {会话状态:CLOSED_LOGIN_FAILED,令牌:{的accessToken令牌:ACCESS_TOKEN_REMOVED权限:[]}的appid:131390430364547}

和我已经验证了Facebook开发已在网站上我的Andr​​oid哈希code。

 公共类MainActivity延伸活动{  @覆盖
  公共无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_main);    //启动的Facebook登录
    Session.openActiveSession(这一点,真正的,新的Session.StatusCallback(){      //回调时,会话状态变化
      @覆盖
      公共无效呼叫(会话的会话,SessionState会状态,异常除外){
        如果(session.isOpened()){          //使请求/我API
          Request.executeMeRequestAsync(会话,新Request.GraphUserCallback(){            //后用户对象图形API响应回调
            @覆盖
            公共无效onCompleted(GraphUser用户,响应响应){
              如果(用户!= NULL){
                欢迎TextView的=(的TextView)findViewById(R.id.welcome);
                welcome.setText(你好+ user.getName()+!);
              }
            }
          });
        }
      }
    });
  }  @覆盖
  公共无效的onActivityResult(INT申请code,INT结果code,意图数据){
      super.onActivityResult(要求code,结果code,数据);
      Session.getActiveSession()的onActivityResult(这一点,要求code,结果code,数据)。
  }}


解决方案

检查您的Manifest.xml

 <元数据的android:值=@字符串/ facebook_app_id机器人:名字=com.facebook.sdk.ApplicationId/>

和您的strings.xml有

 <字符串名称=facebook_app_id> 131390430364547< /串>

验证APP_ID是在你的Facebook应用程序的配置相同,并在类字段设置yourApp.mainactivity

是它的debbug应用程序或释放的应用程序?哈希code为diferent为每一个

编辑 *

有关验证会话的状态

 私人Session.StatusCallback回调=新Session.StatusCallback(){    @覆盖
    公共无效呼叫(会话的会话,SessionState会状态,异常除外){
        onSessionStateChange(会话,状态除外);
        如果(session.isOpened()){
            。StrictMode.ThreadPolicy政策=新StrictMode.ThreadPolicy.Builder()permitAll()建();
            StrictMode.setThreadPolicy(政策);
          Log.e(用户,会议确立了);
            Request.newMeRequest(会话,新Request.GraphUserCallback(){                @覆盖
                公共无效onCompleted(GraphUser用户,响应响应){
                    如果(用户!= NULL){
                    Log.e(用户,loged用户);
                        buildUserInfoDisplay(用户);
                    }
                }
            })executeAsync()。
        }
        其他{
          Log.e(用户,会话不成立);
        }
    }
    私人无效onSessionStateChange(会话的会话,SessionState会的状态,
                                      例外的例外){    }
};

和在使用的登录按钮上创建方法

 公共无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    StrictMode.ThreadPolicy政策=新StrictMode.ThreadPolicy.Builder()
            .permitAll()建立()。        StrictMode.setThreadPolicy(政策);
        uiHelper =新UiLifecycleHelper(这一点,回调);
        uiHelper.onCreate(savedInstanceState);
        的setContentView(R.layout.login);        buttonLoginLogout =(LoginButton)findViewById(R.id.authButton);
        buttonLoginLogout.setReadPermissions(Arrays.asList(user_status));    }}

还需要管理生命周期的人方法UI状态

 公共无效onResume(){
    super.onResume();
    uiHelper.onResume();
}
 公共无效的onPause(){
    super.onPause();
    uiHelper.onPause();
}@覆盖
公共无效的onActivityResult(INT申请code,INT结果code,意图数据){
    super.onActivityResult(要求code,结果code,数据);
    uiHelper.onActivityResult(要求code,结果code,数据);
}@覆盖
公共无效的onDestroy(){
    super.onDestroy();
    uiHelper.onDestroy();
}@覆盖
保护无效的onSaveInstanceState(捆绑outState){
    super.onSaveInstanceState(outState);
    uiHelper.onSaveInstanceState(outState);
}

我有此登录正是因为我张贴,它wors好,Facebook开发控制台跟踪用户会话的应用程序。试试吧!

I try this code to perform login to my app using fb.

public class FacebookLogin2Activity extends BaseActivity {

    private String TAG = "MainActivity";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.facebook_login);

        Session session = Session.getActiveSession();
        if (session != null && session.isOpened()) {
            fetchUserDetails(session);
        }

        LoginButton authButton = (LoginButton) findViewById(R.id.authButton);
        authButton.setOnErrorListener(new OnErrorListener() {

            @Override
            public void onError(FacebookException error) {
                Log.e(TAG, "Error " + error.getMessage());
            }
        });
        // set permission list, Don't forget to add email
        authButton.setReadPermissions(Arrays.asList("basic_info", "email",
                "birthday"));

        // option A
        // Session.openActiveSession(this, true, new Session.StatusCallback() {
        //
        // // callback when session changes state
        // @Override
        // public void call(Session session, SessionState state,
        // Exception exception) {
        // fetchUserDetails(session);
        // }
        // });

        // // option B
        // session state call back event
        authButton.setSessionStatusCallback(new Session.StatusCallback() {

            @Override
            public void call(Session session, SessionState state,
                    Exception exception) {

                if (session.isOpened()) {
                    fetchUserDetails(session);
                }
            }
        });
    }

    private void fetchUserDetails(Session session) {
        Log.i(TAG, "Access Token" + session.getAccessToken());

        Request.newMeRequest(session, new Request.GraphUserCallback() {
            @Override
            public void onCompleted(GraphUser user, Response response) {
                //some code
                }
            }

        }).executeAsync();
    }

but i get this error

what should i check?

{Session state:CLOSED_LOGIN_FAILED, token:{AccessToken token:ACCESS_TOKEN_REMOVED permissions:[]}, appId:131390430364547}

and I have verified Facebook developers has my android hash code in the website.

public class MainActivity extends Activity {

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // 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.executeMeRequestAsync(session, new Request.GraphUserCallback() {

            // callback after Graph API response with user object
            @Override
            public void onCompleted(GraphUser user, Response response) {
              if (user != null) {
                TextView welcome = (TextView) findViewById(R.id.welcome);
                welcome.setText("Hello " + user.getName() + "!");
              }
            }
          });
        }
      }
    });
  }

  @Override
  public void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
  }

}

解决方案

check your Manifest.xml

 <meta-data android:value="@string/facebook_app_id" android:name="com.facebook.sdk.ApplicationId"/>

and your strings.xml have

  <string name="facebook_app_id">131390430364547</string>

verify the app_id is the same in your facebook app configuration and set the "yourApp.mainactivity" in the Class field

is it the debbug app or released app? the hash code is diferent for each one

Edited *

for verify the status of the session

private Session.StatusCallback callback = new Session.StatusCallback() {

    @Override
    public void call(Session session, SessionState state, Exception exception) {
        onSessionStateChange(session, state, exception);
        if (session.isOpened()) {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
          Log.e("user", "session established");
            Request.newMeRequest(session, new Request.GraphUserCallback() {

                @Override
                public void onCompleted(GraphUser user, Response response) {
                    if (user != null) {
                    Log.e("user", "loged user");
                        buildUserInfoDisplay(user);
                    }
                }
            }).executeAsync();
        }
        else{
          Log.e("user", "session not established");
        }
    }
    private void onSessionStateChange(Session session, SessionState state,
                                      Exception exception) {

    }
};

and in the on create method to use the login button

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
            .permitAll().build();

        StrictMode.setThreadPolicy(policy);
        uiHelper = new UiLifecycleHelper(this, callback);
        uiHelper.onCreate(savedInstanceState);
        setContentView(R.layout.login);

        buttonLoginLogout = (LoginButton)findViewById(R.id.authButton);
        buttonLoginLogout.setReadPermissions(Arrays.asList("user_status"));

    }

}

also need to manage the ui status in al lifecycle methods

public void onResume() {
    super.onResume();
    uiHelper.onResume();
}
 public void onPause() {
    super.onPause();
    uiHelper.onPause();
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    uiHelper.onActivityResult(requestCode, resultCode, data);
}

@Override
public void onDestroy() {
    super.onDestroy();
    uiHelper.onDestroy();
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    uiHelper.onSaveInstanceState(outState);
}

I have an app with this login exactly as i posted it, it wors good, facebook developer console is tracking the sessions of users. Try it !

这篇关于Facebook登录失败:{会话状态:CLOSED_LOGIN_FAILED,令牌:{的accessToken令牌:ACCESS_TOKEN_REMOVED权限:[]},APPID:131 *** 64547}的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆