2013-07-25 1 views
10

У меня есть простой вход в facebook. Для Android 2.3.6 все работает так, как должно, пользователь получает приглашение для входа в систему, вводит данные и приложение. Я думал, что это ошибка версии для Android, но это говорит о том, что логин не работает, когда на телефоне установлено приложение facebook!Android facebook login не работает с установленным приложением Facebook

Испытано это на: Galaxy Ace 2.3.6 HTC Desire 4.1.2 Galaxy Note 4.1.2 эмуляторе Android 4.1.2

Даже образцы Facebook не работают!

Каждый раз, когда приложение выполняет -

Похоже сессии не открыта, но почему? Вслед за этим руководство - https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/

Код:

Session.openActiveSession(this, true, new Session.StatusCallback() { 

     @Override 
     public void call(final Session session, SessionState state, Exception exception) { 

      if (session.isOpened()) { 

       Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { 

        @Override 
        public void onCompleted(GraphUser user, Response response) { 
         if (user != null) { 
          Log.d("Access_token", session.getAccessToken()); 
         } 
        } 
       }); 
      } else { 
       Log.d("SESSION NOT OPENED", "SESSION NOT OPENED"); 
      } 
     } 
    }); 
+0

Почему 'Session session' финал? – BLaZuRE

+2

Чтобы я мог получить, например, токен доступа пользователя к методу onComplete! – Karlis

+0

Эй, вы отключили режим «Песочница» на основной вкладке информации вашего приложения на странице разработчика facebook? –

ответ

5

Отъезд в нижней части шага 4: https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/

Если вы не ввели ваше приложение ключа хэша правильно, Facebook вход через WebView всплывающего окна (если приложение не установлено) все еще будет работать, но вход через родного приложения Facebook не будет.

Вы должны увидеть это исключение в LogCat:

com.facebook.http.protocol.ApiException: remote_app_id does not match stored id 

The Facebook SDK печатает его исключения так что проверить в любом случае, если есть и другие проблемы.

+0

Пробовал это. Я получаю окно для установки разрешений, но ничего не отображается в LogCat, и пользователь не зарегистрирован в – Karlis

+1

На самом деле это была проблема. Но Eclipse LogCat не показывал никаких erros, но когда я запустил logbat adb в терминале, он показал ошибку, и оказалось, что я скопировал без одного символа! – Karlis

+0

спас мне жизнь спасибо.! –

-1

enter image description here

Отключить изолированном режиме ... Это позволит вашему приложению работать на всех устройствах. Попробуйте это решение

+1

У меня отключен режим песочницы! – Karlis

+0

Режим Sandbox не ограничивает устройства, которые могут запускать приложение, он ограничивает только **, кто может использовать его. –

2

Похоже, что я не смог получить данные, если бы у меня была активная сессия facebook (из приложения facebook).

Итак, перед тем, как открыть сеанс, я прошу ввести авторизацию, даже если у пользователя есть открытая сессия facebook из приложения facebook.

openRequest.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO); 

Итак, теперь все работает, но пользователь должен вводить данные вручную. Это не идеально, но оно работает.

Даже образцы facebook не работали для меня при открытии приложения facebook.

Если у кого-то есть лучшее решение, не стесняйтесь предлагать.

0

Если хэш-ключ не правильно порожден, то вы можете столкнуться с проблемами, как

отображается Уроженец Логин Dialog, но после принятия разрешения всплывающего окна выходит из и ничего не происходит в логе кошке

Но Войти и доля будет работать нормально, если родное приложение на устройстве отключено (входной диалог открывается в веб-представлении в этом случае, и для этого не нужен правильный хеш-ключ)

У меня была такая же проблема, и я решил эту проблему, получив хэш-ключ, используя этот код ,Хеш ключ был отличным от генерируется с использованием OpenSSL и Keytool

и после обновления этот хэш-ключ в Facebook приложение все работает отлично

//================================== To Get Facebook Hash key Programmatically =========================// 
    PackageInfo info; 

    try { 
      info = activity.getPackageManager().getPackageInfo("com.checkmyplanner", PackageManager.GET_SIGNATURES); 
      for (Signature signature : info.signatures) { 
       MessageDigest md; 
       md = MessageDigest.getInstance("SHA"); 
       md.update(signature.toByteArray()); 
       String something = new String(Base64.encode(md.digest(), 0)); 
       //String something = new String(Base64.encodeBytes(md.digest())); 
       Log.e("hash key", something); 
      } 
     } catch (NameNotFoundException e1) { 
      Log.e("name not found", e1.toString()); 
     } catch (NoSuchAlgorithmException e) { 
      Log.e("no such an algorithm", e.toString()); 
     } catch (Exception e) { 
      Log.e("exception", e.toString()); 
     } 

Просто измените имя пакета и получить надлежащий хэш ключ

3

живите хэш-ключ, используя эту функцию для обоих (отладки и выпуска APK) и поместить его в ваше приложение в developer.facebook.com/apps

private void calculateHashKey(String yourPackageName) { 
    try { 
     PackageInfo info = getPackageManager().getPackageInfo(
       yourPackageName, 
       PackageManager.GET_SIGNATURES); 
     for (Signature signature : info.signatures) { 
      MessageDigest md = MessageDigest.getInstance("SHA"); 
      md.update(signature.toByteArray()); 
      Log.d("KeyHash:", 
        Base64.encodeToString(md.digest(), Base64.DEFAULT)); 
     } 
    } catch (NameNotFoundException e) { 
     e.printStackTrace(); 
    } catch (NoSuchAlgorithmException e) { 
     e.printStackTrace(); 
    } 
} 

это поможет мне много .. Надеюсь, что это поможет вам тоже ..

6

я сочинительство этот ответ для тех, кто использует Facebook SDK 4.X

вы можете открыть для входа в портал Facebook в одном из двух способов:

  1. , если у вас есть устройство Android с Android 1.9.X и Facebook App установлен в устройстве, называемом Native Login Метод здесь, вам не нужно использовать facebook WebView

  2. , если вы не установили Facebook App в вашем Android устройства, то это хорошо, чтобы использовать WebView

так для этого Facebook обеспечивают 3 Constants

  1. NATIVE_ONLY (используется, когда вы хотите открыть только в Facebook App)
  2. WEB_ONLY (используется, если вы хотите открыть в WebView только)
  3. NATIVE_WITH_FALLBACK (рекомендуется Facebook обнаружить и opneесли приложение не установлено)

Проверить ссылку ниже для деталей https://developers.facebook.com/docs/reference/android/current/class/LoginButton/ https://developers.facebook.com/docs/facebook-login/android/v2.2#troubleshooting

 LoginButton.setLoginBehavior(LoginBehavior.NATIVE_WITH_FALLBACK); 
    LoginButton.setLoginBehavior(LoginBehavior.NATIVE_ONLY); 
    LoginButton.setLoginBehavior(LoginBehavior.WEB_ONLY); 

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

  • Нет связанных вопросов^_^