Подтвердить что ты не робот

Как связать Google +, подписанный с пользователями в Parse backend на Android?

Я использую Parse в течение 3 месяцев в своем приложении для Android. Теперь я хочу добавить адрес электронной почты и социальные значки (Facebook и Google+) в приложении. Я успешно добавил логин электронной почты и fb, и пользователь может подключиться как к одному, так и к электронной почте или facebook, и приложение узнает пользователя.

например. Если я вхожу в систему через электронную почту, тогда подключаю фейсбук, использую приложение на другом устройстве, входите в систему через facebook, приложение будет знать его одним и тем же пользователем и будет настроено для меня и будет показывать мои данные. И электронная почта также работает.

Я добавил вход в Google+ для Android, но я не могу подключить учетные данные пользователя Google+ с зарегистрированным пользователем.

Таблица Parse Users имеет поле authData, которое получает данные аутентификации facebook и будет получать Twitter, а оба этих знака запекаются в Parse SDK.

Что лучше всего делать в Google+? Я запутался в дизайне db, а также о том, как подключить пользователя, который подписался с Google +?

Что делать, если пользователь просто входит в систему через Google+? Как создать пользователь Parse и аутентифицировать пользователя в Parse?

Мне нравится облачный код и Android, и я бы очень хотел, чтобы какая-то помощь/инструкции просто подталкивали меня в правильном направлении. Я никогда не пользовался OAuth2 и с логином Parse для электронной почты и Social Sign ons, я не думаю, что мне нужно это сделать. Но дайте мне знать, если я ошибаюсь.

Спасибо!

Обновление. Я прочитал много вопросов по вопросам Parse Questions и много раз проверял метод старта (потому что я продолжал думать, что я что-то пропустил после прочтения). Отметьте этот вопрос - сейчас я в той же ситуации.

У меня есть:
1. Внедрение входа в Google+.
2. Получил токен доступа, используя GoogltAuthUtil.

Застрял с:
3. Как связать подписанный в настоящее время пользователь Parse после входа пользователя в Google+?
4. Как создать нового пользователя Parse, если Google+ был первым (и единственным) пользователем выбора входа?

4b9b3361

Ответ 1

Это похоже на Как создать учетную запись parse _User из токена Google Android?

Вот мой ответ в этом потоке:


1. Новый пользователь

Поток выглядит следующим образом:

  • Пользователь разрешает и получает токен
  • Мы создаем нового пользователя со случайным паролем

Вы можете создать ParseUser, используя следующий код внутри метода newChooseAccountIntent(), который возвращает электронную почту.

ParseUser user = new ParseUser();
user.setUsername(mEmail);
user.setPassword(randomPassword);
user.setEmail(mEmail);
user.signUpInBackground(new SignUpCallback() {
  public void done(ParseException e) {
    if (e == null) {
      // Hooray! Let them use the app now.
    } else {
      // Sign up didn't succeed. Look at the ParseException
      // to figure out what went wrong
    }
  }
});

2. Возвращаемый пользователь

Это то место, где большинство людей застревают, как я исследовал через Интернет. Поток выглядит следующим образом:

  • Пользователь разрешает и приложение получает токен
  • Мы передаем этот токен в Cloud Code для проверки. Нам нужно проверить, подписан ли этот токен Google и если он предназначен для нас (android-developers (2013)).
  • После того, как вы можете проверить, что токен действителен, вы можете запросить пользователя в облачном коде с помощью метода Parse.Cloud.useMasterKey() и вернуть ключ сеанса с помощью метода getSessionToken() в результате запроса.
  • Используйте ключ сеанса для сохранения состояния входа на диск, вызывая метод becomeInBackground

Чтобы проверить токен, вы можете отправить Parse.Cloud.httprequest в эту конечную точку: https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=. Это указано в Документация по идентификационной информации Google. Вы получите следующие данные:

