Firebase nicht unterstützt, dass aber Sie können das auf diese Weise tun:
Zuerst benötigten Sie client_id und client_secret.
Sie können diese beiden von Firebase Panel durch folgende Schritte erhalten:
Authentifizierung >>SIGN-IN VERFAHREN. Klicken Sie auf Google und erweitern Sie Web SDK-Konfiguration.
Gradle Abhängigkeiten:
compile 'com.google.apis:google-api-services-people:v1-rev63-1.22.0'
Fügen Sie die folgenden Methoden in Ihrem Login-Aktivität.
private void setupGoogleAdditionalDetailsLogin() {
// Configure sign-in to request the user's ID, email address, and basic profile. ID and
// basic profile are included in DEFAULT_SIGN_IN.
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.requestIdToken(GOOGLE_CLIENT_ID)
.requestServerAuthCode(GOOGLE_CLIENT_ID)
.requestScopes(new Scope("profile"))
.build();
// Build a GoogleApiClient with access to GoogleSignIn.API and the options above.
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this, new GoogleApiClient.OnConnectionFailedListener() {
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
Log.d(TAG, "onConnectionFailed: ");
}
})
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
}
public void googleAdditionalDetailsResult(Intent data) {
Log.d(TAG, "googleAdditionalDetailsResult: ");
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (result.isSuccess()) {
// Signed in successfully
GoogleSignInAccount acct = result.getSignInAccount();
// execute AsyncTask to get data from Google People API
new GoogleAdditionalDetailsTask().execute(acct);
} else {
Log.d(TAG, "googleAdditionalDetailsResult: fail");
startHomeActivity();
}
}
private void startGoogleAdditionalRequest() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_GOOGLE);
}
Async Aufgabe zusätzliche Details
public class GoogleAdditionalDetailsTask extends AsyncTask<GoogleSignInAccount, Void, Person> {
@Override
protected Person doInBackground(GoogleSignInAccount... googleSignInAccounts) {
Person profile = null;
try {
HttpTransport httpTransport = new NetHttpTransport();
JacksonFactory jsonFactory = JacksonFactory.getDefaultInstance();
//Redirect URL for web based applications.
// Can be empty too.
String redirectUrl = "urn:ietf:wg:oauth:2.0:oob";
// Exchange auth code for access token
GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest(
httpTransport,
jsonFactory,
GOOGLE_CLIENT_ID,
GOOGLE_CLIENT_SECRET,
googleSignInAccounts[0].getServerAuthCode(),
redirectUrl
).execute();
GoogleCredential credential = new GoogleCredential.Builder()
.setClientSecrets(GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET)
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.build();
credential.setFromTokenResponse(tokenResponse);
People peopleService = new People.Builder(httpTransport, jsonFactory, credential)
.setApplicationName(App.getInstance().getString(R.string.app_name))
.build();
// Get the user's profile
profile = peopleService.people().get("people/me").execute();
} catch (IOException e) {
Log.d(TAG, "doInBackground: " + e.getMessage());
e.printStackTrace();
}
return profile;
}
@Override
protected void onPostExecute(Person person) {
if (person != null) {
if (person.getGenders() != null && person.getGenders().size() > 0) {
profileGender = person.getGenders().get(0).getValue();
}
if (person.getBirthdays() != null && person.getBirthdays().get(0).size() > 0) {
// yyyy-MM-dd
Date dobDate = person.getBirthdays().get(0).getDate();
if (dobDate.getYear() != null) {
profileBirthday = dobDate.getYear() + "-" + dobDate.getMonth() + "-" + dobDate.getDay();
profileYearOfBirth = DateHelper.getYearFromGoogleDate(profileBirthday);
}
}
if (person.getBiographies() != null && person.getBiographies().size() > 0) {
profileAbout = person.getBiographies().get(0).getValue();
}
if (person.getCoverPhotos() != null && person.getCoverPhotos().size() > 0) {
profileCover = person.getCoverPhotos().get(0).getUrl();
}
Log.d(TAG, String.format("googleOnComplete: gender: %s, birthday: %s, about: %s, cover: %s", profileGender, profileBirthday, profileAbout, profileCover));
}
startHomeActivity();
}
}
ändern erhalten Sie dieses mögen onActivityResult:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_GOOGLE) { // result for addition details request
googleAdditionalDetailsResult(data);
return;
} else if (requestCode == RC_SIGN_IN && resultCode == RESULT_OK) { //logged in with firebase
if (FirebaseAuth.getInstance().getCurrentUser().getProviders().get(0).equals("google.com")) {
// user logged in with google account using firebase ui
startGoogleAdditionalRequest();
} else {
// user logged in with google
startHomeActivity();
}
} else {
// handle error
}
}
Update: wenn gibt Codefehler
p ersonFields Maske erforderlich
dann folgenden Code verwenden:
profile = peopleService.people().get("people/me"). setRequestMaskIncludeField("person.names,person.emailAddresses,person.genders,person.birthdays").execute();
Dank @AbrahamGharyali.
Danke. Gut erklärt und es funktioniert perfekt. – William
Dieser Code gibt den Fehler personFields Maske erforderlich ist. Ich habe es so gemacht. ich hoffe es hilft. '// Erhalte das Profil des Benutzers profile = peopleService.people(). Get (" people/me "). setRequestMaskIncludeField ("person.names, person.emailAddresses, person.guters, person.geburtstags"). Execute(); ' –
@AbrahamGharyali danke für den Vorschlag, dass ich es aktualisieren werde. – Sabeeh