【问题标题】:Get Twitter user email using Fabric SDK使用 Fabric SDK 获取 Twitter 用户电子邮件
【发布时间】:2015-04-12 14:41:53
【问题描述】:

我正在使用 Fabric 登录 Twitter。

这就是我获取用户数据的方式:

loginButton.setCallback(new Callback<TwitterSession>() {
                @Override
                public void success(Result<TwitterSession> result) {
                    // Do something with result, which provides a TwitterSession for making API calls
                    AccountService ac = Twitter.getApiClient(result.data).getAccountService();
                    ac.verifyCredentials(true, true, new Callback<com.twitter.sdk.android.core.models.User>() {
                        @Override
                        public void success(Result<com.twitter.sdk.android.core.models.User> result) {
                            String imageUrl = result.data.profileImageUrl;
                            String email = result.data.email;
                            String userName = result.data.name;
                            System.out.println(imageUrl);
                            System.out.println(email);
                            System.out.println(userName);
                        }

                        @Override
                        public void failure(TwitterException e) {

                        }
                    });

                }

这工作正常,除了当我打印到日志时email 变量是null。还有其他获取用户电子邮件的方法吗?

【问题讨论】:

  • 你会解决这个问题吗?获取电子邮件地址?我也遇到了同样的问题。

标签: android twitter twitter-fabric


【解决方案1】:

-这是解决方案!

twitauthobj.requestEmail(twitsessionobj,new Callback<String>() {
                    @Override
                    public void success(Result<String> stringResult) {
                        'You code here'

                    }

                    @Override
                    public void failure(TwitterException e) {

                    }
                });

-谢谢,如果不起作用,请告诉我!

【讨论】:

  • 它需要开发者请求电子邮件访问。你能指定怎么做吗?
  • 查看此链接dev.twitter.com/twitter-kit/android/request-email 这将启动 ShareEmailActivity 并向用户显示以下屏幕。如果用户授予访问权限并且电子邮件地址可用,则使用结果中的电子邮件地址调用成功方法。
  • 链接的第一行是:“请求用户的电子邮件地址要求您的应用程序被 Twitter 列入白名单。”。我无法找到如何让 twitter 将应用列入白名单。
  • @seema ,我在获取电子邮件地址时遇到了同样的错误。你想出解决办法了吗?可以分享一下吗?
  • 不,我只是为了学习目的。我很忙,所以把它放在那里。
【解决方案2】:

为了绕过 Twitter 无用的请求电子邮件活动并修复漏洞,我挖掘了源代码并将其取出:

new Retrofit.Builder()
        .client(getClient(sessionResult))
        .baseUrl(new TwitterApi().getBaseHostUrl())
        .addConverterFactory(getFactory())
        .build()
        .create(EmailService.class)
        .getEmail()
        .enqueue(new Callback<User>() {
            @Override
            public void success(Result<User> result) {
                String email = result.data.email;
                // Handle the result
                if (email == null) {
                    TwitterProvider.this.failure(
                            new TwitterException("Your application may not have access to"
                                                         + " email addresses or the user may not have an email address. To request"
                                                         + " access, please visit https://support.twitter.com/forms/platform."));
                } else if (email.equals("")) {
                    TwitterProvider.this.failure(
                            new TwitterException("This user does not have an email address."));
                } else {
                    mCallbackObject.onSuccess(createIdpResponse(sessionResult.data, email));
                }
            }

            @Override
            public void failure(TwitterException exception) {
                TwitterProvider.this.failure(exception);
            }
        });

private OkHttpClient getClient(Result<TwitterSession> sessionResult) {
    return OkHttpClientHelper.getOkHttpClient(
            sessionResult.data,
            TwitterCore.getInstance().getAuthConfig(),
            TwitterCore.getInstance().getSSLSocketFactory());
}

private GsonConverterFactory getFactory() {
    return GsonConverterFactory.create(
            new GsonBuilder()
                    .registerTypeAdapterFactory(new SafeListAdapter())
                    .registerTypeAdapterFactory(new SafeMapAdapter())
                    .registerTypeAdapter(BindingValues.class, new BindingValuesAdapter())
                    .create());
}

EmailService:

interface EmailService {
    @GET("/1.1/account/verify_credentials.json?include_email=true?include_entities=true?skip_status=true")
    Call<User> getEmail();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-29
    • 2016-11-11
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 2012-12-14
    相关资源
    最近更新 更多