IOS Facebook SDK Ошибка домена com.facebook.sdk Код 2 и код 7
Я разрабатываю приложение, которое позволяет пользователю входить в систему через 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. Я прочитал почти все темы, связанные с этой ошибкой.
Мои шаги:
- Сравните идентификатор моего приложения в файле .plist с идентификатором пакета FB. Они одинаковы!!!
- Мое приложение не находится в режиме песочницы!
- Если я перехожу от
[FBSession openActiveSessionWithReadPermissions:permissions
в [FBSession openActiveSessionWithPermissions:permissions
- он работает. Но он устарел.
Ответы
Ответ 1
Да, после появления этой ошибки, если вы перейдете к настройкам, вы увидите, что настройка для этого приложения отключена. Но проблема в этом случае заключается в том, что пользователю никогда не было предложено разрешить доступ - то есть установка автоматически включалась в положение ВЫКЛ автоматически при первом доступе. Если пользователь спрашивал, то, конечно, это понятно, но это не так (это как если бы SDK молча и автоматически нажал "Не разрешать для пользователя" ). Вот почему это проблема.
Прежде чем читать дальше, я хочу отметить, что после установки параметра вы не можете просто повторить процесс, чтобы проверить его, потому что как только этот параметр установлен, он никогда не спросит пользователя (даже удаляя и переустанавливая приложение не помогает). Чтобы протестировать эту проблему, вам нужно reset разрешения, перейдя в Настройки → Общие → reset → reset Местоположение и конфиденциальность, прежде чем вы сможете повторить попытку повторить это.
Из тестирования я обнаружил, что если у вас есть offline_access в разрешениях, которые вы запрашиваете в первый раз, тогда он будет давать эту ошибку входа (а не запрашивать пользователя и устанавливать разрешение на ВЫКЛ). SDK не проверяет и не сообщает, что это разрешение не разрешено; он просто не может войти в систему.
Ответ 2
Вот как я получил свою работу. Передайте ему пустой массив разрешений.
NSArray *permissionsArray = @[];
Однако убедитесь, что у вас есть разрешения, которые вы хотите настроить на моей странице приложения facebook. Мне нужен был только по умолчанию, поэтому я был в порядке.
У меня такое ощущение, что facebook изменил его код на стороне сервера. Мое приложение работало нормально, а затем мой вход в FB сломался.
Ответ 3
Я думаю, что эти коды достаточно расплывчаты, что будет много разных вещей.
В конце концов я обнаружил, что проблема в том, что мой идентификатор пакета приложения не обновлялся, когда я подготовил приложение для магазина приложений. Войдите в свою учетную запись разработчиков Facebook и убедитесь, что идентификатор приложения верен.
Ответ 4
Убедитесь, что вы правильно вставили в 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}".