如何在iOS8中使用Twitter Kit版本1.2.0请求权限以检索用户的电子邮件?

9
我按照https://dev.twitter.com/twitter-kit/ios/configure中的步骤,在我的iOS应用程序中集成了Twitter Kit。我可以在身份验证后登录并轻松查看我的Twitter名称,但我现在想检索我的电子邮件地址,因此我使用了TWTRShareEmailViewController,它提供给用户一个共享电子邮件视图,但返回null。我查阅了文档,发现需要将我的应用程序列入白名单以请求电子邮件权限,并建议填写https://support.twitter.com/forms/platform中的表格。我不知道接下来该怎么做?如何准确获取用户的电子邮件权限?请提供任何帮助。先谢谢了。
5个回答

6
我没有找到一个特定的表格来请求加入白名单。我点击了他们的表格链接https://support.twitter.com/forms/platform,并勾选了“I have an API policy question not covered by these points”选项。他们几天后回复我,并要求我提供有关应用程序及其应用ID的更多信息。我现在正在等待他们的答复。
编辑:
经过与support@fabric.io的多次邮件(很多封)和一些错误,我最终被列入了白名单。但是Fabric目前不支持该选项,所以您必须在apps.twitter.com上创建一个Twitter应用程序。只需发送一封电子邮件,其中包含您的应用ID或密钥。他们可能会要求您对您的应用程序进行简短描述,而且这不应该花费太多时间来加入白名单。祝你好运!

经过大量的研究,我发现Twitter不支持iOS和Android的电子邮件权限。因此,我们已将Twitter登录从我们的应用中排除,并仅使用Facebook和LinkedIn作为我们获取电子邮件的主要途径。如果您找到任何解决方法,请更新我们。谢谢! - Mak13
今天我收到了回复,他们告诉我我没有在正确的地方提问。他们建议我检查API文档(当然我已经做过了)并搜索他们的开发者讨论(我也做过了)。所以我认为我还没有准备好被列入白名单...当你说他们不支持电子邮件权限时,如果你被Twitter列入白名单,这也是真的吗?你根本就不能询问它吗? - Marie Dm
1
我认为如果我们的应用程序被列入白名单,我们就可以获得电子邮件。因为如果他们向我们提供 TWTRShareEmailViewController,则支持电子邮件权限是有意义的;否则,我不明白他们为什么会提供它。但是问题又来了,如何使我的应用程序被列入白名单。请查看 https://blog.twitter.com/2014/introducing-fabric 并查看 Twitter 登录段落中的内容。更新我,需要做什么才能将应用程序列入白名单。 - Mak13
@Mak13 请查看此链接 http://stackoverflow.com/questions/28679652/ask-for-user-twitter-mail-with-twtrshareemailviewcontroller-fabric-twitter-sdk - Mani

4

在与 sdk-feedback@twitter.com 的交谈后,我成功地让我的应用程序被列入白名单。以下是整个过程:

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

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

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

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

现在是编码的时间:

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

希望这能对您有所帮助!

感谢您提供详细的步骤。不幸的是,我发送到sdk-feedback@twitter.com的电子邮件被退回为无法投递。我会像其他帖子建议的那样将我的电子邮件提交给support@fabric.io,并作为最后的手段,通过他们的支持表格提交请求,希望它能够到达正确的位置。 - Jeff Poulton
@NSPratik,明天起上述方法将不再有效,你能帮我提供新的方法吗?请查看此处链接:“https://docs.fabric.io/ios/twitter/request-user-email-address.html”。 - iPhone 7

3

首先发送电子邮件至sdk-feedback@twitter.com以将您的Twitter登录应用程序列入白名单。

使用Fabric的Swift 3.0代码

@IBAction func btnTwitterAction(_ sender: AnyObject) {
        Twitter.sharedInstance().logIn { (session, error) in
            if session != nil {
                print("signed in as \(session!.userName)");
                let client = TWTRAPIClient.withCurrentUser()
                let request = client.urlRequest(withMethod: "GET",
                                                url: "https://api.twitter.com/1.1/account/verify_credentials.json?include_email=true",
                                                          parameters: ["include_email": "true", "skip_status": "true"],
                                                          error: nil)
                client.sendTwitterRequest(request) { response, data, connectionError in
                    if (connectionError == nil) {

                        do{
                            let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! [String:Any]
                            print("Json response: ", json)
                            let firstName = json["name"]
                            let lastName = json["screen_name"]
                            let email = json["email"]
                            print("First name: ",firstName)
                            print("Last name: ",lastName)
                            print("Email: ",email)
                        } catch {

                        }

                    }
                    else {
                        print("Error: \(connectionError)")
                    }
                }


            } else {
                NSLog("Login error: %@", error!.localizedDescription);
            }
        }
    }

这段代码中除了获取电子邮件地址之外,一切都正常:它返回 nil。 - Fadwa_lmh
@Fadwa_lmh,您是否通过发送电子邮件至sdk-feedback@twitter.com将您的Twitter应用程序列入白名单? - Chanchal Raj
@ChanchalRaj,是的,我的 Twitter 应用已经被列入白名单了! - Fadwa_lmh
@Fadwa_lmh,在我的应用程序被列入白名单后,我成功获取了电子邮件地址。而且它仍然可以正常工作。也许再次联系他们。 - Chanchal Raj
@ChanchalRaj,我会再试一次,谢谢你的帮助。 - Fadwa_lmh

1

如何在 Twitter 上获取电子邮件 ID?

步骤 1:进入 https://apps.twitter.com/app/

步骤 2:单击您的应用程序> 单击权限选项卡。

步骤 3:在此处勾选电子邮件框。

enter image description here


0

我最近也遇到了同样的问题

如果你正在使用新的 Twitter Kit,可以尝试以下方法:

前往

代码:

Twitter.sharedInstance().logIn(withMethods: [.webBased,.systemAccounts,.all]) {(session, error) -> Void in

        if (session != nil) {
            print("signed in as \(session?.userName)");

            let client = TWTRAPIClient(userID: session?.userName)
            client.loadUser(withID: (session?.userID)!, completion: { (user, error) in

                let twitterClient = TWTRAPIClient.withCurrentUser()
                let request = twitterClient.urlRequest(withMethod: "GET",
                                                url: "https://api.twitter.com/1.1/account/verify_credentials.json",
                                                parameters: ["include_email": "true", "skip_status": "true"],
                                                error: nil)


                twitterClient.sendTwitterRequest(request) { response, data, connectionError in

                    print(data!)

                    let s :String = String(data: data! as Data, encoding: String.Encoding.utf8)!
                    //
                    //            let json = try JSONSerialization.jsonObject(with: responseData as Data, options: JSONSerialization.ReadingOptions.mutableLeaves) as? [String:AnyObject]
                    //

                    Twitter.sharedInstance().sessionStore.logOutUserID((session?.userID)!)

                    if let data = s.data(using: String.Encoding.utf8) {
                        do {
                            let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String:Any]
                            print(json!)

                        } catch {
                            print("Something went wrong")
                        }
                    }
                }
            })

        } else {
   }

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