2012-01-06 3 views
5

Я пытаюсь использовать Android Facebook SDK - но не повезло. Проблема заключается в том, что окно входа в систему Facebook начинает загружаться, но прежде чем что-либо произойдет, оно исчезнет. Это поведение на самом устройстве, на эмуляторе все хорошо.Android - facebook sdk Окно входа в систему исчезло

То, что я сделал:

  1. загружал SDk от here
  2. добавили 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 :)

EDIT: Кажется, добавив следующие строки кода к деятельности решить эту проблему:

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

Got если здесь: SO Question

+0

в проекте библиотеки com.facebook.android, замените все операторы log.d() на log.i(), даже я столкнулся с такой проблемой при тестировании на устройстве, исчезновение экрана входа в систему может быть вызвано по многим причинам, я столкнулся с этим из-за SSLException из-за слишком устаревшей даты устройства. –

ответ

0

Вы можете поставить некоторые отладочные сообщения (log.v()) в каждом из событий диалогового окна Facebook (onComplete, onFacebookError, onError, onCancel). У меня такая же проблема; хотя моя проблема была связана с ключевым хешем, у меня был неправильный keyhash. Если keytool не запрашивает пароль, он дает неверный ключ. С неправильным keyhash я получил то же поведение, что и вы.

Другое дело, что вы уже вошли в систему Facebook на своем устройстве. Поэтому вам не нужно запрашивать ваше разрешение. Если это так, выйдите из Facebook, а затем запустите приложение.

+0

Я добавил сообщения ко всем событиям диалогового окна Facebook, но ни один из них не отображается. Кажется, последняя строка соответствующего кода: facebook.authorize (это, РАЗРЕШЕНИЯ, новый LoginDialogListener()); –

3

Эта ошибка logcat из com.facebook.katana приведена в приложении для Android Facebook. Это установлено на телефоне? Похоже, что это так, и вы по умолчанию используете Single Sign On (SSO)? Попробуйте сделать свой Авторизовать, как

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

, который позволяет избежать SSO и заставляет диалоговый вход. Если это обходит ваш краш, то наиболее вероятной причиной является несоответствие между SDK и установленным приложением Facebook. Они, как правило, довольно разборчивы в совместной работе. Если это так, вам, вероятно, придется попробовать несколько разных версий каждого, прежде чем найти стабильную пару.

+0

отличное решение. В моем приложении это работает отлично. Большое спасибо Troid! –

1

Вы уже установили на устройство собственное приложение facebook? Потому что com.facebook.katana - это из приложения facebook. Это может произойти, потому что уже auth этим приложением. Что я делаю? Я комментариев в 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 шоу и в браузере автоматически странице входа в шоу и сразу же исчезает. Потому что произошел логин с предшествующими данными. Когда я в facebook.java: отключить в startDialogAuth cookie.

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

Написав пост, Торид опередил меня :) –

Смежные вопросы