অ্যান্ড্রয়েড ফেসবুক 4.0.০ এসডিকে কীভাবে ইমেল পাবেন, জন্ম তারিখ এবং ব্যবহারকারীর লিঙ্গ পাবেন


144

আমি নিম্নলিখিত কোড ব্যবহার করছি। আমি ব্যবহারকারীর জন্ম তারিখ, ইমেল এবং লিঙ্গ চাই। সাহায্য করুন. কীভাবে সেই তথ্যগুলি উদ্ধার করবেন?

এটি আমার onViewCreated()খণ্ডের ভিতরে।

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {

    // Setup TextView.
    mTextDetails = (TextView) view.findViewById(R.id.text_details);

    // Set up Login Button.
    LoginButton mButtonLogin = (LoginButton) view.findViewById(R.id.login_button);
    // setFragment only if you are using it inside a Fragment.
    mButtonLogin.setFragment(this);
    mButtonLogin.setReadPermissions("user_friends");
    mButtonLogin.setReadPermissions("public_profile");
    mButtonLogin.setReadPermissions("email");
    mButtonLogin.setReadPermissions("user_birthday");

    // Register a callback method when Login Button is Clicked.
    mButtonLogin.registerCallback(mCallbackManager, mFacebookCallback);

}

এটি আমার কলব্যাক পদ্ধতি।

private FacebookCallback<LoginResult> mFacebookCallback = new FacebookCallback<LoginResult>() {
    @Override
    public void onSuccess(LoginResult loginResult) {
        Log.d("Shreks Fragment", "onSuccess");


        Profile profile = Profile.getCurrentProfile();
        Log.d("Shreks Fragment onSuccess", "" +profile);

        // Get User Name
        mTextDetails.setText(profile.getName() + "");

    }


    @Override
    public void onCancel() {
        Log.d("Shreks Fragmnt", "onCancel");
    }

    @Override
    public void onError(FacebookException e) {
        Log.d("Shreks Fragment", "onError " + e);
    }
};


হাই, @ শ্রীইঙ্ক দয়া করে আমাকে সহায়তা করুন যদি আপনি আপনার সমস্যাটি সমাধান করেন। আমি লগইন সম্পন্ন হওয়ার পরে ফেসবুক সাইন ইন খণ্ড থেকে ব্যবহারকারী তথ্য পেতে চাই পরবর্তী ক্রিয়াকলাপ যেতে চান দয়া করে আমাকে বলুন আমি কীভাবে এটি করতে পারি?
দেবেন্দ্র সিং

কারণ ইমেল ফাঁকা হতে পারে যদি ব্যবহারকারী তার ফোন নম্বর পরিদর্শন মাধ্যমে লগ ইন থাকলেও নিচের সমাধান কিন্তু সতর্কতা অবলম্বন করা আবশ্যক stackoverflow.com/questions/29517667/... এবং stackoverflow.com/questions/29493486/...
pegaltier

উত্তর:


335

অনুমতিগুলি সেট করার সঠিক উপায় নয় কারণ আপনি প্রতিটি পদ্ধতি কল দিয়ে ওভাররাইট করছেন।

এটি প্রতিস্থাপন করুন:

mButtonLogin.setReadPermissions("user_friends");
mButtonLogin.setReadPermissions("public_profile");
mButtonLogin.setReadPermissions("email");
mButtonLogin.setReadPermissions("user_birthday");

নিম্নলিখিতটি সহ, পদ্ধতিটি যেমন setReadPermissions()একটি অ্যারেলিস্ট গ্রহণ করে:

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

এছাড়াও অতিরিক্ত ডেটা গ্রাফরয়েস্টে কীভাবে জিজ্ঞাসা করা যায় তা এখানে:

private LoginButton loginButton;
private CallbackManager callbackManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    loginButton = (LoginButton) findViewById(R.id.login_button);

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

    callbackManager = CallbackManager.Factory.create();

    // Callback registration
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            // App code
            GraphRequest request = GraphRequest.newMeRequest(
                    loginResult.getAccessToken(),
                    new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(JSONObject object, GraphResponse response) {
                            Log.v("LoginActivity", response.toString());

                            // Application code
                            String email = object.getString("email");
                            String birthday = object.getString("birthday"); // 01/31/1980 format
                        }
                    });
            Bundle parameters = new Bundle();
            parameters.putString("fields", "id,name,email,gender,birthday");
            request.setParameters(parameters);
            request.executeAsync();


        }

        @Override
        public void onCancel() {
            // App code
            Log.v("LoginActivity", "cancel");
        }

        @Override
        public void onError(FacebookException exception) {
            // App code
            Log.v("LoginActivity", exception.getCause().toString());
        }
    });
}

