-->

iOS-How to get Twitter account access?

2020-07-23 06:20发布

问题:

I am trying to use twitter api and getting response

{"errors":[{"message":"Bad Authentication data","code":215}]}

I am using code from twitter site I have already setup twitter account in simulator and also tried on device (also retried many times by doing log out and relog-in) but I am unable to get access granted

[self.accountStore
     requestAccessToAccountsWithType:twitterAccountType
     options:NULL
     completion:^(BOOL granted, NSError *error) {

           if (granted) {
             //  getting granted false i.e. I am not reaching here
           }
      }

So,what I need to do additionally?any comment,answer is appreciated.

回答1:

Gonna answer own question,may it helps to other.

Though I am using example from twitter site https://dev.twitter.com/docs/ios/making-api-requests-slrequest It works fine except the ACAccountStore object allocation.

I just re-allocate the ACAccountStore wherever I require.

- (void)fetchTimelineForUser:(NSString *)username
{
   ACAccountStore *accountStore=[[ACAccountStore alloc]init];
  //  Step 0: Check that the user has local Twitter accounts
  if ([self userHasAccessToTwitter]) {

    //  Step 1:  Obtain access to the user's Twitter accounts
    ACAccountType *twitterAccountType = [accountStore
                                         accountTypeWithAccountTypeIdentifier:
                                         ACAccountTypeIdentifierTwitter];
    [accountStore
     requestAccessToAccountsWithType:twitterAccountType
     options:NULL
     completion:^(BOOL granted, NSError *error) {
       if (granted) {
         //  Step 2:  Create a request
         NSArray *twitterAccounts =
         [accountStore accountsWithAccountType:twitterAccountType];
         NSURL *url = [NSURL URLWithString:@"https://api.twitter.com"
                       @"/1.1/statuses/user_timeline.json"];
         NSDictionary *params = @{@"screen_name" : username,
                                  @"include_rts" : @"0",
                                  @"trim_user" : @"1",
                                  @"count" : @"1"};
         SLRequest *request =
         [SLRequest requestForServiceType:SLServiceTypeTwitter
                            requestMethod:SLRequestMethodGET
                                      URL:url
                               parameters:params];

         //  Attach an account to the request
         [request setAccount:[twitterAccounts lastObject]];

         //  Step 3:  Execute the request
         [request performRequestWithHandler:^(NSData *responseData,
                                              NSHTTPURLResponse *urlResponse,
                                              NSError *error) {
           if (responseData) {
             if (urlResponse.statusCode >= 200 && urlResponse.statusCode < 300) {
               NSError *jsonError;
               NSDictionary *timelineData =
               [NSJSONSerialization
                JSONObjectWithData:responseData
                options:NSJSONReadingAllowFragments error:&jsonError];

               if (timelineData) {
                 NSLog(@"Timeline Response: %@\n", timelineData);
               }
               else {
                 // Our JSON deserialization went awry
                 NSLog(@"JSON Error: %@", [jsonError localizedDescription]);
               }
             }
             else {
               // The server did not respond successfully... were we rate-limited?
               NSLog(@"The response status code is %d", urlResponse.statusCode);
             }
           }
         }];
       }
       else {
         // Access was not granted, or an error occurred
         NSLog(@"%@", [error localizedDescription]);
       }
     }];
  }
}


回答2:

I suggest Parse.com for better and easier implementing Twitter and Facebook integration. you can have them both with a few lines of codes and Parse does the rest.