2013-01-17 121 views
2

我嘗試在我的應用程序中使用Facebook認證,但我無法登錄,我總是被重定向到表單,詢問我是否允許應用程序訪問我的信息(即在我的代碼「dologin」方法.. 這裏是我的代碼:Facebook連接android sdk 3.0

package com.fbconnect; 

import android.app.Activity; 
import android.os.Bundle; 
import com.facebook.*; 
import com.facebook.model.*; 
import com.facebook.widget.*; 

import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 
import android.content.Intent; 

public class MainActivity extends Activity { 

    private TextView textInstructionsOrLink; 
    private Button buttonLoginLogout; 

    private Session.StatusCallback statusCallback = new SessionStatusCallback(); 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     buttonLoginLogout = (Button)findViewById(R.id.login_button); 
     setContentView(R.layout.main); 
     Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS); 
     Session session = Session.getActiveSession(); 
     if (session == null) { 
      if (savedInstanceState != null) { 
       session = Session.restoreSession(this, null, statusCallback, savedInstanceState); 
      } 
      if (session == null) { 
       session = new Session(this); 
      } 
      Session.setActiveSession(session); 
      if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) { 
       session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback)); 
      } 
     } 

     updateView(); 

    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     Session.getActiveSession().addCallback(statusCallback); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
     Session.getActiveSession().removeCallback(statusCallback); 
    } 

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

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     Session session = Session.getActiveSession(); 
     Session.saveSession(session, outState); 
    } 

    private void updateView() { 
     Session session = Session.getActiveSession(); 
     Log.i("session log", session.toString()); 
     if (session.isOpened()) { 
      TextView welcome = (TextView) findViewById(R.id.welcome); 
      welcome.setText("Hello !"); 
     } else { 

      doLogin(); 
     } 
    } 

    private void doLogin() { 
     Session session = Session.getActiveSession(); 
     if (!session.isOpened() && !session.isClosed()) { 
      session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback)); 
     } else { 
      Session.openActiveSession(this, true, statusCallback); 
     } 
    } 

    private class SessionStatusCallback implements Session.StatusCallback { 
     @Override 
     public void call(Session session, SessionState state, Exception exception) { 
      updateView(); 
     } 
    } 
} 

回答

0

這個問題實際上從關鍵字哈希 我對窗口有幾個愚蠢的問題來了,這裏有一些建議:

  • 不要使用windows cmd,通過cygwin來做
  • 不使用%HOMEPATH%(即使它在Facebook上顯示...),更喜歡漫長的方式:「C:\ Users \ ... \。android \ debug.keystore」
  • 用引號括住keystore路徑(即使它裏面沒有空格)
  • 如果發電機沒有要求你輸入密碼,它將不起作用,你在命令中做了錯誤