Процедура отправки сообщений iOS 6 Facebook заканчивается ошибкой "remote_app_id не соответствует сохраненному id" - программирование
Подтвердить что ты не робот

Процедура отправки сообщений iOS 6 Facebook заканчивается ошибкой "remote_app_id не соответствует сохраненному id"

Я пытаюсь выполнить простую процедуру проводки:

- (IBAction)directPostClick:(id)sender {
    self.statusLabel.text = @"Waiting for authorization...";
    if (self.accountStore == nil) {
        self.accountStore = [[ACAccountStore alloc] init];
    }   
    ACAccountType * facebookAccountType = [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
    NSArray * permissions = @[@"publish_stream", @"user_checkins", @"publish_checkins", @"user_likes", @"user_videos"];
    NSDictionary * dict = @{ACFacebookAppIdKey : @"My app id here", ACFacebookPermissionsKey : permissions, ACFacebookAudienceKey : ACFacebookAudienceOnlyMe};
    [self.accountStore requestAccessToAccountsWithType:facebookAccountType options:dict completion:^(BOOL granted, NSError *error) {
        __block NSString * statusText = nil;
        if (granted) {
            statusText = @"Logged in";
            NSArray * accounts = [self.accountStore accountsWithAccountType:facebookAccountType];
            self.facebookAccount = [accounts lastObject];
            NSLog(@"account is: %@", self.facebookAccount);
            self.statusLabel.text = statusText;
            [self postToFeed];
        }
        else {
            self.statusLabel.text = @"Login failed";
            NSLog(@"error is: %@", error);
        }
    }];
} 

Редакция:  Проблема в том, что когда я нажимаю кнопку alertView OK (не разрешаю, тоже не работает) ничего не происходит! - Это поведение теперь изменилось с этим iOS 6 Процедура отправки Facebook заканчивается с "remote_app_id" не соответствует сохраненному идентификатору " Поэтому вместо того, чтобы просто "ничего не случилось", у меня есть ошибка "Сервер Facebook не смог выполнить этот запрос доступа: remote_app_id не соответствует сохраненному идентификатору"

enter image description here

Итак, кажется, что обработчик click view alert ничего не делает, мое завершениеHandler никогда не вызывается. У меня уже есть аналогичная проблема: iOS 6 Социальная интеграция - перейдите в раздел настроек И я думаю, что это та же проблема. Что вы, ребята, думаете об этом? Постскриптум Я работаю на MAC mini, OS X 10.8.1 с последним xcode 4.5 (4G182) и с помощью симулятора iPhone 6.0.

ДОБАВЛЕНО: По запросу Бьорна, добавляющего метод postToFeed, хотя он никогда не вызывается:

- (void)postToFeed {
    NSDictionary * parameters = @{@"message" : @"Hello world!"};
    NSURL * feedUrl = [NSURL URLWithString:@"https://graph.facebook.com/me/feed"];
    SLRequest * request = [SLRequest requestForServiceType:SLServiceTypeFacebook requestMethod:SLRequestMethodPOST URL:feedUrl parameters:parameters];
    request.account = self.facebookAccount;
    [request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
        dispatch_async(dispatch_get_main_queue(), ^{
            self.statusLabel.text = @"Posted!";
        });
    }];
}
4b9b3361

Ответ 1

У меня также возникли некоторые трудности при работе с платформой учетных записей и интеграцией с Facebook. Вот что я узнал и как я начал работать.

1. Убедитесь, что вы правильно настроили приложение на Facebook.
Вам нужно установить, как ваше приложение интегрируется с Facebook в Native iOS App и вводит идентификатор Bundle вашего приложения в указанное поле. (Изменить: обратите внимание, что идентификаторы пакетов чувствительны к регистру). Теперь вы можете установить для iTunes ID значение 0. Включите функцию входа в Facebook и установите для параметра "Тип приложения" вкладку расширенных настроек значение Родной/Рабочий стол.
 Также установите App Secret в Client на Нет.

Если один или несколько из этих параметров установлены неправильно, скорее всего вы получите сообщение об ошибке The Facebook server could not fulfill this access request: remote_app_id does not match stored id.

(Edit: вы также должны убедиться, что песочница отключена.)

2. Установка приложения Facebook в первый раз
При первой установке приложения через встроенную интеграцию с Facebook на iOS (и Mac OS X тоже) вы должны запросить только базовое разрешение на чтение! Здесь нет ничего, кроме email, user_birthday и user_location. Использование user_about_me, которое также является основным разрешением на чтение в соответствии с документацией в Facebook, не работает. Это довольно запутанно, если вы ранее работали с SDK Facebook JavaScript или PHP PHP SDK, потому что он запрашивает базовые разрешения по умолчанию, не делая что-то. Facebook также обновил свою документацию с помощью краткого пошагового руководства по как использовать новый SDK Facebook на iOS 6.

3. Запрос дополнительных разрешений
Важно знать, что вы не можете запрашивать разрешения на чтение и запись одновременно. Это также что-то испытало разработчиков SDK в Facebook, может показаться запутанным. Запрос разрешения read_stream вместе с разрешением publish_stream приведет к сбою запроса, что приведет к ошибке. Приложение не может использовать разрешения для чтения и записи одновременно.

Так как Facebook действительно не различает разрешения на чтение и запись в Ссылка на разрешение, вы должны сами идентифицировать права на запись. Обычно они имеют префикс manage_*, publish_*, create_* или суффиксом *_management.

Facebook также не рекомендует запрашивать дополнительные разрешения сразу же после получения базовых разрешений. В документации говорится: "Теперь вам требуется запрашивать разрешение на чтение и публикацию отдельно (и в этом порядке). Скорее всего, вы будете запрашивать разрешения на чтение для персонализации, когда приложение запускается, и пользователь сначала регистрируется. Позже, если это необходимо, ваше приложение может запрашивать разрешения на публикацию, когда оно намеревается отправлять данные в Facebook. [...] Просить двух типов отдельно также значительно повышает шансы на то, что пользователи будут предоставлять разрешения на публикацию, так как ваше приложение будет искать их только в то время, когда оно им понадобится, скорее всего, когда у пользователя будет более сильное намерение" .

4. Пример кода
Следующий пример кода должен работать на iOS и Mac OS X:

ACAccountType * facebookAccountType = [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];

// At first, we only ask for the basic read permission
NSArray * permissions = @[@"email"];

NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"My app id here", ACFacebookAppIdKey, permissions, ACFacebookPermissionsKey, ACFacebookAudienceOnlyMe, ACFacebookAudienceKey, nil];

[self.accountStore requestAccessToAccountsWithType:facebookAccountType options:dict completion:^(BOOL granted, NSError *error) {
    if (granted && error == nil) {
        /** 
        * The user granted us the basic read permission.
        * Now we can ask for more permissions
        **/
        NSArray *readPermissions = @[@"read_stream", @"read_friendlists"];
        [dict setObject:readPermissions forKey: ACFacebookPermissionsKey];

        [self.accountStore requestAccessToAccountsWithType:facebookAccountType options:dict completion:^(BOOL granted, NSError *error) {
            if(granted && error == nil) {
                /**
                * We now should have some read permission
                * Now we may ask for write permissions or
                    * do something else.
                **/
            } else {
                NSLog(@"error is: %@",[error description]);
            }
        }];
    } else {
        NSLog(@"error is: %@",[error description]);
    }
}];

Ответ 2

убедитесь, что sandbox mode не активирован, если вы пытаетесь получить доступ к учетной записи facebook из приложения для пользователей, не являющихся разработчиками.