2015-07-04 4 views
-3

У меня есть совместное использование Facebook, используя SLRequest в моем приложении iOS. Все работает нормально, но каждый раз, когда я хочу публиковать сообщения, пользователю отображается подсказка о том, разрешено ли приложению отправлять сообщение от его имени.Дайте приложение iOS постоянное разрешение на публикацию на Facebook

По некоторым причинам (я отправляю с Apple Watch) было бы важно получить постоянное разрешение на публикацию. В противном случае это будет очень плохой пользовательский интерфейс.

Таким образом, я ищу возможность постоянно разрешать публикацию имени пользователя для моего приложения.

- (void)postToFacebook:(NSString *)postMessage toAudience:(int)audienceIndex { 

ACAccountStore *accountStore = [[ACAccountStore alloc] init]; 

ACAccountType *accountTypeFacebook = 
[accountStore accountTypeWithAccountTypeIdentifier: 
ACAccountTypeIdentifierFacebook]; 

NSArray *audienceArray = [[NSArray alloc] initWithObjects:@"ACFacebookAudienceEveryone", @"ACFacebookAudienceFriends", @"ACFacebookAudienceOnlyMe", nil]; 

NSDictionary *options = @{ACFacebookAppIdKey: @"<HERE'S MY FACEBOOK APP ID>", ACFacebookPermissionsKey: @[@"publish_actions"], ACFacebookAudienceKey: [audienceArray objectAtIndex:audienceIndex]}; 

[accountStore requestAccessToAccountsWithType:accountTypeFacebook options:options completion:^(BOOL granted, NSError *error) { 

    if(granted) { 

     NSArray *accounts = [accountStore accountsWithAccountType:accountTypeFacebook]; 
     ACAccount *facebookAccount = [accounts lastObject]; 

     NSDictionary *parameters = 
     @{@"access_token":facebookAccount.credential.oauthToken, 
      @"message": postMessage}; 

     NSURL *feedURL = [NSURL URLWithString:@"https://graph.facebook.com/me/feed"]; 

     SLRequest *feedRequest = [SLRequest requestForServiceType:SLServiceTypeFacebook requestMethod:SLRequestMethodPOST URL:feedURL parameters:parameters]; 

     [feedRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { 
      NSLog(@"Request failed, %@", [urlResponse description]); 
     }]; 

    } else { 

     NSLog(@"Access Denied"); 
     NSLog(@"[%@]",[error localizedDescription]); 

    } 
}]; 

} 

ответ

1

К сожалению, понятия «постоянное разрешение на публикацию в Facebook» больше не существует.

Разрешение offline_access устарело и удалено 5 декабря 2012 г. (первоначально запланировано на 5 июля).

См: Developer Docs > Migration > Remove offline_access Permission

Он был заменен на новый 60-дневный долгосрочного маркера доступа.

См: Developer Docs > Facebook Login > Access Tokens

Краткосрочные и долгосрочные Жетоны

маркеры доступа пользователей в двух формах: короткоживущих токенов и долгоживущих лексем. Краткосрочные токены обычно имеют срок службы около час или два, а долгоживущие токены обычно имеют срок службы около 60 дней. Вы не должны зависеть от этих жизней, оставшихся до , - срок жизни может измениться без предупреждения или досрочно. См. Ниже ошибок при обработке.

Доступ к токенам, созданным через веб-логин, является недолговечными токенами, но вы можете обновить их до долгоживущих токенов. Преобразование короткоживущих токенов в долгоживущие токены далее рассматривается в этом документе под заголовком . Истекает и продлевает токены.

Мобильные приложения, использующие мобильные SDK от Facebook, получают долгоживущие токены.

По существу, мобильным приложениям, использующим новые SDK, автоматически предоставляется пользователь access_token с более длительным истечением срока действия. Пока пользователь пересматривает ваше приложение в течение 60 дней, вам будет предоставлен новый пользователь access_token со свежим сроком действия. Если ваши пользователи ждут более 60 дней, им придется снова войти в систему.