Идентификатор пользователя Twitter в iOS 5 - PullRequest
17 голосов
/ 31 января 2012

Я использую следующий код для получения информации о пользователе из Twitter в iOS 5.

if ([TWTweetComposeViewController canSendTweet]) 
{
    // Create account store, followed by a Twitter account identifer
    account = [[ACAccountStore alloc] init];
    ACAccountType *accountType = [account accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];

    // Request access from the user to use their Twitter accounts.
    [account requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) 
     {
         // Did user allow us access?
         if (granted == YES)
         {
             // Populate array with all available Twitter accounts
             arrayOfAccounts = [account accountsWithAccountType:accountType];
             [arrayOfAccounts retain];

             // Populate the tableview
             if ([arrayOfAccounts count] > 0) 
                 [self performSelectorOnMainThread:@selector(updateTableview) withObject:NULL waitUntilDone:NO];
         }
     }];
}

//

-(void)updateTableview
{

    numberOfTwitterAccounts = [arrayOfAccounts count];
    NSLog(@"Twiter details-- %@",[arrayOfAccounts objectAtIndex:0]);

}

На моей консоли NSLog выводится следующее:

Twiter details-- type:com.apple.twitter  
identifier: E8591841-2AE0-4FC3-8ED8-F286BE7A36B0
accountDescription: @Sadoo55
username: sadukoyghdkwed@gmail.com
objectID: x-coredata://F8059811-CFB2-4E20-BD88-F4D06A43EF11/Account/p8
enabledDataclasses: {(
)}
properties: {
  "user_id" = 308905856;
}
parentAccount: (null)
owningBundleID:com.apple.Preferences

Я хочу получить "user_id" из этого. Как я могу получить "user_id" (т.е. 308905856)?

Ответы [ 4 ]

20 голосов
/ 07 марта 2012

Вот что я сделал, чтобы получить user_id в iOS5 и iOS6.

    NSDictionary *tempDict = [[NSMutableDictionary alloc] initWithDictionary: 
                                     [twitterAccount dictionaryWithValuesForKeys:[NSArray arrayWithObject:@"properties"]]];
    NSString *tempUserID = [[tempDict objectForKey:@"properties"] objectForKey:@"user_id"];
16 голосов
/ 09 февраля 2012

Получение идентификатора пользователя и / или имени пользователя намного проще, чем это.

iOS 7 версия

ACAccount *account = accountsArray[0];
NSString *userID = ((NSDictionary*)[account valueForKey:@"properties"])[@"user_id"];

или

ACAccount *twitterAccount = accountsArray[0];
NSRange range = [account.description rangeOfString:@" [0-9]{7,8}"
                                           options:NSRegularExpressionSearch];
if (range.location != NSNotFound) {
  NSString *userID = [[account.description substringWithRange:range] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
  NSLog(@"User ID: %@", userID);
}

Версия iOS 5

Существовал недокументированный метод ACAccount, называемый accountProperties типа NSDictionary с ключом user_id.

ACAccount properties

ACAccount *twitterAccount = [accountsArray objectAtIndex:0];
NSString *userID = [[twitterAccount accountProperties] objectForKey:@"user_id"];
NSString *username = twitterAccount.username;

** Не работает под iOS6, поскольку метод больше не определен.

14 голосов
/ 07 сентября 2012

Вы можете представить объект учетной записи как словарь и выполнить это:

ACAccount *account = [twitterAccounts objectAtIndex:0];
NSString *userID = [account valueForKeyPath:@"properties.user_id"];

Это вернет идентификатор_пользователя

0 голосов
/ 31 января 2012

Полагаю, проблема в потоке вашего кодирования. Пожалуйста, проверьте его по ссылкам ниже. Эта ошибка, по-видимому, является ошибкой, более связанной с платформой. Я бы посоветовал вам пройти следующий урок, который я нашел лучше всего в Интернете:

http://iosdevelopertips.com/core-services/ios-5-twitter-framework-part-1.html

Плюс, этот также потрясающий с большим количеством деталей и упрощенным объяснением от Рэя. Я следую за его блогом для того же. http://www.raywenderlich.com/5519/beginning-twitter-in-ios-5

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...