2015-04-11 8 views
8

Twitter üzerinden giriş yapma ve Kullanıcılar ekran adını almaya çalışıyorum. Ekran adı her seferinde boş değer üretir. Herhangi bir fikir? İşteTwitter Ekran Adı Parise içinde bir boş değer döndürme

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

aşağıda cevap olacak ama logInWithBlock kullanıyorsanız, ilk satırı PFUser * CurrentUser = [PFUser CurrentUser] kullanarak olmamalıdır hiçbir geçerli kullanıcı ! – AlexKoren

+0

@ spogebob92 bunu çözebildiniz mi? Aynı problemim var ve anlayamıyorum. – Cyprian

cevap

3

ben böyle yaparız:

[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

Bu kod ile bu hatayı alıyorum: 'PFUserResultBlock' (aka 'void (^) (PFUser * __ strong, NSError *) tipine parametresine' void (^) (BOOL, NSError * __ strong) 'gönderen, uyumsuz blok işaretçi türleri __strong) ') – spogebob92

+0

oh oops, [PFTwitterUtils logInWithBlock:^(PFUser * kullanıcısı, NSError * hatası) olmalıdır { }]; Benim üzerimde kötü. – AlexKoren

+0

Gerçekten garip, bazen veri kapmak için yönetir, diğer zamanlarda değil. Herhangi bir fikir? – spogebob92

0

Heyecan portalda bu yapılandırmadan deneyin. Uygulamanızın sahip olduğu izinler için size seçenekler sunacaktır (bu, Twitter'ın kontrol panelinden manuel olarak bir kullanıcı adı döndürmeyi etkinleştirmeniz gerekebilir) anlamına gelir. henüz hiç kimse kaydedilir çünkü

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