如何在ios8中使用twitter工具包1.2.0版请求获取用户电子邮件的权限?

时间:2015-01-27 09:57:08

标签: twitter twitter-oauth xcode6.1 ios8.1

我已按照https://dev.twitter.com/twitter-kit/ios/configure这个在我的ios应用中集成了推特工具包。我可以在身份验证后登录并轻松查看我的推特名称但现在我想要检索我的电子邮件地址,所以我使用TWTRShareEmailViewController向用户显示返回null的共享电子邮件视图。我浏览了他们提到的有关我的应用程序的文档,这些文档被列入白名单以请求电子邮件权限,并表示要填写此表单https://support.twitter.com/forms/platform我不知道下一步该做什么?如何获得用户电子邮件权限?建议任何帮助。提前谢谢。

5 个答案:

答案 0 :(得分:6)

我没有找到要求列入白名单的特定表格。我继续使用表单链接https://support.twitter.com/forms/platform,然后检查了“我有一个API政策问题没有被这些点覆盖”选项。他们几天后回复并向我询问有关该应用程序及其应用程序ID的更多信息。我其实在等他们的回答。

编辑:

所以经过几次(很多) support@fabric.io 的电子邮件和一些错误后,我终于被列入白名单。但是Fabric现在无法使用该选项,因此您必须在apps.twitter.com上创建Twitter应用程序。只需发送包含您的应用ID或密钥的邮件即可。他们可能会要求您快速描述您的应用,并且不应该花费太多时间将其列入白名单。祝你好运!

答案 1 :(得分:4)

sdk-feedback@twitter.com进行对话后,我的应用已列入白名单。这是故事:

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

  • 他们会审核您的应用并在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)
    }
}

希望它有所帮助!!!

答案 2 :(得分:3)

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

Swift 3.0 Code with fabric

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

答案 3 :(得分:1)

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

第1步:到https://apps.twitter.com/app/

第2步:点击你的应用>点击权限标签。

第3步:点击邮箱

enter image description here

答案 4 :(得分:0)

我最近遇到了同样的问题

如果您使用新的推特套件

,这是您应该尝试的

转到

代码:

var config = { headers: { 'Content-Type': undefined } };

$http.post(url, file, config)
  .then(function (response) {
    var data = response.data;
    var status = response.status;
    var statusText = response.statusText;
    var headers = response.headers;
    var config = response.config;

    console.log("Success");
    return response; 
}).catch(function (errorResponse)
    console.log("Error");
    throw errorResponse;
});