Facebook Android SDK 即使在许可后也没有电子邮件
Posted
技术标签:
【中文标题】Facebook Android SDK 即使在许可后也没有电子邮件【英文标题】:Facebook Android SDK No Email even after permission 【发布时间】:2017-05-29 10:25:06 【问题描述】:我正在尝试通过 Facebook 应用获取用户电子邮件。但它总是将其返回为空。我什至已经授予了所需的权限。应用程序还显示应用程序将向用户发送电子邮件等的消息。
public class MainActivity extends AppCompatActivity
private TextView info;
private LoginButton loginButton;
private CallbackManager callbackManager;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
if (BuildConfig.DEBUG)
FacebookSdk.setIsDebugEnabled(true);
FacebookSdk.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);
callbackManager = CallbackManager.Factory.create();
setContentView(R.layout.activity_main);
info = (TextView)findViewById(R.id.info);
loginButton = (LoginButton)findViewById(R.id.login_button);
loginButton.setReadPermissions(Arrays.asList("email","user_friends"));
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>()
@Override
public void onSuccess(LoginResult loginResult)
final AccessToken accessToken= loginResult.getAccessToken();
GraphRequestAsyncTask request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback()
@Override
public void onCompleted(JSONObject user, GraphResponse graphResponse)
info.setText(
"User ID: "
+ user.optString("email")
+ "\n"
+ user.optString("name")
+ "\n" +
"Auth Token: "
+ accessToken.getToken()
);
).executeAsync();
@Override
public void onCancel()
info.setText("Login attempt canceled.");
@Override
public void onError(FacebookException e)
info.setText("Login attempt failed.");
);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
callbackManager.onActivityResult(requestCode, resultCode, data);
知道我在这里做错了什么吗?
【问题讨论】:
需要权限是指-您的电子邮件权限已在 facebook 开发人员控制台中获得批准??仅供参考,由于某些帐户电子邮件中的隐私设置不公开。您是否尝试过使用不同的帐户 【参考方案1】:代替:
executeAsync();
使用:
请求的捆绑参数:
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email,gender,birthday,picture.type(small)");
request.setParameters(parameters);
request.executeAsync();
在您的代码中:
final AccessToken accessToken= loginResult.getAccessToken();
GraphRequestAsyncTask request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback()
@Override
public void onCompleted(JSONObject user, GraphResponse graphResponse)
info.setText(
"User ID: "
+ user.optString("email")
+ "\n"
+ user.optString("name")
+ "\n" +
"Auth Token: "
+ accessToken.getToken()
);
);
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email,gender,birthday,picture.type(small)");
request.setParameters(parameters);
request.executeAsync();
还要确保Email
在您的 Facebook 帐户中是公开的。
【讨论】:
以上是关于Facebook Android SDK 即使在许可后也没有电子邮件的主要内容,如果未能解决你的问题,请参考以下文章
android facebook sdk,分享——如何检测成功?
无法在 Android 上编写 jarlist 缓存文件 Facebook SDK
AppDelegate 应用程序功能中的 Facebook SDK 错误,即使在 Xcode 6.3 中更新了 Facebook
在 Facebook SDK Android 上找不到文件“com.facebook.android.facebook”
无法使用 Facebook Android SDK 和 Facebook Audience Network SDK 编译