2013-05-02 131 views
0

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

任何一个请帮我....

编辑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(新View.OnClickListener(){

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

登录方法::::::

公共无效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 

        } 

       }); 
    } 
} 
+3

很难说没有水晶球。请在您获取/存储/恢复访问令牌的地方添加相关的代码片段。 – laalto 2013-05-02 11:03:53

+0

好吧,我编辑我的问题,并添加我的代码。请帮助我... – user2293429 2013-05-02 12:56:32

回答

0

访问令牌将每一个小时后到期可能是你的这一个小时

+0

为什么它每隔一小时就会过期。我可以为它做些什么。 – user2293429 2013-05-02 12:06:58

+0

好问题....为了安全起见,facebook已经设计过每个小时都会使用accesstoken ....有一个非常简单的fuctsality来获取accesstoken ..... http://www.androidhive.info/2012/03/android-facebook-connect-tutorial /在本教程中,您将获得清晰的解释...阅读教程...并玩得开心。 – Ramz 2013-05-02 12:17:13

+0

感谢您的答复。我正在像本教程的方式获取我的访问键。但我仍然失去了access_key ..后得到app_id任何设置的Facebook开发者博客完成? – user2293429 2013-05-02 12:46:31

0

表面上看阅读您的登录代码看起来确定后运行第三次,虽然使用的是旧/过时使用Facebook Android SDK的方式。 (您最近的示例/教程是否跟随?)它也缺少访问令牌扩展代码,因此访问令牌到期时它将停止工作。

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

要更改为较新的API使用风格,请使用Session类。

+0

为了扩展这一点,如果您在3.0 API中使用Session和Request类,那么当您发出图形请求时,它会自动为您扩展令牌,因此不需要手动检查和扩展。 – 2013-05-02 16:32:08

相关问题