সম্পাদনা করুন:

একটি সম্ভাব্য সমস্যা হ'ল ফেসবুক ধরে নিচ্ছে যে আপনার ইমেলটি অবৈধ। এটি পরীক্ষা করতে, গ্রাফ এপিআই এক্সপ্লোরার ব্যবহার করুন এবং এটি পাওয়ার চেষ্টা করুন। এমনকি যদি আপনি নিজের ইমেলটি না পান তবে এটি আপনার প্রোফাইল সেটিংসে পরিবর্তন করুন এবং আবার চেষ্টা করুন। এই উত্তরটি কিছু বিকাশকারীদের আমার উত্তর মন্তব্য করার জন্য এই সমস্যাটি সমাধান করেছে।


2
আরে @Schwertfisch আপনি কীভাবে অবজেক্ট.সেটস্ট্রিং ("ইমেল") ব্যবহার করবেন তা দেখাতে পারেন; , এটি আমার পক্ষে খুব সহায়ক হবে :)
অজিত

3
আমি ইতিমধ্যে সেট করা সত্ত্বেও কেন আমি "ইমেলের কোনও মূল্য নেই" ত্রুটি পেতে পারি loginButton.setReadPermissions(Arrays.asList("public_profile", "email"));?
stackex

1
@ স্কওয়ার্টফিশ্চ আমার ক্ষেত্রে, আমি এমনকি গ্রাফ এপিআই এক্সপ্লোরার ব্যবহার করে আমার ইমেলটি পেতে পারি না, তাই আমি আমার অ্যাকাউন্টে একটি বিকল্প ইমেল যুক্ত করেছি এবং এটি কার্যকর হয়েছে, সম্ভবত আপনার ইমেলটি অবৈধ।
কায়ান আলমেডা

1
@ দেবেন্দ্রসিংহ আপনি মানগুলি পেয়েছেন এবং এগুলি একটি অতিরিক্ত, ইন্টেন্ট মাইআইন্টেন্ট = নতুন ইনটেন্ট (এটি, সেকেন্ডএকটিভিটি.ক্লাস); মাই ইনটেন্ট.পুটেক্সট্রা ("ইমেল", অবজেক্ট.সেট্রিং ("ইমেল")) এ রেখেছেন .... .... । দ্বিতীয় ক্রিয়াকলাপে বান্ডিল অতিরিক্তগুলি = getIntent ()। GetExtras (); যদি (অতিরিক্ত! = নাল) {ইমেল = এক্সট্রা.সেটস্ট্রিং ("ইমেল"); } এছাড়াও আপনি একটি স্থির পরিবর্তনশীল থাকতে পারে এবং মান নির্ধারণ করতে পারেন। আমার ইংরেজীর জন্য দুঃখিত. আপনি যে উত্তরটি চান তা উত্তর কিনা তা আমি জানি না
schwertfisch

85
আমি কেবল বলতেই পারি যে ফেসবুক ডক্স এতটাই দুর্বল! এটি এখানে কীভাবে করবেন তা আমাদের খুঁজে বের করা আমাদের পক্ষে লজ্জার বিষয়।
গাল রোম

13

সমস্ত প্রোফাইল তথ্য পেতে এই স্নিপেট ব্যবহার করুন

private FacebookCallback<LoginResult> callback = new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            AccessToken accessToken = loginResult.getAccessToken();
            Profile profile = Profile.getCurrentProfile();

            // Facebook Email address
            GraphRequest request = GraphRequest.newMeRequest(
                    loginResult.getAccessToken(),
                    new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(
                                JSONObject object,
                                GraphResponse response) {
                            Log.v("LoginActivity Response ", response.toString());

                            try {
                                Name = object.getString("name");

                                FEmail = object.getString("email");
                                Log.v("Email = ", " " + FEmail);
                                Toast.makeText(getApplicationContext(), "Name " + Name, Toast.LENGTH_LONG).show();


                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    });
            Bundle parameters = new Bundle();
            parameters.putString("fields", "id,name,email,gender, birthday");
            request.setParameters(parameters);
            request.executeAsync();


        }

        @Override
        public void onCancel() {
            LoginManager.getInstance().logOut();

        }

        @Override
        public void onError(FacebookException e) {

        }
    };

12

কলব্যাক রেজিস্টার করার সাথে সাথে onSuccess()আপনাকে প্রয়োগ করতে হবে এমন প্রোফাইল আপনি পাবেন নাProfileTracker

mProfileTracker = new ProfileTracker() {
    @Override
    protected void onCurrentProfileChanged(Profile oldProfile, Profile newProfile) {
        // Fetch user details from New Profile
    }
};

এছাড়াও প্রোফাইল ট্র্যাকারের শুরু এবং স্টপ পরিচালনা করতে ভুলবেন না

