Twitter登录解析iOS

时间:2015-04-12 14:05:38

标签: ios objective-c twitter parse-platform

我正在构建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函数只在第一次登录时返回空值。

3 个答案:

答案 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
    }
}];

从我的其他答案复制:Twitter Screen Name returning a null in Parse

答案 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等工作将一直有效,直到该块结束。