【问题标题】:Get a User's email address from Twitter (Android)从 Twitter (Android) 获取用户的电子邮件地址
【发布时间】:2020-05-21 01:24:52
【问题描述】:

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

【问题讨论】:

标签: android twitter twitter4j


【解决方案1】:

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

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

                    }
                });

【讨论】:

    【解决方案2】:

    检查这些链接

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

    【讨论】:

      【解决方案3】:

      首先确保你在你的推特应用Permissions部分激活Request email addresses from users


      然后按照 Twitter 文档步骤进行操作

      1. Installation process: 只导入 twitter的sdk包

      我只使用核心包

      compile 'com.twitter.sdk.android:twitter-core:3.1.1'
      

      在你的 Activity onCreate 方法上初始化 Twitter 工具包

      Twitter.initialize(this);
      

      将您的 App 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. Add the Button:

      <com.twitter.sdk.android.core.identity.TwitterLoginButton
           android:id="@+id/twitter_connect"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content" />
      
      提示:您可以使用自定义按钮 follow this simple answer
      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
          }
      });
      

      接下来,将认证Activity的结果传回给按钮:

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

      【讨论】:

        【解决方案4】:

        这里 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 客户端 = 新 TwitterAuthClient();
        • 请加一点解释
        • 虽然此代码可以回答问题,但提供有关 如何为什么 解决问题的附加上下文将提高​​答案的长期价值。
        • 这里Twitter sdk帮你提供邮箱,你只需要提供邮箱请求权限即可。 Twitter sdk 将检查您 Twitter 帐户上电子邮件的可见性,如果它有权限,它将为您提供电子邮件,否则我们需要处理如果它没有发送电子邮件。
        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-04-15
          • 2012-05-10
          • 2016-10-12
          • 2015-01-23
          • 1970-01-01
          • 2011-02-03
          • 1970-01-01
          相关资源
          最近更新 更多