2012-01-06 103 views
5

我正在嘗試使用Android Facebook SDK - 但沒有運氣。 問題是Facebook登錄窗口開始加載,但在發生任何事情之前,它會消失。這是實際設備上的行爲,在模擬器上都是好的。Android - facebook sdk登錄窗口消失

我做了什麼:

  1. here
  2. 下載SDK添加的java文件到我的項目。
  3. 創建了一個Facebook應用程序。
  4. 得到了關鍵哈希值並更新了我的facebook應用程序。

但我不能讓登錄窗口出現。我沒有看到在logcat的任何錯誤,僅此:

ActivityManager(2698):開始:意向{CMP = com.facebook.katana/.ProxyAuth(有演員) ActivityManager(2698):嘗試啓動com.facebook.katana/.ProxyAuth ActivityManager(2698):顯示com.facebook.katana/.ProxyAuth:+ 371ms(總+ 466ms)

任何想法?

10X :)

編輯: 看來添加的代碼的活動,這些線路解決了這個問題:

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

了,如果從這裏:SO Question

+0

在com.facebook.android庫項目中,用log.i()替換所有的log.d()語句,即使我在設備上測試時遇到過這樣的問題,登錄屏幕消失可能是由於很多原因,由於設備日期太舊,我面臨SSLException – 2012-01-07 09:39:09

回答

0

您可能希望把一些在每個Facebook對話事件(onComplete,onFacebookError,onError,onCancel)中調試消息(log.v())。我有同樣的問題;儘管如此,我的問題與關鍵散列有關,我有不正確的keyhash。如果keytool沒有要求你輸入密碼,它會給你不正確的密鑰。用不正確的keyhash,我得到了和你一樣的行爲。

另一件事可能是您已經在設備上登錄Facebook。因此,它不需要徵求您的許可。如果是這種情況,請退出Facebook,然後運行您的應用程序。

+0

我沒有給所有Facebook對話事件添加消息 - 但沒有一個顯示。看起來相關代碼的最後一行是:facebook.authorize(this,PERMISSIONS,new LoginDialogListener()); – 2012-01-06 22:06:39

3

來自com.facebook.katana的logcat錯誤來自Android Facebook應用程序。是否安裝在手機上?這聽起來像是,你是默認單點登錄(SSO)? 嘗試做你的授權成爲

authorize(this, PERMISSIONS, FORCE_DIALOG_AUTH, new LoginDialogListener()); 

避免了單點登錄和強制對話框登錄。 如果這樣會繞過你的崩潰,那麼最可能的原因是SDK和已安裝的Facebook應用程序之間不匹配。他們對於一起工作往往很挑剔。如果是這樣,那麼在找到一對穩定的對之前,您可能必須嘗試每個版本的不同版本。

+0

偉大的解決方案。在我的應用程序中它是完美的作品。非常感謝Troid! – 2012-05-22 06:51:14

1

你已經安裝在設備原生應用程序的Facebook?因爲com.facebook.katana - 這是來自Facebook的應用程序。它可能會發生,因爲已經通過此應用程序授權。 我該怎麼辦? 我在臉書的評論。java的代碼

public void authorize(Activity activity, String[] permissions, int activityCode, final  DialogListener listener) { 
    boolean singleSignOnStarted = false; 

    mAuthDialogListener = listener; 

    // Prefer single sign-on, where available. 
    //  if (activityCode >= 0) { 
    //   singleSignOnStarted = startSingleSignOn(activity, mAppId, permissions, activityCode); 
    //  } 
    // Otherwise fall back to traditional dialog. 
    if (!singleSignOnStarted) { 
     startDialogAuth(activity, permissions); 
    } 
} 

我也嘗試做多登錄和發現的問題,當我有一個登錄/密碼權威性,嘗試添加新的登錄,顯示的Facebook對話,在瀏覽器自動頁面登錄秀,並立即消失。因爲使用previos數據發生登錄。當我在facebook.java: 禁用中startDialogAuth cookies。

private void startDialogAuth(Activity activity, String[] permissions) { 
    Bundle params = new Bundle(); 

    if (permissions.length > 0) { 
     params.putString("scope", TextUtils.join(",", permissions)); 
    } 
    //  CookieSyncManager.createInstance(activity); 
    Util.clearCookies(activity); 

    dialog(activity, LOGIN, params, new DialogListener() { 

     public void onComplete(Bundle values) { 
      // ensure any cookies set by the dialog are saved 
      //    CookieSyncManager.getInstance().sync(); 
      setAccessToken(values.getString(TOKEN)); 
      setAccessExpiresIn(values.getString(EXPIRES)); 
      if (isSessionValid()) { 
       Tracks.itTrack(Tracks.Dev, "Facebook-authorize. Login Success! access_token=%s expires=%s", getAccessToken(), getAccessExpires()); 
       mAuthDialogListener.onComplete(values); 
      } 
      else 
       mAuthDialogListener.onFacebookError(new FacebookError("Failed to receive access token.")); 
     } 

     public void onError(DialogError error) { 
      Tracks.itTrack(Tracks.Dev, "Facebook-authorize. Login failed: %s", error); 
      mAuthDialogListener.onError(error); 
     } 

     public void onFacebookError(FacebookError error) { 
      Tracks.itTrack(Tracks.Dev, "Facebook-authorize. Login failed: %s", error); 
      mAuthDialogListener.onFacebookError(error); 
     } 

     public void onCancel() { 
      Tracks.itTrack(Tracks.Dev, "Facebook-authorize. Login canceled"); 
      mAuthDialogListener.onCancel(); 
     } 
    }); 
} 
+0

寫帖子時,Torid在我之前:) – 2012-01-06 22:37:35