Festlegen von Berechtigungen für die erste Benutzer-E-Mail-ID von Facebook Login
Ich bin mit Facebook 3.0 SDK
für android. Ich habe zu implementieren Facebook
log-in. Ich bin auf Benutzer-grundlegende Infos wie name, Benutzer-id. Aber ich will Zugang zu E-Mail auch von dem Benutzer. Ich habe schon viele blogs und forum, aber kann nicht herausfinden, wie das zu tun.
Ich bin mit meinem eigenen android-button für den log-in nicht com.facebook.widget.LoginButton
. Wenn ich Facebook
log-in-button, war es einfach nur verwenden Sie diese Zeilen:
authButton.setReadPermissions(Arrays.asList("basic_info","email"));
Aber, ich habe meine eigene Anforderung, wird mit der Standard-android-Tasten. Hier ist, was ich bisher getan habe:
Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(
this, Arrays.asList("email"));
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mLogin = (Button) findViewById(R.id.logIn);
mLogin.setOnClickListener(this);
}
@Override
public void onClick(View v) {
//start Facebook Login
Session.openActiveSession(this, true, new Session.StatusCallback() {
//callback when session changes state
@Override
public void call(final Session session, SessionState state,
Exception exception) {
if (session.isOpened()) {
session.requestNewReadPermissions(newPermissionsRequest);
//make request to the /me API
Request.executeMeRequestAsync(session,
new Request.GraphUserCallback() {
//callback after Graph API response with user
//object
@Override
public void onCompleted(GraphUser user,
Response response) {
if (user != null) {
System.out
.println("Facebook Response: "
+ response.toString());
access_token = session.getAccessToken();
firstName = user.getFirstName();
fb_user_id = user.getId();
System.out
.println("Facebook Access token: "
+ access_token);
System.out.println("First Name:"
+ firstName);
System.out.println("FB USER ID: "
+ fb_user_id);
}
}
});
}
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode,
resultCode, data);
}
Ich bin in der Lage, alle diese Dinge, die ich Druck mache im log, aber war nicht in der Lage zum abrufen von E-Mail aus der Benutzer-Profil.
Was kann ich tun?
Jede Art von Hilfe wird geschätzt.
Ja, wie du vorgeschlagen habe ich Hinzugefügt, E-Mail, in der Zustimmung im Benutzer - & Freund Berechtigungen. Aber kein Glück bis jetzt.
Hallo, haben einen Blick auf dieses Thema: stackoverflow.com/questions/30389180/...
InformationsquelleAutor Anupam | 2013-05-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gelöst: Hier ist was ich getan habe...
Nun bin ich in der Lage, um E-Mail-Berechtigung mit der rest der veröffentlichen Berechtigung.
Markieren diese als akzeptierte Antwort so, dass es anderen helfen kann.
authButton.setReadPermissions(Arrays.asList("email"));
und dann versucht, Zugriff auf die E-Mail wie dieseuser.asMap().get("email")
aber es gibt immernull
.Wo müssen wir um FacebookAppId in diesem Beispiel?
In values/strings.xml als
appId
vielen Dank für die Lösung
Endlich, ich bin immer in der Benutzer E-Mail mit diesem code, danke. Aber Verlangen.executeMeRequestAsync() veraltet ist, sollten Sie anrufen Anfrage.newMeRequest().executeAsync() statt, obwohl es führt den gleichen code.
InformationsquelleAutor Anupam
TL; DR: so verwenden Sie die E-Mail:
Habe ich einen Kommentar über Ihren code. Da "E-Mail" ist eine lese-Berechtigung, die Sie nicht benötigen, erstellen Sie eine separate Genehmigung beantragen, um es zu bekommen. Sie können so etwas wie dies tun (code ungetestet, so könnte es leichte Fehler):
und Sie können loszuwerden, die neue Erlaubnis beantragen in Ihren Rückruf.
MainActivity
?String email = (String) user.getProperty("email");
ist mir null Reaktion.Sie können diese in jeder Aktivität.
Wie Sie sehen können ich bin Eröffnung am
onClick()
, so dass ich benötigen, um Ihren code darin enthalten ist. Und was wird hierrequest.setCallback( /* your callback here */ );
, was meine callback? Bitte führe mich durch diesen. Es wird sehr hilfreich für mich.Hey Ming, ich habe die erforderliche Berechtigung für die app, aber können Sie mir sagen, warum dies funktioniert nur für
SUPPRESS_SSO
und nicht fürSSO_WITH_FALLBACK
.Funktioniert perfekt. Verwenden Sie einfach die neue Session.StatusCallback(){add unimplemented methods hier} als callback zurück (vorletzte Zeile)
InformationsquelleAutor Ming Li