এখন আপনার কাছে অ্যাক্সেস টোকেন পেতে একটি প্রোফাইল থাকবে (নাল প্রোফাইলের সমস্যাটি সমাধান করা হয়েছে)। কোনও ডেটা পেতে আপনাকে কেবল " https://developers.facebook.com/docs/android/ographic#userdata " ব্যবহার করতে হবে।


1
তবে ইমেল ডোব এবং লিঙ্গ পেতে সিনট্যাক্সটি কী? আপনি দয়া করে আমাকে বলতে পারেন
শ্রীয়ঙ্ক সিদ্ধার্থ

2
আমি এটি অ্যাক্সেস টোকেন হিসাবে পাচ্ছি: {অ্যাক্সেস টোকেন টোকেন: ACCESS_TOKEN_REMOVED অনুমতি: [ব্যবহারকারী_বন্ধ, ইমেল, ব্যবহারকারীর_জন্মদিন, বেসিক_ইনফো]} আমি এই কোডটি ফেসবুককলব্যাকের অধীনে ব্যবহার করছি ---- অ্যাক্সেসটোকেন এমঅ্যাক্সেসটোকেন = লগইনসেসটোকেন (); আপনি দয়া করে বলতে পারেন এর অর্থ কি? এবং কীভাবে এই ত্রুটিটি সমাধান করবেন এবং অ্যাক্সেস টোকেন পাবেন?
শ্রীয়ঙ্ক সিদ্ধার্থ

@ শ্রীায়ঙ্কসিদ্ধার্থ কি এর জন্য কোন সমাধান পেয়েছেন? আপনি কি এখানে আপডেট করতে পারেন, একই সমস্যার মুখোমুখি হয়ে
প্রভা ১

@ শ্রীায়ঙ্ক, আমিও একই সমস্যার মুখোমুখি, ইমেল আইডি পেতে সক্ষম হইনি। আপনি যদি কোনও সমাধান পান তবে আমাকে সহায়তা করুন। আগাম ধন্যবাদ.
রমেশ

আমি এখনও কোনও সমাধান খুঁজে পাচ্ছি না ... আমি বর্তমানেও পুরানো এসডিকে ব্যবহার করছি .. আপনি যদি সমাধান পান তবে দয়া করে আমাকে
জানাবেন

8

লগইন পরে

private void getFbInfo() {
    GraphRequest request = GraphRequest.newMeRequest(
            AccessToken.getCurrentAccessToken(),
            new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(
                        JSONObject object,
                        GraphResponse response) {
                    try {
                        Log.d(LOG_TAG, "fb json object: " + object);
                        Log.d(LOG_TAG, "fb graph response: " + response);

                        String id = object.getString("id");
                        String first_name = object.getString("first_name");
                        String last_name = object.getString("last_name");
                        String gender = object.getString("gender");
                        String birthday = object.getString("birthday");
                        String image_url = "http://graph.facebook.com/" + id + "/picture?type=large";

                        String email;
                        if (object.has("email")) {
                            email = object.getString("email");
                        }

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            });
    Bundle parameters = new Bundle();
    parameters.putString("fields", "id,first_name,last_name,email,gender,birthday"); // id,first_name,last_name,email,gender,birthday,cover,picture.type(large)
    request.setParameters(parameters);
    request.executeAsync();
}


2

এটি আমার জন্য কাজ করা হয়েছে, কাউকে সাহায্য করার আশা করি (আমার নিজের বোতামটি এফবি লগইন বোতাম নয়)

CallbackManager callbackManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(getApplicationContext());
    setContentView(R.layout.activity_sign_in_user);



     LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {


            GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(JSONObject object, GraphResponse response) {
                    try {
                        Log.i("RESAULTS : ", object.getString("email"));
                    }catch (Exception e){

                    }
                }
            });
            Bundle parameters = new Bundle();
            parameters.putString("fields", "email");
            request.setParameters(parameters);
            request.executeAsync();

        }

        @Override
        public void onCancel() {

        }

        @Override
        public void onError(FacebookException error) {
            Log.i("RESAULTS : ", error.getMessage());
        }
    });


}

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


boolean isEmailValid(CharSequence email) {
    return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
}

public void signupwith_facebook(View view) {

    LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile","email"));
}
}

2

ইমেল আইডি, নাম এবং প্রোফাইল ইউআরএল ইত্যাদি খুঁজে পেতে কোডটি নীচে দেওয়া হল

    private CallbackManager callbackManager;

    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_sign_in);
