Проверьте, не изменился ли аккаунт Facebook/Twitter в настройках iOS.

У меня есть приложение, которое должно проверять учетные записи Facebook и Twitter, хранящиеся в настройках iOS. Я могу получить оба успешно. Мой вопрос: как я могу проверить, удалил ли пользователь учетную запись и вставил новую в настройках iOS. Если пользователь возвращается в приложение, ему необходимо проверить новую учетную запись, сохраненную пользователем.

Это приложение, в которое я пытаюсь встроить свое приложение.

введите здесь описание изображения


person SleepNot    schedule 29.05.2014    source источник


Ответы (2)


Следите за «ACAccountStoreDidChangeNotification». например.

- (void)viewDidLoad
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshAccounts:) name:ACAccountStoreDidChangeNotification object:nil];
}

- (void)refreshAccounts:(NSNotification *)note
{
    NSLog(@"Refreshing Accounts");
    //whatever code you want 
}
person gro    schedule 29.05.2014
comment
Кажется, это не работает для меня. Можете ли вы опубликовать весь код. Я попытался добавить NSNotification, но, похоже, он не срабатывает, когда я удаляю учетные записи в меню «Настройки» > «FB/Twitter». - person SleepNot; 29.05.2014
comment
Обновил код. Когда ваше приложение находится в фоновом режиме, чтобы позволить пользователю изменять настройки, изменение доступа к данной социальной учетной записи автоматически инициирует это событие и выполняет любой код до возобновления работы вашего приложения. - person gro; 29.05.2014
comment
Я пробовал это, но не работает для меня. Просто поместите NSLog внутрь refreshAccounts, но он не запускается. Могу ли я что-то упустить? - person SleepNot; 29.05.2014
comment
Убедитесь, что это двоеточие здесь... @selector(refreshAccounts:) - person gro; 29.05.2014
comment
Это все еще не работает. Поместите точно такой же код, который вы предоставили, перешел к viewController в моем приложении. Зашел в настройки > Твиттер > Удаленный аккаунт. Вернулся в приложение, нет сообщения в журнале. - person SleepNot; 29.05.2014
comment
Тогда не уверен, в чем дело. Работает на меня. У меня есть оба контроллера основного вида, fwiw. Я предполагаю, что вы можете видеть другие записи NSLog в своей консоли. - person gro; 29.05.2014
comment
Кроме того, я предположил, что вы добавили Social.framework и Accounts.framework в проект и импортировали заголовки? - person gro; 29.05.2014
comment
Наконец-то я заработал. Мне просто нужно было передать ACAccountStore в качестве параметра объекта для NSNotificationCenter. Спасибо за помощь @gro - person SleepNot; 29.05.2014

Возьмем, к примеру, твиттер-аккаунт.

Как насчет добавления следующей функции, как показано ниже? Вы можете получить учетную запись снова после того, как обнаружите, что информация об учетной записи изменилась.

- (void)checkTwitterAccountUpdate
{
    ACAccountStore *accountStore = [[ACAccountStore alloc] init];
    ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
    NSArray *accounts = [accountStore accountsWithAccountType:accountType];
    ACAccount *twitterAccount = [accounts lastObject];
    NSString *localTwitterName = [[NSUserDefaults standardUserDefaults] objectForKey:@"kTwitterKey"];
    if([localTwitterName length] > 0)
    {
        if(![twitterAccount.username isEqualToString:localTwitterName])
        {
            NSLog(@"Account did change");
        }
    }
    else
    {
        [accountStore requestAccessToAccountsWithType:accountType options:nil completion:^(BOOL granted, NSError *error) {
            if(granted) {
                NSArray *accounts = [accountStore accountsWithAccountType:accountType];
                ACAccount *twitterAccount = [accounts lastObject];
                NSLog(@"%@", twitterAccount.username);
                [[NSUserDefaults standardUserDefaults] setObject:twitterAccount.username forKey:@"kTwitterKey"];
                [[NSUserDefaults standardUserDefaults] synchronize];
            }
        }];
    }

}

in

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    [self checkTwitterAccountUpdate];
}
person Hsin Chang    schedule 29.05.2014
comment
Я бы хотел сделать requestAccessToAccountsWithType только один раз... Возможно, после этого сохраните ACAccount. Но я не могу сохранить ACAccount в стандартном UserDefaults. - person SleepNot; 29.05.2014
comment
Как насчет того, чтобы установить имя пользователя nsuserdefault? Просто обновил код. - person Hsin Chang; 29.05.2014