2015-04-11 14 views
8

Đăng nhập qua Twitter và cố gắng lấy tên màn hình Người dùng. Tên màn hình tạo ra một giá trị null mỗi lần. Bất kỳ ý tưởng?Tên màn hình Twitter trả về giá trị rỗng trong Parse

PFUser *currentUser = [PFUser currentUser]; 
    [PFTwitterUtils logInWithBlock:^(PFUser *user, NSError *error) { 
     if (!user) { 
      NSLog(@"Uh oh. The user cancelled the Twitter login."); 
      return; 
     } else if (user.isNew) { 
      twitterScreenName = [PFTwitterUtils twitter].screenName; 
      NSLog(@"%@",[PFTwitterUtils twitter].screenName); 
      NSString * requestString = [NSString stringWithFormat:@"https://api.twitter.com/1.1/users/show.json?screen_name=%@", twitterScreenName ]; 

             NSURL *verify = [NSURL URLWithString:requestString]; 
             NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:verify]; 
             [[PFTwitterUtils twitter] signRequest:request]; 

             [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { 
       NSError *error; 
       NSDictionary* result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error]; 
       if (!error) { 

        user.username =twitterScreenName; 
        user[@"name"]= result[@"name"]; 
        user[@"profileDescription"] = result[@"description"]; 
        user[@"imageURL"] = [result[@"profile_image_url_https"] stringByReplacingOccurrencesOfString:@"_normal" withString:@"_bigger"]; 
        [user saveEventually]; 
       } 
      }]; 
      [self performSegueWithIdentifier: @"username" sender: self]; 

     } 
+0

tôi sẽ trả lời dưới đây, nhưng nếu bạn đang sử dụng logInWithBlock, bạn không nên sử dụng dòng đầu tiên PFUser * CurrentUser = [PFUser CurrentUser] vì không ai được đăng nhập chưa vì vậy không có người sử dụng hiện tại ! – AlexKoren

+0

@ spogebob92 bạn có thể giải quyết nó không? Tôi có cùng một vấn đề và không thể hiểu được. – Cyprian

Trả lời

3

Sau đây là cách tôi làm điều đó:

[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 
    } 
}]; 
+0

Với mã đó tôi gặp phải lỗi này: Kiểu con trỏ khối không tương thích gửi 'void (^) (BOOL, NSError * __ strong)' tới tham số kiểu 'PFUserResultBlock' (aka 'void (^) (PFUser * __ strong, NSError * __strong) ') – spogebob92

+0

oh oops, nó phải là [PFTwitterUtils logInWithBlock:^(người dùng PFUser *, lỗi NSError *) { }]; Tồi tệ của tôi về điều đó. – AlexKoren

+0

Nó thực sự kỳ lạ, đôi khi nó quản lý để lấy dữ liệu, lần khác nó không. Bất kỳ ý tưởng? – spogebob92

0

Hãy thử cấu hình này trong cổng Twitter. Nó sẽ cung cấp cho bạn các tùy chọn cho các quyền mà ứng dụng của bạn có (nghĩa là bạn có thể phải bật trả lại tên người dùng theo cách thủ công từ bên trong trang tổng quan của Twitter).

0
- (IBAction)TWloginPress:(id)sender { 
    [activityview setHidden:NO]; 
    [activityview startAnimating]; 
    [[Twitter sharedInstance] logInWithCompletion:^ 
    (TWTRSession *session, NSError *error) { 
     if (session) { 
       [self signupUser:session.userName email:nil loggedinvia:@"TWITTER"]; 
     } else { 
      NSLog(@"error: %@", [error localizedDescription]); 
      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"There was some problem with signing you with twitter. Please try again." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
      [alert show]; 
     } 
    }]; 
} 
Các vấn đề liên quan