Проанализировать логин через Facebook api 4.0 в студии android

Мой код.

private void facebook() { List<String> permissions = Arrays.asList("public_profile", "email"); ParseFacebookUtils.logInWithReadPermissionsInBackground(this, permissions, new LogInCallback() { @Override public void done(ParseUser user, ParseException err) { progressDialog.dismiss(); Log.e("Facebook", user + " " + err.getMessage()); if (user == null) { Log.e("MyApp", "Uh oh. The user cancelled the Facebook login."); } else if (user.isNew()) { Log.e("MyApp", "User signed up and logged in through Facebook!"); } else { userinfo(user); Log.e("MyApp", "User logged in through Facebook!"); } } }); } 

Этот код всегда предоставляется пользователю null. Я использую последнюю Facebook SDK

compile 'com.facebook.android:facebook-android-sdk:4.0.1'

И Parse : Parse-1.9.1.jar

И я использую Android Studio . Этот метод является вызовом при нажатии кнопки, этот метод работает, значит всплывающее окно facebook открыто, но всегда предоставляет пользователю значение null. Это задано пользователем, но после обновления parseuser не равен NULL.

Не уверен, но проверьте настройки Хеширования на https://developers.facebook.com для своего приложения. Для запуска и отладки версии, установленной в консоли разработчика приложений, необходимо иметь как ключевые хэши. Возможно, вы только что установили хэш ключа для среды отладки. Дополнительные сведения см. В разделе Установка хэша ключа Release. Надеюсь, поможет.

  ParseFacebookUtils.logInWithReadPermissionsInBackground(this, Arrays.asList("email", "user_photos", "public_profile", "user_friends") , new LogInCallback() { @Override public void done(ParseUser user, ParseException err) { if (user == null) { Toast.makeText(Form.this,"User Already logged up through Twitter!",Toast.LENGTH_LONG).show(); } else if (user.isNew()) { } else { Toast.makeText(Form.this,"User Already logged up through Facebook!",Toast.LENGTH_LONG).show(); } } }); 

Добавьте это также ..

  protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); ParseFacebookUtils.onActivityResult(requestCode, resultCode, data); } 

Этот код работает отлично ..

Это те шаги, которые я выполнил, чтобы выполнить регистрацию / логин / привязку пользователей с ParseUsers в соответствии с документацией Parse и некоторые советы, которые я нашел в Интернете. Пожалуйста, убедитесь, что вы не пропустили ни одного шага, потому что у меня были те же проблемы с вами, и мне пришлось все это повторить:

  • Сначала я пошел на этот сайт и создал новое приложение.
  • Я загрузил SDK для Facebook, я сделал шаги 4 и 5, и я добавил имя своего пакета и имя класса по умолчанию
  • Я добавил ключевые хэши:

Ключ развития:

Cd C: \ Program Files \ Java \ jdk1.8.0_05 \ bin keytool -exportcert -alias androiddebugkey -keystore C: \ Users \ 'YOUR NAME'.android \ debug.keystore | C: \ OpenSSL \ bin \ openssl sha1 -binary | C: \ OpenSSL \ bin \ openssl base64

Ключ Release:

Cd C: \ Program Files \ Java \ jdk1.8.0_05 \ bin keytool -exportcert -alias 'ИМЯ ВЫ ИМЕЕТЕ КАК ALIAS' -keystore | C: \ OpenSSL \ bin \ openssl sha1 -binary | C: \ OpenSSL \ bin \ openssl base64

  • В parse.com внутри настроек и аутентификации я добавил в приложение Facebook приложение APP ID, которое было создано в Facebook.
  • В соответствии с этим я выполнил все шаги до тех пор, пока не выполнил вход или общий доступ (включая это).
  • Я пошел сюда, и я добавил свой хэш-код разработки.
  • В настройках приложения, которое я создал в Facebook, я проверил это в поле «Хэш Хэша», были оба ключа разработки и выпуска.
  • Я использовал учебник из правильного ответа, чтобы сделать мое приложение живым.
  • Я загрузил последнюю версию SDK из Parse ( 1.9.1 ) из QuickStart, потому что 1.8 он не работает.
  • Я добавил новый .jar-файл SDK и ParseFacebookUtilsV4-1.9.1 в папку libs моего проекта и синхронизировал файл build.gradle .
  • Я добавил эту строку в strings.xml :
    <string name="facebook_app_id">1421******</string>

