我该如何通过Twitter API获取用户的电子邮件地址?我正在使用Twitter4j进行Twitter登录。
我该如何通过Twitter API获取用户的电子邮件地址?我正在使用Twitter4j进行Twitter登录。
请检查这些链接
https://dev.twitter.com/twitterkit/android/installation
https://dev.twitter.com/twitterkit/android/log-in-with-twitter
在成功登录后写入以下代码
TwitterAuthClient authClient = new TwitterAuthClient();
authClient.requestEmail(session, new Callback<String>() {
@Override
public void success(Result<String> result) {
// Do something with the result, which provides the email address
}
@Override
public void failure(TwitterException exception) {
// Do something on failure
}
});
我希望这会起作用。 请在您的请求回调结果中使用以下代码
TwitterloginButton.setCallback(new Callback<TwitterSession>() {
@Override
public void success(Result<TwitterSession> result) {
session = result.data;
AccountService ac = Twitter.getApiClient(result.data).getAccountService();
ac.verifyCredentials(true, true, new Callback<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 Name = result.data.name;
long userid = result.data.id;
String username = result.data.screenName;
System.out.println(imageUrl);
System.out.println("EMAIL:" + email);
System.out.println("Name:" + Name);
System.out.println("ID:" + userid);
System.out.println("Username:" + username);
}
@Override
public void failure(TwitterException e) {
}
});
然后按照 Twitter 文档的步骤进行操作:
1. 安装过程:只需 简单导入 Twitter 的 SDK 包即可。
我仅使用核心包。
compile 'com.twitter.sdk.android:twitter-core:3.1.1'
在你的Activity的onCreate
方法中初始化Twitter Kit
Twitter.initialize(this);
将您的应用程序ID和密钥添加到strings.xml
文件中
<string android:name="com.twitter.sdk.android.CONSUMER_KEY">XXXXXXXXXXX</string>
<string android:name="com.twitter.sdk.android.CONSUMER_SECRET">XXXXXXXXXXX</string>
2. 添加按钮:
<com.twitter.sdk.android.core.identity.TwitterLoginButton
android:id="@+id/twitter_connect"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
private TwitterLoginButton twitterBtn;
...
twitterBtn = (TwitterLoginButton) findViewById(R.id.twitter_connect);
twitterBtn.setCallback(new Callback<TwitterSession>() {
@Override
public void success(Result<TwitterSession> result) {
// Do something with result, which provides a TwitterSession for making API calls
// which is do the callback from twitter to get the Email
TwitterSession session = TwitterCore.getInstance().getSessionManager().getActiveSession();
TwitterAuthToken authToken = session.getAuthToken();
String token = authToken.token;
String secret = authToken.secret;
TwitterAuthClient authClient = new TwitterAuthClient();
authClient.requestEmail(session, new Callback<String>() {
@Override
public void success(Result<String> result) {
// Do something with the result, which provides the email address
// the email is saved in the result variable 'result.data'
Toast.makeText(getBaseContext(), "Email" + result.data, Toast.LENGTH_LONG).show();
}
@Override
public void failure(TwitterException exception) {
// Do something on failure
}
});
}
@Override
public void failure(TwitterException exception) {
// Do something on failure
}
});
// Pass the activity result to the login button.
twitterBtn.onActivityResult(requestCode, resultCode, data);
就像这样:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Pass the activity result to the login button.
twitterBtn.onActivityResult(requestCode, resultCode, data);
}
在这里,Twitter SDK 可以帮助您提供电子邮件,您只需要请求电子邮件的权限。Twitter SDK 将检查您的 Twitter 帐户上电子邮件的可见性,如果它有权限,它将为您提供电子邮件,否则我们需要处理如果它没有发送电子邮件的情况。
client.requestEmail(twitterSession, new Callback<String>() {
@Override
public void success(Result<String> result) {
Log.d(TAG, "Twitter success email : " + result.data);
email = result.data;
if (email == null){
}else {
Log.d(TAG,"Email"+ email);
}
}
@Override
public void failure(TwitterException exception) {
Log.d(TAG, "Twitter failed email : " + exception);
}
});
要获取Twitter的电子邮件和个人资料图片URL、用户名和ID,您需要调用requestEmail方法。
此外,您需要在Twitter开发者账户中允许请求电子邮件。请参见下面的图片。
使用以下代码获取用户详细信息。
btnTwitterLogin.setCallback(new Callback<TwitterSession>() {
@Override
public void success(Result<TwitterSession> result) {
TwitterSession session = TwitterCore.getInstance().getSessionManager().getActiveSession();
TwitterAuthToken authToken = session.getAuthToken();
TwitterAuthClient authClient = new TwitterAuthClient();
authClient.requestEmail(session, new Callback<String>() {
@Override
public void success(Result<String> result) {
String email =result.data;
String token = authToken.token;
String secret = authToken.secret;
String username = session.getUserName();
long userId = session.getUserId();
Log.e("neem", "success: \n Token => " + token + "\n Secret: " + secret + " \n Username: " + username + "\n Userid: " + userId+" \n Email: "+email);
}
@Override
public void failure(TwitterException exception) {
Log.e("neem", "failure: "+exception.getMessage() );
}
});
TwitterCore.getInstance().getApiClient(result.data).getAccountService().verifyCredentials(false,true,false).enqueue(new Callback<User>() {
@Override
public void success(Result<User> userResult) {
try {
String imageUrl = userResult.data.profileImageUrl;
String username = userResult.data.screenName;
Log.e("neem", "acount services: imageurl: "+imageUrl+"\n username: "+username );
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void failure(TwitterException e) {
}
});
}
@Override
public void failure(TwitterException exception) {
ShowToast(mcontext, "Login failed due to: \n "+exception.getMessage());
}
});