我的目标是根据用户的Twitter帐户获取用户的详细信息。首先,让我解释一下我想做什么。
在我的情况下,将向用户显示使用Twitter帐户注册的选项。因此,基于用户的Twitter帐户,我希望能够获取用户详细信息(例如电子邮件ID,姓名,个人资料图片,出生日期,性别等)并将这些详细信息保存在数据库中。现在,很多人可能会建议我使用ACAccount
和ACAccountStore
,这是一个提供访问,操作和存储帐户的界面的类。但在我的情况下,即使用户尚未在iOS设置应用中为Twitter配置帐户,我也想要注册用户。我希望用户导航到Twitter的登录屏幕(在Safari或应用程序本身,或使用任何其他替代方案)。
我还提到了具有API列表here的Twitter文档。但我很困惑应该如何向用户提供登录屏幕以登录Twitter帐户以及如何获取个人资料信息。我应该使用UIWebView
,还是将用户重定向到Safari或采用其他方式?
答案 0 :(得分:5)
最后,在与sdk-feedback@twitter.com
进行了长时间的对话后,我将我的应用列入白名单。这是故事:
向sdk-feedback@twitter.com
发送邮件,其中包含有关您的应用程序的一些详细信息,例如消费者密钥,应用程序的App Store链接,隐私政策链接,元数据,如何登录我们的应用程序的说明。在邮件中提到您要访问应用程序内的用户电子邮件地址。
他们会审核您的应用并在2-3个工作日内回复您。
一旦他们说您的应用已列入白名单,请在Twitter开发人员门户中更新您的应用设置。登录apps.twitter.com并:
同意Vizllx声明:" 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);
}
}
希望它有所帮助!!!
答案 1 :(得分:4)
答案 2 :(得分:3)
在Twitter中,您只能获得user_name
和user_id
。您无法获取email id
,birth date
,gender
等安全性,与Facebook相比,Twitter对提供数据非常保密。
需要参考:link1。
答案 3 :(得分:3)
Twitter为此提供了一个漂亮的框架,您只需将其集成到您的应用中。
https://dev.twitter.com/twitter-kit/ios
它有一个简单的登录方法: -
// Objective-C
TWTRLogInButton* logInButton = [TWTRLogInButton
buttonWithLogInCompletion:
^(TWTRSession* session, NSError* error) {
if (session) {
NSLog(@"signed in as %@", [session userName]);
} else {
NSLog(@"error: %@", [error localizedDescription]);
}
}];
logInButton.center = self.view.center;
[self.view addSubview:logInButton];
这是获取用户个人资料信息的过程: -
/* Get user info */
[[[Twitter sharedInstance] APIClient] loadUserWithID:[session userID]
completion:^(TWTRUser *user,
NSError *error)
{
// handle the response or error
if (![error isEqual:nil]) {
NSLog(@"Twitter info -> user = %@ ",user);
NSString *urlString = [[NSString alloc]initWithString:user.profileImageLargeURL];
NSURL *url = [[NSURL alloc]initWithString:urlString];
NSData *pullTwitterPP = [[NSData alloc]initWithContentsOfURL:url];
UIImage *profImage = [UIImage imageWithData:pullTwitterPP];
} else {
NSLog(@"Twitter error getting profile : %@", [error localizedDescription]);
}
}];
我认为您可以在Twitter Kit Tutorial中找到休息,它还允许通过调用TwitterAuthClient#requestEmail方法请求用户的电子邮件,传入有效的TwitterSession和Callback。
答案 4 :(得分:1)
在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))");
}
}
//To get profile image url and screen name
let twitterClient = TWTRAPIClient(userID: session?.userID)
twitterClient.loadUser(withID: session?.userID ?? "") {(user, error) in
print(user?.profileImageURL ?? "")
print(user?.profileImageLargeURL ?? "")
print(user?.screenName ?? "")
}
let storyboard = self.storyboard?.instantiateViewController(withIdentifier: "SVC") as! SecondViewController
self.navigationController?.pushViewController(storyboard, animated: true)
}else {
print("error: \(String(describing: error?.localizedDescription))");
}
}
}
遵循 Harshil Kotecha 答案。
第1步:进入https://apps.twitter.com/app/
第2步:点击您的应用程序>单击权限标签。
第3步:在此处选中电子邮件框
如果您要注销
let store = TWTRTwitter.sharedInstance().sessionStore
if let userID = store.session()?.userID {
print(store.session()?.userID ?? "")
store.logOutUserID(userID)
print(store.session()?.userID ?? "")
self.navigationController?.popToRootViewController(animated: true)
}