Я работаю над двумя разными приложениями для iOS:
- оба они делятся контентом с Facebook.
- оба с iOS 6/7.
- оба с Social Framework
- в обоих из них у меня проблемы с обменом с Facebook.
Итак, я делаю что-то не так, несмотря на то, что пытался следить за всеми видами сообщений, документов и так далее.
Я специально следил за этим сообщением match-stor">Процедура публикации iOS 6 в Facebook заканчивается ошибкой remote_app_id не соответствует сохраненному идентификатору, у нее очень хороший ответ.
Я думаю, что я создал свои приложения в Facebook Developers в порядке, потому что у меня были проблемы (неправильный идентификатор iPhone и ошибка 7), и после сообщения, о котором я упомянул, эти проблемы исчезли.
Когда пользователь нажимает кнопку "Поделиться" в Facebook, я делаю следующее:
- (void) loginWithFacebookWithReadPermissionsWithDelegate:(id<IfcRRSSDelegate>)_delegate
{
self.delegateFB = _delegate;
ACAccountStore *account = [[ACAccountStore alloc]init];
ACAccountType *accountType = [cuenta accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
NSString *facebookKey = MY_FACEBOOK_KEY;
NSMutableArray *permimssions = [[NSMutableArray alloc] init];
[permimssions addObject:@"email"];
self.fbPermission = [NSMutableDictionary dictionaryWithObjectsAndKeys:
facebookKey, ACFacebookAppIdKey,
ACFacebookAudienceFriends, ACFacebookAudienceKey,
permimssions, ACFacebookPermissionsKey,
nil];
[account requestAccessToAccountsWithType:accountType options:self.fbPermission completion:
^(BOOL granted, NSError *error) {
if(granted)
{
NSArray *accounts = [account accountsWithAccountType: accountType];
ACAccount *_facebookAccount = [accounts lastObject];
self.accountFB = _facebookAccount;
ACAccountCredential *credentials = [self.accountFB credential];
self.tokenFB = [credentials oauthToken];
}
else
{
// Show error
}
}];
}
Если этот вход в систему проходит успешно (на самом деле он всегда проходит успешно), я вызываю это:
- (void) loginWithFacebookWithWritePermissionsWithDelegate:(id<IfcRRSSDelegate>)_delegate
{
self.delegateFB = _delegate;
ACAccountStore *account = [[ACAccountStore alloc]init];
ACAccountType *accountType = [cuenta accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
NSString *facebookKey = MY_FACEBOOK_KEY;
NSMutableArray *permimssions = [[NSMutableArray alloc] init];
[permimssions addObject:@"publish_stream"];
[permimssions addObject:@"publish_actions"];
self.fbPermission = [NSMutableDictionary dictionaryWithObjectsAndKeys:
facebookKey, ACFacebookAppIdKey,
ACFacebookAudienceFriends, ACFacebookAudienceKey,
permimssions, ACFacebookPermissionsKey,
nil];
[account requestAccessToAccountsWithType:accountType options:self.fbPermission completion:
^(BOOL granted, NSError *error) {
NSLog(@">>>>ERROR: %@", error);
if(granted)
{
NSArray *accounts = [account accountsWithAccountType: accountType];
ACAccount *_facebookAccount = [accounts lastObject];
self.accountFB = _facebookAccount;
ACAccountCredential *credentials = [self.accountFB credential];
self.tokenFB = [credentials oauthToken];
}
else
{
// Show error
}
}];
}
Этот второй вход в систему НЕ УДАЕТСЯ, я получаю эту ошибку:
ОШИБКА: Ошибка домена = com.apple.accounts Code = 7 «Сервер Facebook не смог выполнить этот запрос на доступ: Недопустимое разрешение: publish_stream» UserInfo = 0xc18d700 {NSLocalizedDescription = Сервер Facebook не смог выполнить этот запрос на доступ: Недопустимое разрешение: publish_stream}
Неверное разрешение: publish_stream??? С трудом могу найти информацию об этой ошибке.
Я пытался прокомментировать это разрешение и имею только publish_action, но когда я пытаюсь опубликовать, я получаю эту новую ошибку:
{
code = 200;
message = "(#200) The user hasn't authorized the application to perform this action";
type = OAuthException;
}
Если бы этот второй вход прошел успешно, я бы вызвал этот код для публикации (но он никогда не вызывается, потому что второй вход не работает):
- (void) postWithFacebookWithMessage:(NSString *)msg
{
if(self.accountFB)
{
NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init];
[parameters setObject: self.accountFB.credential.oauthToken forKey:@"access_token"];
[parameters setObject:msg forKey:@"message"];
NSURL *requestUR = [NSURL URLWithString:@"https://graph.facebook.com/me/feed"];
SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeFacebook
requestMethod:SLRequestMethodPOST
URL:requestURL
parameters:parameters];
request.account = self.accountFB;
[request performRequestWithHandler:^(NSData *data, NSHTTPURLResponse *response, NSError *error) {
if(!error)
{
NSDictionary *list = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
if([list objectForKey:@"error"] != nil)
{
// Try to attempt Renew Credentials
}
else
{
// Everything works
}
dispatch_async(dispatch_get_main_queue(),^{});
}
else
{
// Try to attempt Renew Credentials
}
}];
}
}
Если это важно, я проверил на своей странице в Facebook, в своей деятельности, в приложениях, в этом приложении, и там написано: «Это приложение может публиковаться от вашего имени только для вас».
Любая идея о том, что это происходит?
С уважением!
РЕДАКТИРОВАТЬ: Извините, я сделал важную ошибку, объясняя ошибку, поэтому я отредактировал сообщение: неудачный вызов facebook - это второй вход в систему, а не сообщение.