Я добавил это в свой AndroidManifest.xml внутри тега приложения:

 <activity android:name="com.facebook.FacebookActivity" android:configChanges= "keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:label="@string/app_name" /> Размер <activity android:name="com.facebook.FacebookActivity" android:configChanges= "keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:label="@string/app_name" /> 

и это:

 <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/> 

В build.gradle приложения я добавил их внутри андроида из-за некоторых ошибок с Diamond (я сожалею, что не могу вспомнить точную ошибку):

 compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } 

И я изменил версию SDK на номера из-за некоторой ошибки неопределенных переменных:

 minSdkVersion 14 targetSdkVersion 19 

Связанные dependencies внутри одного файла:

 compile fileTree(include: 'Parse-*.jar', dir: 'libs') compile fileTree(include: 'ParseFacebookUtilsV4-*.jar', dir: 'libs') compile 'com.facebook.android:facebook-android-sdk:4.0.0' 

  • В деятельности, в которой я хочу делать все это с помощью facebook, я сделал следующие вещи:

      Parse.initialize(this, "hoMaK", "wWV193mE"); FacebookSdk.sdkInitialize(getApplicationContext()); ParseFacebookUtils.initialize(getApplicationContext()); final List<String> permissions = Arrays.asList("public_profile", "email"); fb.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { proDialog.show(); ParseFacebookUtils.logInWithReadPermissionsInBackground(HomeActivity.this, permissions, new LogInCallback() { @Override public void done(final ParseUser user, ParseException err) { if (user == null) { Log.d("MyApp", "Uh oh. The user cancelled the Facebook login."); Toast.makeText(getApplicationContext(), "Log-out from Facebook and try again please!", Toast.LENGTH_SHORT).show(); ParseUser.logOut(); proDialog.hide(); } else if (user.isNew()) { Log.d("MyApp", "User signed up and logged in through Facebook!"); if (!ParseFacebookUtils.isLinked(user)) { ParseFacebookUtils.linkWithReadPermissionsInBackground(user, HomeActivity.this, permissions, new SaveCallback() { @Override public void done(ParseException ex) { if (ParseFacebookUtils.isLinked(user)) { Log.d("MyApp", "Woohoo, user logged in with Facebook!"); proDialog.hide(); } } }); } else{ Toast.makeText(getApplicationContext(), "You can change your personal data in Settings tab!", Toast.LENGTH_SHORT).show(); } } else { Log.d("MyApp", "User logged in through Facebook!"); if (!ParseFacebookUtils.isLinked(user)) { ParseFacebookUtils.linkWithReadPermissionsInBackground(user, HomeActivity.this, permissions, new SaveCallback() { @Override public void done(ParseException ex) { if (ParseFacebookUtils.isLinked(user)) { Log.d("MyApp", "Woohoo, user logged in with Facebook!"); proDialog.hide(); } } }); } else{ proDialog.hide(); } } } }); } }); 
  • Со всеми вышеперечисленными шагами я могу зарегистрироваться или войти в систему, используя мою учетную запись Facebook, и я получаю новую строку в объекте _User в Parse.com, в котором я могу изменить данные в любое время, когда захочу (я обрабатываю это как обычный знак -up)

Не забудьте инициализировать класс ParseFacebookUtils в вашем классе приложений, как он представлен в документах:

 ParseFacebookUtils.initialize(this); 

Также передайте onActivityResult в ParseFacebookUtils.

 protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); ParseFacebookUtils.onActivityResult(requestCode, resultCode, data); } 

Надеюсь, это поможет ;).

Источник: https://parse.com/docs/android/api/com/parse/ParseFacebookUtils.html

Давай попробуем:

В вашем build.gradle

Удалите эту строку compile fileTree(dir: 'libs', include: ['*.jar']) , затем добавьте следующие:

 compile files('libs/Parse-1.9.1.jar') compile files('libs/ParseFacebookUtilsV4-1.9.1.jar') 

Это отлично работает для меня и в этом случае: D

Вы помещаете деятельность Facebook в свой манифест?

 <activity android:name="com.facebook.FacebookActivity" android:configChanges= "keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:label="@string/app_name" /> Размер <activity android:name="com.facebook.FacebookActivity" android:configChanges= "keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:label="@string/app_name" />