【问题标题】:how uber app get mobile number from facebook in androiduber 应用程序如何在 android 中从 facebook 获取手机号码
【发布时间】:2017-08-31 12:07:55
【问题描述】:

在 facebook 登录时,uber android 应用程序如何获取我的手机号码

我在我的 android 应用程序中使用 Facebook 登录,我想要来自 facebook 的用户手机号码,但我没有得到它以下是我的 android 代码

 private void FbInitialise() {

    loginButton = (LoginButton) findViewById(R.id.fb_login);
    callbackManager = CallbackManager.Factory.create();
    loginButton.setReadPermissions(Arrays.asList("public_profile", "email", "user_friends"));

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

            graphRequest(loginResult.getAccessToken());

        }

        @Override
        public void onCancel() {

        }

        @Override
        public void onError(FacebookException error) {

        }
    });

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

            graphRequest(loginResult.getAccessToken());
        }

        @Override
        public void onCancel() {

        }

        @Override
        public void onError(FacebookException error) {

        }
    });
}

  public void graphRequest(AccessToken token) {
    GraphRequest request = GraphRequest.newMeRequest(token, new GraphRequest.GraphJSONObjectCallback() {

        @Override
        public void onCompleted(JSONObject object, GraphResponse response) {

            try {
                LoginType="FB";
                String firstName = "";
                String lastName = "";
                String stremail = "";
                String strmobile = "";

                if (object.has("first_name")) {
                    firstName = object.getString("first_name");
                }
                if (object.has("last_name")) {
                    lastName = object.getString("last_name");
                }if (object.has("email")) {
                    stremail = object.getString("email");
                }

                Intent intent=new Intent(SelectSocilaLoginActivity.this,ConfirmInfoActivity.class);
                intent.putExtra("firstName",firstName);
                intent.putExtra("lastName",lastName);
                intent.putExtra("email",stremail);
                intent.putExtra("parent","SocialLogin");
                startActivity(intent);

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

    });

    Bundle b = new Bundle();
    b.putString("fields", "id, first_name, last_name, email,gender, birthday, location");
    request.setParameters(b);
    request.executeAsync();

}

请给我正确的解决方案

【问题讨论】:

  • 你必须先得到 facebook 的批准
  • 如何获得facebook的批准

标签: android


【解决方案1】:

以下是我设法从登录用户的个人资料中提取手机号码的方法:

public class UserAuth extends AppCompatActivity implements View.OnClickListener, GoogleApiClient.OnConnectionFailedListener {
private Context context;
private Button btnViewProfile;

//For User data
private String userId, userFirstName, userMiddleName, userLastName, userProfileImage, userEmail, userGender, userMobile, userBirthdate;

//For Facebook
private CallbackManager callbackManager;
LoginButton loginButton = null;
private ImageButton btnFacebook;
private AccessTokenTracker accessTokenTracker;
private ProfileTracker profileTracker;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    /* Enabling strict mode */
    setStrictThreadMode();

    //initializing facebook sdk
    FacebookSdk.sdkInitialize(getApplicationContext());

    //Initialize your view components available in the layout

    accessTokenTracker = new AccessTokenTracker() {
        @Override
        protected void onCurrentAccessTokenChanged(AccessToken oldToken,
                                                   AccessToken newToken) {
        }
    };

    profileTracker = new ProfileTracker() {
        @Override
        protected void onCurrentProfileChanged(Profile oldProfile,
                                               Profile newProfile) {
            if (newProfile != null) {
                userId = newProfile.getId();
                userFirstName = newProfile.getFirstName();
                userMiddleName = newProfile.getMiddleName();
                userLastName = newProfile.getLastName();
                userProfileImage = newProfile.getProfilePictureUri(400, 400).toString();
            }
        }
    };

    accessTokenTracker.startTracking();
    profileTracker.startTracking();
}

//To enable single thread at a time mode
private void setStrictThreadMode() {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
}

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

protected void onStop() {
    super.onStop();
    accessTokenTracker.stopTracking();
    profileTracker.stopTracking();
}

@Override
public void onResume() {
    super.onResume();
    Profile profile = Profile.getCurrentProfile();
}

//This method initializes the facebook login button, sets the required permissions and changes its default background to our drawable
//It also registers the callback for the Login button
private void registerLoginButton() {
    List<String> mPermissions = new ArrayList<>();
    mPermissions.add("public_profile");
    mPermissions.add("email");
    mPermissions.add("user_birthday");
    mPermissions.add("user_friends");
    mPermissions.add("user_mobile_phone");

    loginButton.setReadPermissions(mPermissions);
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {

        @Override
        public void onSuccess(LoginResult result) {

            GraphRequest request = GraphRequest.newMeRequest(result.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {

                @Override
                public void onCompleted(JSONObject object, GraphResponse response) {
                    try {
                        userEmail = object.optString("email");
                        userGender = object.optString("gender");
                        userMobile = object.optString("mobile_phone");
                        String userBirthdate = object.optString("birthday");
                        logoutCurrentUser();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
            Bundle parameters = new Bundle();
            parameters.putString("fields", "id,name,email,gender,birthday");
            request.setParameters(parameters);
            request.executeAsync();
        }

        @Override
        public void onCancel() {
        }

        @Override
        public void onError(FacebookException error) {
        }
    });
}

//This method is to end the current users session
private void logoutCurrentUser() {
    LoginManager.getInstance().logOut();
}

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
}

}

请注意我们添加了获取手机号码的权限:mPermissions.add("user_mobile_phone");

另外,请记住,只有用户公开了手机号码,您才能获得手机号码。

希望这对你有用。

【讨论】:

  • 我尝试了您的方法,但仍然无法获取电话号码。我读了一些关于白名单的内容,以便 facebook 允许您获取该号码,您对此有所了解吗?
  • @karique 我已经非常清楚地提到,只有当相应用户将其手机号码设为公开而不是其他情况时,才会获取一个号码。另外请具体说明您已阅读有关白名单的内容以及您究竟需要什么?要了解有关获得白名单的更多信息,您是否阅读过 Facebook 社区论坛?
  • @karique 您可以查看这里以了解白名单的含义。 stackoverflow.com/questions/15994546/…
  • 是的,我的号码已经公开了,但我还是没有收到,其他字段(如电子邮件和姓名)没有问题。我还尝试了 uber 以及当我尝试通过 facebook 注册过程时出现的数字。显然,facebook允许一个群组获取手机号码。
猜你喜欢
  • 1970-01-01
  • 2014-03-29
  • 1970-01-01
  • 1970-01-01
  • 2014-05-09
  • 1970-01-01
  • 1970-01-01
  • 2019-12-07
  • 2018-08-25
相关资源
最近更新 更多