it-swarm.com.ru

iOS Facebook SDK Ошибка Домен com.facebook.sdk Код 2 и Код 7

Я занимаюсь разработкой приложения, которое позволяет пользователю войти через Facebook (используя Facebook SDK). Ошибка появляется, когда пользователь уже вошел в Facebook в настройках iPhone. Если нет - все работает правильно.

NSArray *permissions = [[NSArray alloc] initWithObjects:@"email", nil];
    [FBSession openActiveSessionWithReadPermissions:permissions
                                       allowLoginUI:YES
                                  completionHandler:
     ^(FBSession *session,
       FBSessionState state, NSError *error) {
         [self fbSessionStateChanged:session state:state error:error];
     }];

Я уже пытался установить разрешения в виде массива nil - ничего не изменилось.

Журнал это:

Error Domain=com.facebook.sdk Code=2 "The operation couldn’t be completed.
(com.facebook.sdk error 2.)" UserInfo=0x1552c6c0 
{com.facebook.sdk:ErrorLoginFailedReason=com.facebook.sdk:SystemLoginDisallowedWithoutError,
com.facebook.sdk:ErrorSessionKey=<FBSession: 0xabe8100, state: FBSessionStateClosedLoginFailed,
loginHandler: 0x0, appID: APPIDHERE, urlSchemeSuffix: ,
tokenCachingStrategy:<FBSessionTokenCachingStrategy: 0x14b8f3d0>,
expirationDate: (null), refreshDate: (null),
attemptedRefreshDate: 0001-12-30 00:00:00 +0000, permissions:(null)>}

Иногда появляется ошибка с кодом 7. Я прочитал почти все темы, связанные с этой ошибкой.

Мои шаги были:

  1. Сравните мой идентификатор приложения в файле .plist с идентификатором пакета FB. Они одинаковые !!!
  2. Мое приложение не в режиме песочницы!
  3. Если я изменю с [FBSession openActiveSessionWithReadPermissions:permissions на [FBSession openActiveSessionWithPermissions:permissions-, это сработает. Но это не рекомендуется.
10
Artem Z.

Да, после того, как вы увидите эту ошибку, если вы зайдете в Настройки, вы увидите, что настройка для этого приложения выключена. Но проблема в этом случае заключается в том, что пользователю никогда не предлагалось разрешить доступ, т. Е. Параметр был автоматически отключен при первом доступе. Если пользователь спросил, то, конечно, это понятно, но это не так (это как если бы SDK молча и автоматически нажимал "Не разрешать пользователю"). Вот почему это проблема.

Прежде чем читать дальше, я хочу заметить, что после установки параметра вы не сможете просто повторить процесс для его проверки, поскольку после настройки он никогда не спросит пользователя (даже удаление и переустановка приложения не помогает ). Чтобы проверить эту проблему, необходимо сбросить разрешения, перейдя в "Настройки" -> "Общие" -> "Сброс" -> "Сбросить местоположение и конфиденциальность", прежде чем пытаться повторить это снова.

В ходе тестирования я обнаружил, что если у вас есть offline_access в разрешениях, которые вы запрашиваете в первый раз, то это выдаст ошибку входа в систему (а не запросит пользователя и не установит разрешение в OFF). SDK не проверяет и не сообщает вам, что это разрешение не разрешено; он просто не может войти в систему.

13
Mahesh

Вот как я заставил свою работу работать - передать пустой массив разрешений.

NSArray *permissionsArray = @[];

Тем не менее, убедитесь, что у вас есть разрешения, которые вы хотите настроить на моей странице приложения в Facebook. Мне нужен был только один по умолчанию, поэтому я был в порядке.

У меня такое чувство, что Facebook изменил свой код на стороне сервера. Мое приложение работало нормально, а затем мой логин FB сломался.

3
slammer

Я думаю, что эти коды достаточно расплывчаты, что будет много разных вещей.

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

0
simon_smiley

Убедитесь, что вы вставили в Facebook XML в ваш Info.plist правильно! (как видно здесь)

<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>fb{your-app-id}</string>
    </array>
  </dict>
</array>
<key>FacebookAppID</key>
<string>{your-app-id}</string>
<key>FacebookDisplayName</key>
<string>{your-app-name}</string>
<key>LSApplicationQueriesSchemes</key>
<array>
  <string>fbapi</string>
  <string>fb-messenger-api</string>
  <string>fbauth2</string>
  <string>fbshareextension</string>
</array> 

Я забыл опустить фигурные скобки и заменил внутренний текст, получив ошибку, на которую ссылается этот пост. Убедитесь, что вы полностью заменили "{your-app-id}"!

0
Dane Jordan