{
 "iss": "https://accounts.google.com",
 "sub": "110169484474386276334",
 "azp": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
 "email": "[email protected]",
 "at_hash": "X_B3Z3Fi4udZ2mf75RWo3w",
 "email_verified": "true",
 "aud": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
 "iat": "1433978353",
 "exp": "1433981953"
}

Необходимо сравнить "aud", "azp" и "email", которые переводится как аудитория, авторизованная сторона и электронная почта.

Запрос текущего пользователя в облачном коде:

var query = new Parse.Query(Parse.User);
query.equalTo("email",mEmail);
query.first({
  success: function(user) {
    // Use user..getSessionToken() to get a session token
  },
  error: function(user, error) {
    //
  },
  useMasterKey: true
});

Примечание.. Удостоверьтесь, что у вас есть следующая область действия, чтобы сообщение появлялось при проверке Cloud Code: https://www.googleapis.com/auth/plus.profile.emails.read

Ответ 2

Есть вопрос об этом на вопросах Parse. Это прямо здесь, и я уверен, что он отвечает на ваши вопросы.

https://parse.com/questions/google-plus

Он ссылается на блог синтаксического анализа, который имеет некоторые обходные пути.

В нем говорится, что вы можете добавить любой логин в ParseUser. Вы бы делали что-то вроде этого:

Parse.User.become("session-token-here").then(function (user) {
// The current user is now set to user.
}, function (error) {
// The token could not be validated.
});

Еще один сайт, на котором вы должны посмотреть: https://parse.com/tutorials/adding-third-party-authentication-to-your-web-app

Этот последний является официальным и имеет пример кода

Ответ 3

void createNewGPlusUser(final String email, String name) {
        final ParseUser user = new ParseUser();
        user.setUsername(email);
        user.setPassword("my pass");
        user.put("any other variable in User class", "value");
        user.setEmail(email);
        user.put("name", name);
        signInParseUser(user, email);
    }

void signInParseUser(final ParseUser user, final String email) {

        user.signUpInBackground(new SignUpCallback() {
            public void done(ParseException e) {
                if (e == null) {
                    Log.d("TAG", "Created user");
                    // Hooray! Let them use the app now.
                    login(email);
                } else {
                    Log.d("TAG", "Failed Creating user");
                    e.printStackTrace();
                    // Sign up didn't succeed. Look at the ParseException
                    // to figure out what went wrong
                }
            }
        });
    }

void login(final String email) {
        ParseUser.logInInBackground(email, "my pass", new LogInCallback() {
            public void done(ParseUser user, ParseException e) {
                if (user != null) {
                    // Hooray! The user is logged in.
                    Log.d("TAG", "Login successful");
                                    } else {
                                        // Signup failed. Look at the ParseException to see what happened.
                }
            }
        });
    }

Ответ 4

Для этого я использовал следующий код

  ParseUser.becomeInBackground(ParseUser.getCurrentUser().getSessionToken(), new LogInCallback() {
                    @Override
                    public void done(ParseUser parseUser, ParseException e) {
                        if (parseUser != null) {
                            parseUser.setUsername(userEmail);
//firstName and lastName I am getting from Person class of google plus api
                            parseUser.put("FirstName", firstName);
                            parseUser.put("LastName", lastName);

                            parseUser.saveInBackground();

                            ParseUtils.verifyParseConfiguration(context);
                            ParseUtils.subscribeWithUsername(strEmail);
                            Intent successIntent = new Intent(context, OurServicesActivity.class);
                            startActivity(successIntent);
                            overridePendingTransition(R.animator.fade_in, R.animator.fade_out);
                            finish();
                        } else {
                            Log.e(TAG, e.getMessage());
                            Utilities.showToast(context, "Something occurred");
                        }
                    }
                });

Дайте мне знать, если это поможет или вы использовали что-то еще.

Ответ 5

Попробуйте это

ParseUser.becomeInBackground("session-token-here", new LogInCallback() {
           public void done(ParseUser user, ParseException e) {
                 if (user != null) {
                 // The current user is now set to user.
                 } else {
                  // The token could not be validated.
                 }
}

})