我正在构建Twitter iOS登录。当尝试获取新用户的屏幕名称时,在第一次登录时,它不会获取屏幕名称,在第二次登录时会显示。我怎样才能在第一次登录时获取屏幕名称?
以下是我正在使用的代码:
[PFTwitterUtils logInWithBlock:^(PFUser *user, NSError *error) {
if (!user) {
NSLog(@"Uh oh. The user cancelled the Twitter login.");
return;
} else if (user.isNew) {
NSLog(@"User signed up and logged in with Twitter!");
NSLog(@"%@", [PFTwitterUtils twitter].screenName);
[self performSegueWithIdentifier: @"hasUsername" sender: self];
} else {
NSLog(@"User logged in with Twitter!");
NSLog(@"%@", [PFTwitterUtils twitter].screenName);
[self performSegueWithIdentifier: @"hasUsername" sender: self];
}
}];
NSLog函数只在第一次登录时返回空值。
答案 0 :(得分:0)
以下是我在使用Twitter登录和Parse时使用的内容:
[PFTwitterUtils logInWithBlock:^(BOOL succeeded, NSError *error) {
if ([PFTwitterUtils isLinkedWithUser:[PFUser currentUser]]) {
NSURL *info = [NSURL URLWithString:@"https://api.twitter.com/1.1/account/settings.json"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:info];
[[PFTwitterUtils twitter] signRequest:request];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
if (!!data) {
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
NSString *userName = dict[@"screen_name"];
userName = [userName stringByReplacingOccurrencesOfString:@"Twitter:" withString:@""];
PFUser *user = [PFUser currentUser];
user[@"Twitter"] = userName;
[user saveEventually];
} else {
//uh oh, no twitter response
}
}];
} else {
//uh oh, failed login
}
}];
答案 1 :(得分:0)
我遇到了同样的问题,在iOS模拟器中添加了一个Twitter帐户,为我修复了它。您可以转到设置 - >执行此操作Twitter和从那里创建或注册。
答案 2 :(得分:0)
您可以调用[PFTwitterUtils twitter] .screenName,但在[PFTwitterUtils loginWithBlock ...]块之后执行此操作。在此之前它没有设置,这就是你必须运行两次的原因。所以:
[PFTwitterUtils logInWithBlock:^(PFUser *user, NSError *error) {
some stuff
}
}];
NSLog(@"%@", [PFTwitterUtils twitter].screenName);
您仍然可以在user.isNew上添加欢迎屏幕等等,但加载[PFTwitterUtils twitter]的屏幕名称,ID等工作将一直有效,直到该块结束。