//TODO on click of fb custom button call handleFBLogin()
     callbackManager = CallbackManager.Factory.create();
    }

    private void handleFBLogin() {
            AccessToken accessToken = AccessToken.getCurrentAccessToken();
            boolean isLoggedIn = accessToken != null && !accessToken.isExpired();

            if (isLoggedIn && Store.isUserExists(ActivitySignIn.this)) {
                goToHome();
                return;
            }

            LoginManager.getInstance().logInWithReadPermissions(ActivitySignIn.this, Arrays.asList("public_profile", "email"));
            LoginManager.getInstance().registerCallback(callbackManager,
                    new FacebookCallback<LoginResult>() {
                        @Override
                        public void onSuccess(final LoginResult loginResult) {
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    setFacebookData(loginResult);
                                }
                            });
                        }

                        @Override
                        public void onCancel() {
                            Toast.makeText(ActivitySignIn.this, "CANCELED", Toast.LENGTH_SHORT).show();
                        }

                        @Override
                        public void onError(FacebookException exception) {
                            Toast.makeText(ActivitySignIn.this, "ERROR" + exception.toString(), Toast.LENGTH_SHORT).show();
                        }
                    });
        }

private void setFacebookData(final LoginResult loginResult) {
        GraphRequest request = GraphRequest.newMeRequest(
                loginResult.getAccessToken(),
                new GraphRequest.GraphJSONObjectCallback() {
                    @Override
                    public void onCompleted(JSONObject object, GraphResponse response) {
                        // Application code
                        try {
                            Log.i("Response", response.toString());

                            String email = response.getJSONObject().getString("email");
                            String firstName = response.getJSONObject().getString("first_name");
                            String lastName = response.getJSONObject().getString("last_name");
                            String profileURL = "";
                            if (Profile.getCurrentProfile() != null) {
                                profileURL = ImageRequest.getProfilePictureUri(Profile.getCurrentProfile().getId(), 400, 400).toString();
                            }

                           //TODO put your code here
                        } catch (JSONException e) {
                            Toast.makeText(ActivitySignIn.this, R.string.error_occurred_try_again, Toast.LENGTH_SHORT).show();
                        }
                    }
                });
        Bundle parameters = new Bundle();
        parameters.putString("fields", "id,email,first_name,last_name");
        request.setParameters(parameters);
        request.executeAsync();
    }
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            callbackManager.onActivityResult(requestCode, resultCode, data);
    }

2

এখানে একটি কার্যক্ষম সমাধান (2019) রয়েছে: আপনার লগইন যুক্তির ভিতরে এই কোডটি রাখুন;

 GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(JSONObject json, GraphResponse response) {
                    // Application code
                    if (response.getError() != null) {
                        System.out.println("ERROR");
                    } else {
                        System.out.println("Success");
                        String jsonresult = String.valueOf(json);
                        System.out.println("JSON Result" + jsonresult);

                        String fbUserId = json.optString("id");
                        String fbUserFirstName = json.optString("name");
                        String fbUserEmail = json.optString("email");
                        //String fbUserProfilePics = "http://graph.facebook.com/" + fbUserId + "/picture?type=large";
                        Log.d("SignUpActivity", "Email: " + fbUserEmail + "\nName: " + fbUserFirstName + "\nID: " + fbUserId);
                    }
                    Log.d("SignUpActivity", response.toString());
                }
            });
            Bundle parameters = new Bundle();
            parameters.putString("fields", "id,name,email,gender, birthday");
            request.setParameters(parameters);
            request.executeAsync();
        }

        @Override
        public void onCancel() {
            setResult(RESULT_CANCELED);
            Toast.makeText(SignUpActivity.this, "Login Attempt Cancelled", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onError(FacebookException error) {
            Toast.makeText(SignUpActivity.this, "An Error Occurred", Toast.LENGTH_LONG).show();
            error.printStackTrace();
        }
    });

0

ক্লিক করুন বোতামে এই লাইনটি যুক্ত করুন

loginButton.setReadPerifications (Arrays.asList ("সর্বজনীন_ প্রোফাইল", "ইমেল", "ব্যবহারকারীর জন্মদিন", "ব্যবহারকারীর বন্ধু"));


-3

এই তথ্যগুলি পুনরুদ্ধার করতে প্রোফাইল শ্রেণীর এফবি স্ট্যাটিক পদ্ধতি getCurrentProfile () ব্যবহার করুন।

 Profile profile = Profile.getCurrentProfile();
 String firstName = profile.getFirstName());
 System.out.println(profile.getProfilePictureUri(20,20));
 System.out.println(profile.getLinkUri());

39
ইমেল, জন্মদিন এবং লিঙ্গ সম্পর্কে প্রশ্ন। এটি এর কোনও উত্তর দেয় না।
সিয়ামাস্টার

2
এটি ইমেল দেয় না
ধর্মঙ্কর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.