2015-04-01 13 views
8

Tôi đã tích hợp SDK android android mới nhất 4.0. Trong địa chỉ email của người dùng SDK 3.0+ được truy xuất bằng user.getProperty ("email") sau khi đăng nhập thành công. Tôi đang tìm kiếm lệnh tương ứng trong Facebook Android sdk 4.0 Links tham khảo:Tôi cần địa chỉ email của người dùng sau khi đăng nhập facebook thành công trong android bằng cách sử dụng SDK 4.0

https://developers.facebook.com/docs/facebook-login/android/v2.3#overview https://developers.facebook.com/docs/android/upgrading-4.x

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    FacebookSdk.sdkInitialize(getActivity().getApplicationContext()); 
    callbackManager = CallbackManager.Factory.create(); 
} 

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    loginButton = (LoginButton) view.findViewById(R.id.login_button); 
    loginButton.setReadPermissions("email", "user_likes", "user_friends"); 
    loginButton.setFragment(this); 
    setFacebookLoginText(loginButton); 
    // Other app specific specialization 

    // Callback registration 
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      AccessToken accessToken = loginResult.getAccessToken(); 
      GraphRequest request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() { 
       @Override 
       public void onCompleted(JSONObject user, GraphResponse graphResponse) { 

        //Need User email address after login success. 

       } 
      }).executeAsync(); 
     } 

     @Override 
     public void onCancel() { 
      Toast.makeText(getActivity(), "fail", Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onError(FacebookException exception) { 
      Toast.makeText(getActivity(), "error", Toast.LENGTH_SHORT).show(); 
     } 
    }); 

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_facebook_login, container, false); 
    return view; 
} 


@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    callbackManager.onActivityResult(requestCode, resultCode, data); 
} 

Trả lời

13

Vâng nó làm việc. Điều duy nhất được yêu cầu là thay đổi GraphRequest thành GraphRequestAsyncTask trong phương thức onSuccess của FacebookCallBack, và sau đó chi tiết người dùng có thể dễ dàng được lấy từ JSONObject.

 @Override 
     public void onSuccess(LoginResult loginResult) { 
      final AccessToken accessToken = loginResult.getAccessToken(); 
      final FBUser fbUser = new FBUser(); 
      GraphRequestAsyncTask request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() { 
       @Override 
       public void onCompleted(JSONObject user, GraphResponse graphResponse) { 
        fbUser.setEmail(user.optString("email")); 
        fbUser.setName(user.optString("name")); 
        fbUser.setId(user.optString("id")); 
       } 
      }).executeAsync(); 
     } 

FBUser Mẫu Lớp

public class FBUser { 
private String name; 
private String email; 

public FBUser(String displayName, String email) { 
    this.name= displayName; 
    this.email = email; 
} 

public FBUser() { 

} 

public String getName() { 
    return displayName; 
} 

public void setName(String displayName) { 
    this.displayName = displayName; 
} 


public String getEmail() { 
    return email; 
} 

public void setEmail(String email) { 
    this.email = email; 
} 

} 
+0

làm thế nào bạn có thể lưu trữ các đối tượng loại GraphRequest cho một loại tài liệu tham khảo GraphRequestAsyncTask, nó không làm việc –

+0

tôi đang sử dụng nút tùy chỉnh trên nhấp chuột và FacebookManager .. sau khi đăng nhập thành công .. tôi không nhận được ca ;; để điều này onSuccess(). xin vui lòng cho tôi biết cách thích hợp để có được thông tin này. –

+0

yup, hoạt động của nó, nhưng tôi chỉ nhận tên người dùng và id, không nhận được email và ảnh hồ sơ từ nó – NarendraJi

5

Trong đồ thị facebook mới, bạn cần phải hỏi điều khoản để truy cập thông tin. ví dụ về hoạt động các bạn đã đặt LoginButton bạn thêm dòng này trong phương pháp OnCreate

loginButtonFacebook.setReadPermissions(Arrays.asList("public_profile", "email", "user_birthday")); 

Sau đó, bạn nhận được rằng thông tin

loginButtonFacebook.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
@Override 
public void onSuccess(LoginResult loginResult) { 
    GraphRequest.newMeRequest(
     loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { 
      @Override 
      public void onCompleted(JSONObject me, GraphResponse response) { 
       if (response.getError() != null) { 
        // handle error 
       } else { 
        String email = me.optString("email"); 
       } 
      } 
     }).executeAsync(); 
} 
0

Ngoài ra, kiểm tra nếu bạn được phép, nếu không yêu cầu người dùng của bạn một lần nữa:

AccessToken accessToken=AccessToken.getCurrentAccessToken(); 
if (accessToken.getPermissions().contains("email")) { 

} else { 

} 
+0

BTW Tôi nghĩ rằng có một lỗi liên quan đến điều này: https://github.com/ParsePlatform/ParseUI-Android/issues/51 – Ricardo

1

này sẽ cung cấp cho bạn tất cả các thông tin từ facebook sdk 4.0.0

fbloginButton.setReadPermissions ("email");

fbloginButton.registerCallback(callbackmanager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      AccessToken accessToken = loginResult.getAccessToken(); 
      GraphRequest graphRequest=GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() { 
       @Override 
       public void onCompleted(JSONObject object, GraphResponse response) { 

        if (response.getError()!=null) 
        { 
         Log.e(TAG,"Error in Response "+ response); 
        } 
        else 
        { 
         email=object.optString("email"); 
         Log.e(TAG,"Json Object Data "+object+" Email id "+ email); 
        } 


       } 
      }); 

      Bundle bundle=new Bundle(); 
      bundle.putString("fields","id,email,name"); 
      graphRequest.setParameters(bundle); 
      graphRequest.executeAsync(); 

     } 
Các vấn đề liên quan