Iphone 如何在iOS中通过Twitter API获取用户电子邮件地址?
我尝试了多个SDK,但无法从任何资源获取电子邮件ID。为此,我尝试了Iphone 如何在iOS中通过Twitter API获取用户电子邮件地址?,iphone,ios5,twitter,Iphone,Ios5,Twitter,我尝试了多个SDK,但无法从任何资源获取电子邮件ID。为此,我尝试了FHSTwitterEngine,但没有找到解决方案 FHSTwitterEngine *twitterEngine = [FHSTwitterEngine sharedEngine]; NSString *username = [twitterEngine loggedInUsername]; //self.engine.loggedInUsername; NSString *key = [twitterEngine acce
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);
编辑
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用户的电子邮件地址 twitterapi不提供用户的电子邮件地址作为OAuth令牌协商过程的一部分,也不提供其他获取方法
.如果您想要用户的电子邮件地址,您需要在您自己的应用程序和服务范围内向用户索要。Twitter API不提供用户的电子邮件地址作为OAuth令牌协商过程的一部分,也不提供获取该地址的其他方法。您必须使用Twitter框架。Twitter提供了一个漂亮的框架,你只需要将它集成到你的应用程序中 要获取用户电子邮件地址,您的应用程序应被列入白名单。这是你的电话号码。去。您可以向sdk发送邮件-feedback@twitter.com有关您的应用程序的一些详细信息,如消费者密钥、应用程序的应用程序商店链接、隐私政策链接、元数据、如何登录我们的应用程序的说明等。他们将在2-3个工作日内作出响应 以下是我如何通过与Twitter支持团队的对话被列入白名单的故事:
- 将邮件发送到
提供有关应用程序的一些详细信息,如消费者密钥、应用程序的应用商店链接、隐私政策链接、元数据、如何登录我们的应用程序的说明。在邮件中提及您希望访问应用程序中的用户电子邮件地址sdk-feedback@twitter.com
- 他们将审查你的应用程序,并在2-3个工作日内回复你
- 一旦他们说你的应用程序被列入白名单,请在Twitter开发者门户中更新你的应用程序设置。登录并:
- 在“设置”选项卡上,添加服务条款和隐私策略URL
- 在“权限”选项卡上,将令牌的作用域更改为请求电子邮件。只有当您的应用程序被列入白名单时,才会看到此选项
-(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);
}
}
希望对你有帮助 在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))");
}
}
}
Swift 3-4
您的代码示例似乎不完整..?我喜欢FHSTwitterEngine hahaThis不再正确。用户的电子邮件地址可以通过:/1.1/account/verify_credentials.json?include_email=trueLink不存在@Virussmca获取电子邮件id,但您的应用程序必须首先被列入白名单
@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)");
}
})
}