iostwitterslrequest

How to get user info who is getting sign in using twitter SLRequest?


I would like to get user profile information using SLRequest in twitter?

Currently I am coding like

  NSURL *url = [NSURL URLWithString:@"https://api.twitter.com/1.1/users/show.json"];
    NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:@"ali",@"screen_name",nil];

    account = [[ACAccountStore alloc] init];
    ACAccountType *twitterAccountType = [account accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
    NSArray *twitterAccounts = [account accountsWithAccountType:twitterAccountType];

    // Runing on iOS 6
    if ([LoginViewController isTwitterAvailable])
    {
        NSLog(@"In the IFF...... ");
        [account requestAccessToAccountsWithType:twitterAccountType options:NULL completion:^(BOOL granted, NSError *error)
         {
             NSLog(@"in body ");

             if (granted)
             {
                 NSLog(@"in granted ..");


                 SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:SLRequestMethodGET URL:url parameters:params];

                 [request setAccount:[twitterAccounts lastObject]];

                 dispatch_async(dispatch_get_main_queue(), ^
                                {

                                    [NSURLConnection sendAsynchronousRequest:request.preparedURLRequest queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response1, NSData *data, NSError *error)
                                     {
                                         dispatch_async(dispatch_get_main_queue(), ^
                                                        {
                                                            if (data)
                                                            {
                                                                //NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] ;


                                                                //NSLog(@"data:%@",string);

                                                                NSError* error;


                                                                NSDictionary* dicUser = [NSJSONSerialization
                                                                                      JSONObjectWithData:data

                                                                                      options:kNilOptions 
                                                                                      error:&error];

It returns the whole of the info, not profile info,

How can I get profile info of user who is getting sign in ?

Thanks


Solution

  • Try folowing code giving from one of the live project, you can modify as per your existing structure. Let me know in case of any problem.

      _accountStore = [[ACAccountStore alloc] init]; //Declare accountStore as property and initialize
      ACAccountType *accountType = [_accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
        [_accountStore requestAccessToAccountsWithType:accountType options:nil completion:^(BOOL granted, NSError *error){
            if (granted){
                NSArray *accounts = [_accountStore accountsWithAccountType:accountType];
                if (accounts.count > 0){
                    ACAccount *twitterAccount = [accounts lastObject];
                    NSDictionary *dict1 = [twitterAccount dictionaryWithValuesForKeys:[NSArray arrayWithObject:@"properties"]];
                    NSDictionary *properties = dict1[@"properties"];
                    NSDictionary *returnDict = @{@"TwitterID":properties[@"user_id"],@"UserName":twitterAccount.username};
                    NSLog(@"Profile details->%@",properties);
                }else{
                    NSMutableDictionary* details = [NSMutableDictionary dictionary];
                    [details setValue:kTwitterErrorMsg forKey:NSLocalizedDescriptionKey];
                    error = [NSError errorWithDomain:@"Domain" code:error.code userInfo:details];
                    NSLog(@"Error occured->%@",error.localizedDescription);
                }
            } else {
                NSMutableDictionary* details = [NSMutableDictionary dictionary];
                if(error.code == ACErrorAccountNotFound){
                    [details setValue:kTwitterErrorMsg forKey:NSLocalizedDescriptionKey];
                }else if(error.code == ACErrorPermissionDenied || error.code == ACErrorAccessDeniedByProtectionPolicy) {
                    [details setValue:kTwitterAccessDeniedMsg forKey:NSLocalizedDescriptionKey];
                }else {
                    [details setValue:kTwitterErrorMsg forKey:NSLocalizedDescriptionKey];
                }
                error = [NSError errorWithDomain:@"Domain" code:error.code userInfo:details];
                NSLog(@"Error occured->%@",error.localizedDescription);
            }
        }];
    

    Few macros

    #define kTwitterErrorMsg                @"Please set your Twitter account in Settings."
    #define kTwitterAccessDeniedMsg         @"Twitter Access denied."