【问题标题】:How to get user email address via Twitter API in iOS?如何在 iOS 中通过 Twitter API 获取用户电子邮件地址?
【发布时间】:2013-11-06 21:40:32
【问题描述】:

我尝试了多个 SDK,但无法从任何资源中获取电子邮件 ID。为此,我尝试了FHSTwitterEngine,但没有得到解决方案。

FHSTwitterEngine *twitterEngine = [FHSTwitterEngine sharedEngine];
NSString *username = [twitterEngine loggedInUsername]; //self.engine.loggedInUsername;
NSString *key = [twitterEngine accessToken].key;
NSString *secrete = [twitterEngine accessToken].secret;

if (username.length > 0)
{
    NSDictionary *userProfile = [[FHSTwitterEngine sharedEngine] getProfileUsername:username];
    NSLog(@"userProfile: %@", userProfile);

【问题讨论】:

  • 您的代码示例似乎不完整..?
  • 我喜欢 FHSTwitterEngine 哈哈

标签: ios objective-c iphone twitter ios5


【解决方案1】:

编辑

Twitter 更新 API 后,现在用户可以使用 TWTRShareEmailViewController 类获取电子邮件。

// Objective-C
if ([[Twitter sharedInstance] session]) {
    TWTRShareEmailViewController* shareEmailViewController = [[TWTRShareEmailViewController alloc] initWithCompletion:^(NSString* email, NSError* error) {
        NSLog(@"Email %@, Error: %@", email, error);
    }];
    [self presentViewController:shareEmailViewController animated:YES completion:nil];
} else {
  // TODO: Handle user not signed in (e.g. attempt to log in or show an alert)
}

// Swift
if Twitter.sharedInstance().session {
  let shareEmailViewController = TWTRShareEmailViewController() { email, error in
    println("Email \(email), Error: \(error)")
  }
  self.presentViewController(shareEmailViewController, animated: true, completion: nil)
} else {
  // TODO: Handle user not signed in (e.g. attempt to log in or show an alert)
}

注意事项: 即使用户允许访问她的电子邮件地址,也不能保证您会得到一个电子邮件地址。例如,如果有人使用电话号码而不是电子邮件地址注册 Twitter,则电子邮件字段可能为空。发生这种情况时,完成块将传递一个错误,因为没有可用的电子邮件地址。

Twitter Dev Ref


过去

您可以通过NO方式获取 twitter 用户的电子邮件地址。

Twitter API 不提供用户的电子邮件地址作为 OAuth 令牌协商过程的一部分,也不提供其他获取方式。

Twitter Doc.

【讨论】:

【解决方案2】:

您将不得不使用 Twitter 框架。 Twitter 为此提供了一个漂亮的框架,您只需将其集成到您的应用中即可。

要获取用户电子邮件地址,您的应用程序应该被列入白名单。这是link。转到use this form。您可以向 sdk-feedback@twitter.com 发送邮件,其中包含有关您的应用程序的一些详细信息,例如消费者密钥、应用程序的应用商店链接、隐私政策链接、元数据、如何登录我们的应用程序的说明等。他们将2-3个工作日内回复。

这是我如何通过与 Twitter 支持团队的对话被列入白名单的故事:

  • 发送邮件至sdk-feedback@twitter.com,提供有关您的应用程序的一些详细信息,例如消费者密钥、应用程序的应用商店链接、隐私政策链接、元数据、如何登录我们的应用程序的说明。在邮件中提及您要在应用内访问用户电子邮件地址。

  • 他们将审核您的应用并在 2-3 个工作日内回复您。

  • 一旦他们说您的应用已列入白名单,请在 Twitter 开发者门户中更新您的应用设置。登录apps.twitter.com 并:

    1. 在“设置”选项卡上,添加服务条款和隐私政策 URL
    2. 在“权限”选项卡上,将令牌的范围更改为请求电子邮件。只有在您的应用被列入白名单后才能看到此选项。

动手编写代码

Twitter 框架的使用:

获取用户电子邮件地址

-(void)requestUserEmail
    {
        if ([[Twitter sharedInstance] session]) {

            TWTRShareEmailViewController *shareEmailViewController =
            [[TWTRShareEmailViewController alloc]
             initWithCompletion:^(NSString *email, NSError *error) {
                 NSLog(@"Email %@ | Error: %@", email, error);
             }];

            [self presentViewController:shareEmailViewController
                               animated:YES
                             completion:nil];
        } else {
            // Handle user not signed in (e.g. attempt to log in or show an alert)
        }
    }

获取用户资料

-(void)usersShow:(NSString *)userID
{
    NSString *statusesShowEndpoint = @"https://api.twitter.com/1.1/users/show.json";
    NSDictionary *params = @{@"user_id": userID};

    NSError *clientError;
    NSURLRequest *request = [[[Twitter sharedInstance] APIClient]
                             URLRequestWithMethod:@"GET"
                             URL:statusesShowEndpoint
                             parameters:params
                             error:&clientError];

    if (request) {
        [[[Twitter sharedInstance] APIClient]
         sendTwitterRequest:request
         completion:^(NSURLResponse *response,
                      NSData *data,
                      NSError *connectionError) {
             if (data) {
                 // handle the response data e.g.
                 NSError *jsonError;
                 NSDictionary *json = [NSJSONSerialization
                                       JSONObjectWithData:data
                                       options:0
                                       error:&jsonError];
                 NSLog(@"%@",[json description]);
             }
             else {
                 NSLog(@"Error code: %ld | Error description: %@", (long)[connectionError code], [connectionError localizedDescription]);
             }
         }];
    }
    else {
        NSLog(@"Error: %@", clientError);
    }
}

希望对你有帮助!!!

【讨论】:

    【解决方案3】:

    如果您想要用户的电子邮件地址,则需要在您自己的应用程序和服务范围内向用户索取。 Twitter API 不提供用户的电子邮件地址作为 OAuth 令牌协商过程的一部分,也不提供其他方式来获取它。

    【讨论】:

      【解决方案4】:

      在 Swift 4.2 和 Xcode 10.1 中

      它也收到电子邮件。

      import TwitterKit 
      
      
      @IBAction func onClickTwitterSignin(_ sender: UIButton) {
      
      TWTRTwitter.sharedInstance().logIn { (session, error) in
          if (session != nil) {
              let name = session?.userName ?? ""
              print(name)
              print(session?.userID  ?? "")
              print(session?.authToken  ?? "")
              print(session?.authTokenSecret  ?? "")
              let client = TWTRAPIClient.withCurrentUser()
              client.requestEmail { email, error in
                  if (email != nil) {
                      let recivedEmailID = email ?? ""
                      print(recivedEmailID)
                  }else {
                      print("error--: \(String(describing: error?.localizedDescription))");
                  }
              }
              let storyboard = self.storyboard?.instantiateViewController(withIdentifier: "SVC") as! SecondViewController
              self.navigationController?.pushViewController(storyboard, animated: true)
          }else {
              print("error: \(String(describing: error?.localizedDescription))");
          }
      }
      }
      

      【讨论】:

        【解决方案5】:

        斯威夫特 3-4

        @IBAction func btnTwitterAction(_ sender: Any) {
        
                TWTRTwitter.sharedInstance().logIn(completion: { (session, error) in
                    if (session != nil) {
                        print("signed in as \(String(describing: session?.userName))");
                        if let mySession = session{
        
                            let client = TWTRAPIClient.withCurrentUser()
                            //To get User name and email
                            client.requestEmail { email, error in
                                if (email != nil) {
                                    print("signed in as \(String(describing: session?.userName))");
                                    let firstName = session?.userName ?? ""   // received first name
                                    let lastName = session?.userName ?? ""  // received last name
                                    let recivedEmailID = email ?? ""   // received email
        
                                }else {
                                    print("error: \(String(describing: error?.localizedDescription))");
                                }
                            }
        
        
                            //To get user profile picture
                            client.loadUser(withID: session?.userID, completion: { (userData, error) in
                                if (userData != nil) {
        
                                    let fullName = userData.name //Full Name
                                    let userProfileImage = userData.profileImageLargeURL //User Profile Image
                                    let userTwitterProfileUrl = userData?.profileURL // User TwitterProfileUrl
                                }
                            })
                        }
                    } else {
                        print("error: \(error?.localizedDescription)");
                    }
                })
        
            }
        

        【讨论】:

          猜你喜欢
          • 2012-05-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-01
          • 1970-01-01
          相关资源
          最近更新 更多