Недавно мне было поручено изучить, как использовать iOS framework ACAccount и Social для реализации функции facebook post. Достаточно просто получить доступ к учетной записи, настроенной в настройке.Когда мне нужно возобновить ACAccount? Или, как проверить срок действия учетных данных. (Facebook)
if(!_accountStore)
_accountStore = [[ACAccountStore alloc] init];
ACAccountType *facebookTypeAccount = [_accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
// Check if there is any faceboook account
NSArray *accounts = [_accountStore accountsWithAccountType:facebookTypeAccount];
if (![accounts count]) {
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"alert" message:@"No facebook account configured in setting." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
return;
}
[_accountStore requestAccessToAccountsWithType:facebookTypeAccount
options:@{ACFacebookAppIdKey: @"FACEBOOK-APP-ID", ACFacebookPermissionsKey: @[@"email"]}
completion:^(BOOL granted, NSError *error) {
if(granted){
NSArray *accounts = [_accountStore accountsWithAccountType:facebookTypeAccount];
_facebookAccount = [accounts lastObject];
NSLog(@"Success");
}else{
// ouch
NSLog(@"Failed, Error: %@", error);
dispatch_async(dispatch_get_main_queue(), ^{
NSString *message = [NSString stringWithFormat:@"App access denied, please grant access in Setting->Facebook. Error message::%@", error];
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Alert" message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
});
}
}];
После получают доступ приложение к Facebook, он может отправлять сообщения с помощью SLComposeViewController:
- (IBAction)postButtonPressed:(id)sender {
if (!_facebookAccount) {
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"alert" message:@"login first" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
return;
}
SLComposeViewController *fbController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
if([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
SLComposeViewControllerCompletionHandler __block completionHandler=^(SLComposeViewControllerResult result){
[fbController dismissViewControllerAnimated:YES completion:nil];
switch(result){
case SLComposeViewControllerResultCancelled:
default:
{
NSLog(@"Cancelled.....");
}
break;
case SLComposeViewControllerResultDone:
{
NSLog(@"Posted....");
}
break;
}};
[fbController setInitialText:@"Test message"];
[fbController setCompletionHandler:completionHandler];
[self presentViewController:fbController animated:YES completion:nil];
} else {
NSLog(@"no facebook setup");
}
вот мой вопрос. Я обнаружил, что существует метод в ACAccountStore, который используется для обновления с истекшим сроком верительных в качестве ACAccount:
- (void)renewCredentialsForAccount:(ACAccount *)account completion:(ACAccountStoreCredentialRenewalHandler)completionHandler;
Но я даже не знаю, как проверить, истек ли учетные данные, так что я могу обновить его. У кого-нибудь есть идея?
О, кстати, мы просто хотим использовать родную социальную инфраструктуру для выполнения простой работы, такой как публикация сообщения или изображения. Поэтому, если не нужно, мы не будем использовать SDK для facebook.
Если вы знаете что-нибудь о том, как проверить удостоверение является действительным или нет, пожалуйста, оставьте комментарий или отправить ответ, спасибо :)
Обновления 2013.11.20 11:10 утра
Я узнаю что-то из моих опытов по этому вопросу ..
Один не могут получить определенный тип счета из счета магазина, прежде чем он получает доступ к ним, так что я не должен проверять счета счетов до запроса на доступ.
Обновите уведомление, когда приложение, использующее ACAccount, находится в фоновом режиме после изменения учетной записи facebook. В настоящее время я только видел, что изменения права доступа инициируют уведомление.
Если пользователь меняет пароль, система выдает предупреждение, когда пользователь пытается опубликовать что-либо, в котором просят пользователя сменить пароль.
Я думаю, что отслеживать уведомления об изменении учетной записи достаточно для обработки изменений. Я приму первый ответ.
Хорошо, это звучит как пассивный путь. Можно ли это проверить перед публикацией? –