[英]how to get email id from facebook sdk in android applications?
我在我的Android應用程序中集成了Facebook登錄。 我想獲取登錄用戶的電子郵件ID。 我怎么得到它?
private void loginToFacebook() {
Session.openActiveSession(this, true, new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
if (session.isOpened()) {
Log.i(TAG, "Access Token" + session.getAccessToken());
Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
if (user != null) {
try {
userID =user.getId();
provider="facebook";
userName=user.getUsername();
firstName=user.getFirstName();
lastName=user.getLastName();
Log.d("****User****", "details:" + user);
}catch(Exception e){
這是我的代碼。 我使用Request.GraphUserCallback()
方法,但此方法沒有電子郵件的響應。
在調用Session.openActiveSession
之前,請執行此操作以獲取權限添加:
List<String> permissions = new ArrayList<String>();
permissions.add("email");
Session.openActiveSession()
的最后一個參數應該是permissions
。 現在您可以訪問user.getProperty("email").toString()
。
編輯:
這是我正在進行Facebook授權的方式:
List<String> permissions = new ArrayList<String>();
permissions.add("email");
loginProgress.setVisibility(View.VISIBLE);
//start Facebook session
openActiveSession(this, true, new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
if (session.isOpened()) {
//make request to the /me API
Log.e("sessionopened", "true");
Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
if (user != null) {
String firstName = user.getFirstName();
String lastName = user.getLastName();
String id = user.getId();
String email = user.getProperty("email").toString();
Log.e("facebookid", id);
Log.e("firstName", firstName);
Log.e("lastName", lastName);
Log.e("email", email);
}
}
});
}
}
}, permissions);
將此方法添加到您的活動中:
private static Session openActiveSession(Activity activity, boolean allowLoginUI, Session.StatusCallback callback, List<String> permissions) {
Session.OpenRequest openRequest = new Session.OpenRequest(activity).setPermissions(permissions).setCallback(callback);
Session session = new Session.Builder(activity).build();
if (SessionState.CREATED_TOKEN_LOADED.equals(session.getState()) || allowLoginUI) {
Session.setActiveSession(session);
session.openForRead(openRequest);
return session;
}
return null;
}
根據Egor N的建議,我改變了我的舊代碼
Session.openActiveSession(this, true, statusCallback);
這個新的:
List<String> permissions = new ArrayList<String>();
permissions.add("email");
Session.openActiveSession(this, true, permissions, statusCallback);
現在FB詢問用戶有關電子郵件的許可,我可以在回復中閱讀。
試試這篇文章。 希望您的問題能夠得到解決點擊此處
順便說一下,你需要使用user.asMap().get("email").toString());
用於接收用戶電子郵件ID。 此外,您需要將其分配到某些標簽,如lblEmail.setText
,其中lblEmail是Textview。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.