it-swarm.com.de

Wie verlinke ich in Google + angemeldete Nutzer im Parse-Backend auf Android?

Ich verwende Parse seit 3 ​​Monaten in meiner Android-App. Jetzt möchte ich der App E-Mail-Anmeldungen und soziale Anmeldungen (Facebook und Google+) hinzufügen. Ich habe erfolgreich E-Mail- und FB-Login hinzugefügt und der Benutzer kann beide oder eine der E-Mail- oder Facebook-Verbindungen herstellen und die App würde den Benutzer erkennen.

z.B. Wenn ich mich per E-Mail anmelde, dann Facebook verbinde, die App auf einem anderen Gerät verwende, mich über Facebook anmelde, würde die App wissen, dass es sich um denselben Benutzer handelt, für mich angepasst sein und meine Daten anzeigen. Und E-Mail funktioniert auch.

Ich habe Google+ Login für Android hinzugefügt aber ich kann die Google+ Anmeldeinformationen des Benutzers nicht mit dem angemeldeten Benutzer verbinden.

Die Parse Users-Tabelle enthält ein authData-Feld, das die Facebook-Authentifizierungsdaten abruft und Twitter sowie beide dieser Anmeldungen in Parse SDKs enthält.

Was sollte das Beste für Google+ sein? Ich bin verwirrt über das Design der Datenbank sowie darüber, wie ich den Benutzer, der sich bei Google+ angemeldet hat, verbinden kann.

Was ist, wenn sich der Benutzer nur über Google+ anmeldet? Wie erstelle ich einen Parse-Benutzer und authentifiziere den Benutzer bei Parse?

Ich bin mit Cloud-Code und Android vertraut und würde mich sehr über Hilfe/Anweisungen freuen, die mich in die richtige Richtung lenken. Ich habe OAuth2 noch nie verwendet und mit Parse-Login für E-Mail- und Social-Sign-Ons sollte ich mich nicht darauf einlassen. Aber lass es mich wissen, wenn ich falsch liege.

Vielen Dank!

Update : Ich habe viele Fragen zu Parse Questions gelesen und die Methode become oft überprüft (weil ich immer dachte, dass mir etwas fehlt, nachdem ich das gelesen habe). Überprüfen Sie diese Frage - ich bin derzeit in der gleichen Situation .

Ich habe:
1. Google+ Anmeldung implementiert.
2. Erhielt Zugriffstoken mit GoogltAuthUtil.

Festhalten an:
3. Wie kann ich einen in Parse angemeldeten Benutzer verlinken, nachdem sich der Benutzer bei Google+ angemeldet hat?
4. Wie erstelle ich einen neuen Parse-Benutzer, wenn Google+ die erste (und einzige) Anmeldewahl des Benutzers war?

22
Rahul Sainani

Dies scheint ähnlich zu sein mit Wie erstellt man ein _ _ _ _ _ _ _ _ _ _ _ _ _ _ Benutzerkonto von Google für Android?

Folgendes ist meine Antwort in diesem Thread:


1. Neuer Benutzer

Der Fluss ist wie folgt:

  1. Der Benutzer autorisiert und ein Token wird erworben
  2. Wir erstellen einen neuen Benutzer mit einem zufälligen Passwort

Sie können einen ParseUser mit folgendem Code innerhalb der newChooseAccountIntent()-Methode erstellen, die E-Mails zurückgibt. 

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. Rückgabe des Benutzers

Dies ist der Ort, an dem die meisten Leute feststeckten, als ich über das Internet recherchierte. Der Fluss ist wie folgt:

  1. Benutzer autorisiert und die App erhält ein Token
  2. Wir übergeben dieses Token zur Überprüfung an Cloud Code. Wir müssen prüfen, ob dieses Token von Google signiert ist und ob es für uns bestimmt ist ( Android-Entwickler (2013)).
  3. Nachdem Sie überprüft haben, ob das Token gültig ist, können Sie den Benutzer in Cloud Code mit der Parse.Cloud.useMasterKey()-Methode abfragen und den Sitzungsschlüssel mit der getSessionToken()-Methode für das Abfrageergebnis zurückgeben.
  4. Verwenden Sie den Sitzungsschlüssel, um den Anmeldestatus auf der Festplatte zu speichern, indem Sie die becomeInBackground-Methode aufrufen

Zur Überprüfung des Tokens können Sie Parse.Cloud.httprequest an diesen Endpunkt senden: https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=. Dies ist in Google Identity Documentation angegeben. Sie erhalten Daten wie folgt:

{
 "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"
}

Zu vergleichen sind "aud", "azp" und "email", die als Publikum, autorisierte Partei und Email übersetzt werden.

Abfrage des aktuellen Benutzers in Cloud Code :

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
});

Hinweis: Stellen Sie sicher, dass Sie über den folgenden Bereich verfügen, damit die E-Mail angezeigt wird, wenn Sie den Cloud-Code überprüfen: https://www.googleapis.com/auth/plus.profile.emails.read

7
Ralphilius

Dazu gibt es eine Frage zu den Fragen von Parse. Es ist genau hier und ich bin mir ziemlich sicher, dass es Ihre Fragen beantwortet.

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

Es enthält einen Link zum Parse-Blog, der einige Problemumgehungen enthält.

Es sagt, dass Sie jeden Login in ParseUser hinzufügen können. Sie würden so etwas tun: 

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.
});

Eine andere Website, auf der Sie einen Blick darauf werfen sollten: https://parse.com/tutorials/adding-third-party-authentication-to-your-web-app

Der letzte ist offiziell und hat einen Beispielcode

3
cristianorbs
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.
                }
            }
        });
    }
1
Arun Shankar

Dafür habe ich folgenden Code verwendet 

  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");
                        }
                    }
                });

Lassen Sie mich wissen, ob es hilft oder wenn Sie etwas anderes verwendet haben.

1
Akshay

Versuche dies

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.
                 }
}

})

0
Aditya