Подтвердить что ты не робот

IOS 6 - Процедура обмена Facebook отключается с ошибкой "Прокси-приложение еще не установлено"

Хотя, есть такой вопрос Facebook Ошибка (7) iOS 6 уже закрыт без ответа! При получении доступа к учетной записи пользователя facebook у меня есть ошибка: error is: Error Domain=com.apple.accounts Code=7 "The Facebook server could not fulfill this access request: The proxied app is not already installed." UserInfo=0xa260270 {NSLocalizedDescription=The Facebook server could not fulfill this access request: The proxied app is not already installed.}

Я выполняю такой запрос:

self.statusLabel.text = @"Waiting for authorization...";
if (self.accountStore == nil) {
    self.accountStore = [[ACAccountStore alloc] init];
}   
ACAccountType * facebookAccountType = [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];

NSDictionary * dict = @{ACFacebookAppIdKey : FB_APP_ID, ACFacebookAudienceKey : ACFacebookAudienceEveryone};
[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);
    }
}];

Что означает эта ошибка?

4b9b3361

Ответ 1

Я решил эту проблему! Это потому, что я не передаю массив разрешений! Хотя класс ACAccountStore утверждает, что этот параметр является необязательным, это не так! enter image description here

Более того, приложение может запускать и запрашивать базовые разрешения (как это подразумевается)!

enter image description here

Итак, вы всегда должны передавать массив разрешений.

Здесь также описание кодов ошибок, возвращаемых магазином учетной записи:

typedef enum ACErrorCode {
   ACErrorUnknown = 1,
   ACErrorAccountMissingRequiredProperty,
   ACErrorAccountAuthenticationFailed,
   ACErrorAccountTypeInvalid,
   ACErrorAccountAlreadyExists,
   ACErrorAccountNotFound,
   ACErrorPermissionDenied,
   ACErrorAccessInfoInvalid
} ACErrorCode;

(у меня здесь ACErrorPermissionDenied)

Ответ 2

У нас была та же проблема, и после более пристального изучения документации по документации iOS facebook

https://developers.facebook.com/docs/howtos/ios-6/

Я заметил следующий абзац:

Примечание. Чтобы использовать собственный autos для iOS 6, приложениям необходимо изменить способ, которым они запрашивают разрешения у пользователей - приложения должны отделять свои запросы на разрешения на чтение и запись.

Я должен был прочитать это несколько раз, но в нем было решение:

Вам нужно сделать несколько запросов на доступ, если вы хотите предоставить запись (публиковать доступ). Итак, теперь мы сначала попросим разрешение "email" получить разрешение на чтение, а затем для "publish_action", чтобы иметь возможность отправлять сообщения на график.

Ответ 3

Сообщение об ошибке не ясно, так как "приложение" может быть вашим приложением для iOS? Facebook.app по телефону? Facebook приложение? "Прокси-приложение" - это приложение Facebook, а "еще не установлено" означает, что он еще не связан с пользователем Facebook в режиме разрешений.

В первый раз, когда ваше приложение Facebook подключается к учетной записи пользователей Facebook, вы должны указать базовые информационные значения в своем ключе ACFacebookPermissionsKey словаря параметров. Другие Facebook SDK прошлые и настоящие, такие как библиотеки Javascript или PHP, по умолчанию предоставляют основную информацию в качестве ключа, поэтому вам никогда не приходилось это делать. Кажется, что встроенная интеграция в iOS не делает этого, поэтому, если пользователь сначала подключит ваше приложение к своей учетной записи Facebook без каких-либо разрешений, вы получите эту ошибку.

После того, как вам будет предоставлен доступ, то есть после того, как пользователь подключится к приложению в своих настройках конфиденциальности в Интернете, ACFacebookPermissionsKey сделает это как документ Apple, станет необязательным.

Все это немного запутывает, когда вы начинаете пытаться использовать встроенную интеграцию Facebook...

Используя встроенную интеграцию Facebook, вы должны предоставить один из следующих ключей, которые являются основными информационными клавишами: email, user_birthday или user_location.

Чтобы указать Facebook (источник):

Чтобы создать это базовое соединение, используя собственный Auth Dialog iOS 6, приложения должны запрашивать доступ к основной информации профиля пользователя по запрашивая одно из адресов электронной почты, user_birthday или user_location.

Ответ 4

После того, как эта ошибка возникла на одном из моих устройств (после просмотра правильного ожидаемого представления iOS-оповещения с просьбой одобрить доступ Facebook к моему приложению):

'Сервер Facebook не смог выполнить этот запрос доступа: Недопустимый идентификатор приложения.'

Наконец-то я нашел проблему.

Несмотря на то, что изначально возникла проблема с установкой приложения Facebook на сайте разработчика FB, выяснилось, что учетная запись iOS Facebook моего устройства больше не имеет действительного пароля, связанного с ней - это может быть счастливо, когда пользователи восстанавливают резервную копию iOS новое устройство. Как только я разобрался, что в настройках моего устройства все работало, как ожидалось.

У меня не возникало проблем с запросом "publish_stream" в первом запросе доступа к разрешениям FB. На самом деле я считаю, что настоящая проблема заключается в том, что сообщения об ошибках настолько случайны, что они не помогают разработчикам найти источник ошибки, которые мы испытываем благодаря отсутствию единства Apple и Facebook!

Ответ 5

Еще несколько вещей, которые можно попробовать, кроме приведенных выше, - проверить настройки своего приложения на facebook.com здесь.

https://developers.facebook.com/apps/<*APP_ID*>/summary
  • Убедитесь, что для режима SandBox установлено значение Выкл.

    Кроме того,

    В разделе "Выберите, как ваше приложение интегрируется с Facebook"

    Выбрать- > Родное приложение iOS

  • Задайте свой идентификатор пакета
  • Вы можете установить любое временное целочисленное значение для идентификатора магазина iPhone/iPad App
  • Установите учетную запись Facebook в Включено
  • Перечисленные платформы - это собственное приложение для iPhone и собственное приложение для iPad.

Сохраните изменения и попробуйте через некоторое время, так как для синхронизации изменений на всех серверах может потребоваться несколько минут.