使用 Fabric SDK 获取 Twitter 用户电子邮件
Posted
技术标签:
【中文标题】使用 Fabric SDK 获取 Twitter 用户电子邮件【英文标题】:Get Twitter user email using Fabric SDK 【发布时间】: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
。还有其他获取用户电子邮件的方法吗?
【问题讨论】:
你会解决这个问题吗?获取电子邮件地址?我也遇到了同样的问题。 【参考方案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();
【讨论】:
以上是关于使用 Fabric SDK 获取 Twitter 用户电子邮件的主要内容,如果未能解决你的问题,请参考以下文章
使用 twitter fabric sdk for android 显示特定 twitter 个人资料的时间线
使用 Fabric 找不到符号导入 com.twitter.sdk.android.Twitter
如何通过 twitter 的 Fabric API (Android) 获取用户数据
Twitter 错误 215 使用 Fabric Android SDK 和 Retrofit 上传媒体