2017-01-09 65 views
-1

我想在用户尝试注册时将我的Android应用程序的电子邮件字段更改为“必需”。如何更改Android上所需的Facebook权限字段

我对Facebook账户有更改设置吗?或者它是我的Android代码的设置?

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

截图来解释我的问题:下面

enter image description here

回答

1

您无法将电子邮件权限设置为“必需”。您也可以向用户发送消息,说明电子邮件为什么是强制性的,然后使用所需的权限再次发出登录请求。您可以找到以下documentatation:

https://developers.facebook.com/docs/facebook-login/android/permissions

当我需要这个我一般注册一个回调照顾这个问题像下面这样:

//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(); 
       } 
      } 
     } 
    }; 
} 
0

使用您Fb的登录按钮 -

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

你可以找到完整的代码here

+0

我已经使用这个方法。 – Johnny

+0

那么你的情况发生了什么? –

+1

在新的Facebook的SDK中,你不能强制用户的电子邮件权限。 ,公开的个人资料总是公开的,可以使用,但电子邮件认证完全符合用户的意愿。您可以在登录之前为用户创建一个提醒邮件,如果电子邮件的必要条件与您需要的正确理由相符 –