为什么我在Android中丢失了我的访问令牌?

时间:2013-05-02 10:59:15

标签: android facebook facebook-access-token

我正在研究android中的Facebook应用程序。我正在运行我的应用程序一两次我的访问令牌在第三次丢失我的访问令牌后运行良好。为什么,我丢失了访问令牌?我能做什么而不丢失运行时访问令牌。

任何人请帮助我......

编辑1:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
    mFacebook.authorizeCallback(requestCode, resultCode, data);
}

登录按钮单击::::

mBtnFbLogin.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {
            Log.d("Image Button", "button Clicked");
            loginToFacebook();
        }
    });

登录方法::::::

public void loginToFacebook(){

    mPrefs = getPreferences(MODE_PRIVATE);
    String access_token = mPrefs.getString("access_token", null);
    long expires = mPrefs.getLong("access_expires", 0);

    if (access_token != null) {
        mFacebook.setAccessToken(access_token);

        Log.d("FB Sessions", "" + mFacebook.isSessionValid());
        Toast.makeText(getApplicationContext(), "Login SuccessFully",
                Toast.LENGTH_LONG).show();



    }

    if (expires != 0) {
        mFacebook.setAccessExpires(expires);
    }

    if (!mFacebook.isSessionValid()) {
        mFacebook.authorize(this,
                new String[] { "email", "publish_stream" },
                new DialogListener() {

                    @Override
                    public void onCancel() {
                        // Function to handle cancel event
                        Log.d("FB Sessions",
                                "" + mFacebook.isSessionValid());
                        Toast.makeText(getApplicationContext(),
                                "Login Cancel", Toast.LENGTH_LONG).show();
                    }

                    @Override
                    public void onComplete(Bundle values) {
                        // Function to handle complete event
                        // Edit Preferences and update facebook acess_token
                        SharedPreferences.Editor editor = mPrefs.edit();
                        editor.putString("access_token",
                                mFacebook.getAccessToken());
                        editor.putLong("access_expires",
                                mFacebook.getAccessExpires());
                        editor.commit();

                        Log.d("FB Sessions",
                                "" + mFacebook.isSessionValid());
                        Toast.makeText(getApplicationContext(),
                                "Login SuccessFully", Toast.LENGTH_LONG)
                                .show();


                    }

                    @Override
                    public void onError(DialogError error) {
                        // Function to handle error

                    }

                    @Override
                    public void onFacebookError(FacebookError fberror) {
                        // Function to handle Facebook errors

                    }

                });
    }
}

2 个答案:

答案 0 :(得分:0)

访问令牌将在每小时到期,可能是您在该小时后第三次运行

答案 1 :(得分:0)

表面上阅读您的登录代码看起来不错,但使用旧的/弃用的方式使用Facebook Android SDK。 (您最近的示例/教程是多少?)它也缺少访问令牌扩展代码,因此当访问令牌到期时它将停止工作。

继续使用这种Facebook API用法:在尝试Facebook操作之前,您应该检查mFacebook.shouldExtendAccessToken()并在需要时致电mFacebook.extendAccessToken()

要更改为较新的API使用方式,请使用Session类。