Проанализировать логин через 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!");
 }
 }
 });
}
</string>

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

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

и Parse: Parse-1.9.1.jar

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

5 ответов

Не уверен, но проверьте настройки Хеширования на 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 "ИМЯ ВЫ ИМЕЕТЕ КАК АЛИАС" -keystore | C:\OpenSSL\bin\openssl sha1 -binary | C:\OpenSSL\bin\openssl base64

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

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

и это:

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

compileOptions {
 sourceCompatibility JavaVersion.VERSION_1_7
 targetCompatibility JavaVersion.VERSION_1_7
}

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

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();
     }
     }
     }
     });
     }
     });
    </string>
  • Со всеми вышеуказанными шагами я могу зарегистрироваться или войти в систему, используя мою учетную запись Facebook, и я получаю новую строку в объекте _User на Parse.com, где я могу изменять данные в любое время, когда хочу (Я обрабатываю его как обычного пользователя регистрации)


Не забудьте инициализировать класс 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 в свой манифест?

licensed under cc by-sa 3.0 with attribution.