Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何更改Android上必需的Facebook权限字段_Java_Android_Facebook_Facebook Graph Api - Fatal编程技术网

Java 如何更改Android上必需的Facebook权限字段

Java 如何更改Android上必需的Facebook权限字段,java,android,facebook,facebook-graph-api,Java,Android,Facebook,Facebook Graph Api,当用户尝试注册时,我想在我的Android应用程序中将电子邮件字段更改为“必需” 我在Facebook帐户上有更改设置吗?或者这是我的Android代码的设置 我正在使用com.facebook.android:facebook-android-sdk:4.14.1 解释我的问题的屏幕截图: 在您的Fb登录按钮上使用下面的按钮- loginbtn.setReadPermissions(Arrays.asList("public_profile, email,user_birthday"));

当用户尝试注册时,我想在我的Android应用程序中将电子邮件字段更改为“必需”

我在Facebook帐户上有更改设置吗?或者这是我的Android代码的设置

我正在使用
com.facebook.android:facebook-android-sdk:4.14.1

解释我的问题的屏幕截图:


在您的Fb登录按钮上使用下面的按钮-

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

您可以找到完整的代码。

您不能将电子邮件权限设置为“必需”。您也可以向用户发布一条消息,解释为什么该电子邮件是强制性的,并在具有所需权限的情况下再次提出登录请求。您可以在下面找到文档:

当我需要这个时,我通常会注册一个回调来处理这个问题,如下所示:

//manager to handle callbacks from Facebook
private CallbackManager callbackManager;

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

    callbackManager = CallbackManager.Factory.create();

    LoginManager.getInstance().registerCallback(callbackManager, getFacebookLoginCallback());
}

public FacebookCallback<LoginResult> getFacebookLoginCallback() {
    return new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(final LoginResult loginResult) {
            ICLog.e(TAG, "Facebook access token: " + loginResult.getAccessToken().getToken());
            if (loginResult.getRecentlyGrantedPermissions().contains("email")) {
                GraphRequest request = GraphRequest.newMeRequest(
                        loginResult.getAccessToken(),
                        new GraphRequest.GraphJSONObjectCallback() {
                            @Override
                            public void onCompleted(JSONObject object, GraphResponse response) {
                                // Handle logged user here
                            }
                        });
                Bundle parameters = new Bundle();
                parameters.putString("fields", "id,name,email,gender,birthday,first_name,last_name");
                request.setParameters(parameters);
                request.executeAsync();
            } else {
                //show popup and request e-mail permission if needed
                new AlertDialog.Builder(this)
                        .setMessage("I need email")
                        .setNegativeButton("Cancel", null)
                        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface arg0, int arg1) {
                                LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("email"));
                            }
                        }).create().show();
            }
        }

        @Override
        public void onCancel() {
              Log.e("Facebook login", "onCancel");
        }

        @Override
        public void onError(FacebookException exception) {//log out user if any error appears
            if (exception instanceof FacebookAuthorizationException) {
                if (AccessToken.getCurrentAccessToken() != null) {
                    LoginManager.getInstance().logOut();
                }
            }
        }
    };
}
//管理器处理来自Facebook的回调
私人CallbackManager CallbackManager;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
callbackManager=callbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager,getFacebookLoginCallback());
}
public FacebookCallback getFacebookLoginCallback(){
返回新的FacebookCallback(){
@凌驾
成功时公开作废(最终登录结果登录结果){
e(标记为“Facebook访问令牌”:+loginResult.getAccessToken().getToken());
如果(loginResult.getRecentlyGrantedPermissions()包含(“电子邮件”)){
GraphRequest请求=GraphRequest.newmereRequest(
loginResult.getAccessToken(),
新建GraphRequest.GraphJSONObjectCallback(){
@凌驾
未完成公共无效(JSONObject对象,GraphResponse响应){
//在此处处理已登录的用户
}
});
Bundle参数=新Bundle();
参数.putString(“字段”、“id、姓名、电子邮件、性别、生日、名、姓”);
请求。设置参数(参数);
request.executeAsync();
}否则{
//显示弹出窗口并请求电子邮件权限(如果需要)
新建AlertDialog.Builder(此)
.setMessage(“我需要电子邮件”)
.setNegativeButton(“取消”,null)
.setPositiveButton(“确定”,新的DialogInterface.OnClickListener(){
公共void onClick(对话框接口arg0,int arg1){
LoginManager.getInstance().logInWithReadPermissions(这是Arrays.asList(“电子邮件”));
}
}).create().show();
}
}
@凌驾
公开作废{
Log.e(“Facebook登录”、“onCancel”);
}
@凌驾
public void onError(FacebookException异常){//如果出现任何错误,请注销用户
if(FacebookAuthorizationException的异常实例){
if(AccessToken.getCurrentAccessToken()!=null){
LoginManager.getInstance().logOut();
}
}
}
};
}

那么您的情况如何?在新的facebook sdk中,您不能强制用户获得电子邮件权限,公共配置文件始终是可以使用的公共配置文件,但电子邮件身份验证完全取决于用户的意愿。您可以在登录前向用户发出有关所需电子邮件的警报(如果必要),并说明您需要该警报的适当原因