从Twitter获取用户电子邮件地址(Android)

3

我该如何通过Twitter API获取用户的电子邮件地址?我正在使用Twitter4j进行Twitter登录。


1
另外,请查看此链接:https://dev.twitter.com/twitter-kit/android/request-email - Daniel Nugent
@DanielNugent..你的链接很有帮助,但在使用twitter4j时应该使用哪种方法呢? - LEE
看一下这个链接:https://twittercommunity.com/t/easy-way-of-get-users-twitterid-and-email/17099 - Daniel Nugent
@DanielNugent...是的,有一种方法可以使用TwitterAuthClient类。然而,这就是问题所在!我没有使用Fabric和Core Twitter API,因为我无法成功导入其库到我的gradle构建文件中。因此,我转向了twitter4j。但是对于twitter4j来说,没有获取电子邮件的方法!!!奇怪:\ - LEE
你有会话吗?如果没有,就无法通过 Twitter 登录您的应用程序以获取电子邮件地址。 - Mounir Elfassi
显示剩余2条评论
5个回答

0

请检查这些链接

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
}
});

0

我希望这会起作用。 请在您的请求回调结果中使用以下代码

 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) {

                    }
                });

0
首先,确保在 Twitter 应用程序的“权限”部分激活了“要求用户的电子邮件地址”的功能。

enter image description here


然后按照 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);
}

0

在这里,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);
        }
    });

TwitterAuthClient client = new TwitterAuthClient(); - rohit panhalkar
2
请添加一些解释 - ShivaGaire
虽然这段代码可能回答了问题,但提供有关它如何以及为什么解决问题的额外上下文会提高答案的长期价值。 - Alexander
这里Twitter SDK帮助您提供电子邮件,您只需要请求电子邮件的权限即可。 Twitter SDK将检查您的Twitter帐户上的电子邮件是否可见,如果它具有该权限,它将为您提供电子邮件,否则我们需要处理它不发送电子邮件的情况。 - rohit panhalkar

0

要获取Twitter的电子邮件和个人资料图片URL、用户名和ID,您需要调用requestEmail方法。

此外,您需要在Twitter开发者账户中允许请求电子邮件。请参见下面的图片。

Retrieve Email id on twitter login

使用以下代码获取用户详细信息。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接