8
votes

Nom de l'écran Twitter renvoyant un null en parsemes

Se connecter via Twitter et essayer d'obtenir le nom de l'écran des utilisateurs. Le nom de l'écran produit une valeur nulle à chaque fois. Des idées?

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

        }


2 commentaires

Je répondrai ci-dessous, mais si vous utilisez LOGINWIPLOCK, vous ne devez pas utiliser la première ligne Pfuser * CurycuerUser = [Pfuser Curycl-user] car personne n'est déjà connecté, il n'y a pas d'utilisateur actuel!


@ SPOGEBOB92 Avez-vous été capable de le résoudre? J'ai le même problème et je ne peux pas comprendre.


3 Réponses :


3
votes

Voici comment je le fais:

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


6 commentaires

Avec ce code, j'ai reçu cette erreur: des types de pointeur de bloc incompatibles envoiant 'void (^) (BOOL, NSError * __ forts)' au paramètre de type 'PfuserResultBlock' (AKA 'VOID (^) (Pfuser * __ forte, NSERROR * __ FORT)' ' )


oh oops, il devrait être [Pftwitterutils Loginwithblock: ^ (Pfuser * User, Nserror * erreur) {}]; Mon mauvais sur celui-là.


C'est vraiment étrange, parfois il parvient à saisir les données, d'autres fois, ce n'est pas le cas. Des idées?


Quand est-ce que ça et quand quand n'est-ce pas? au hasard?


Cela me demande de vous connecter deux fois avant de pouvoir obtenir le nom de l'écran.


Cette solution fonctionne toujours pour moi avec la version la plus mise à jour de Parse. Vous devez avoir quelque chose de mettre en place de manière incorrecte.



0
votes

Essayez de configurer cela dans le portail Twitter. Il vous donnera des options pour lesquelles des autorisations Votre application a (ce qui signifie que vous devrez peut-être pouvoir réaliser un nom d'utilisateur manuellement dans le tableau de bord de Twitter).


0 commentaires

0
votes
- (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];
         }
     }];
}

0 commentaires