Метод выхода из Sharekit для Facebook (версия Graph API) не полностью вышел из системы или деавторизовал пользователя - PullRequest
2 голосов
/ 12 октября 2011

Я использую Sharekit для публикации в Facebook через API Graph Facebook.Я попытался найти самый последний, самый современный код (troppoli на github кажется довольно современным).

Использование sharekit для выхода из Twitter прекрасно работает со строкой: [SHK logoutOfService: @ "SHKTwitter"];но та же самая строка для Facebook, [SHK logoutOfService: @ "SHKFacebook"], дает другие результаты.

Когда я возвращаюсь, экран входа в систему не отображается.Вместо этого появится экран с текстом: «Вы уже авторизованы ... Нажмите« ОК »для продолжения».Затем в нижней части экрана «Войти как ...» и «Выйти».Но якобы пользователь уже вышел из системы.

Еще хуже, если я продолжаю нажимать кнопку «Окей», я получаю сообщение об ошибке: «Операция не может быть завершена.)

Я думаю, что мне может понадобиться настроить ShareKit, чтобы сделать эту работу, но я ненавижу это делать. Кто-нибудь еще сталкивался с этим?

Ответы [ 2 ]

2 голосов
/ 12 октября 2011

Вам необходимо убедиться, что вы правильно настроили схему URL в вашем info.plist.В вашем info.plist убедитесь, что у вас настроены типы CFBundleURLTypes для Facebook:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string></string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>fb{app_id}</string>
        </array>
    </dict>
</array>

Замените {app_id} на ваш идентификатор приложения в Facebook.

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

-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
    return [SHKFacebook handleOpenURL:url];
}

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication 
         annotation:(id)annotation{
    return [SHKFacebook handleOpenURL:url];
}

Эти изменения устранили эту проблему для меня.

1 голос
/ 13 октября 2011

Я почти уверен, что это как-то связано с новой единой регистрацией в Facebook (SSO). Если у пользователя установлена ​​версия Facebook 3.2.3 или выше или Safari на устройстве (или симуляторе), авторизация теперь выполняется вне приложения. Будет публиковать больше, как я нахожу это.

РЕДАКТИРОВАТЬ: Помимо ошибки NSURL, похоже, что это ожидаемое поведение с новым SSO Facebook. Предполагается, что пользователи остаются в псевдо-входе / выходе из системы после «выхода» из вашего приложения, в случае, если они вошли в другое приложение и т. Д. - все это теперь подключено. Чтобы действительно выйти из Facebook (скажем, войти как кто-то еще и т. Д.), Кажется, что пользователь должен щелкнуть ссылку выхода из системы в веб-представлении авторизации, которое показывает, когда он «вышел» из Facebook в вашем приложении. Я могу ошибаться, но я почти уверен в этом.

Помимо вышесказанного, я нашел способ избавиться от ошибки NSURL, и это делает вещи намного лучше и намного приятнее. См. Как исправить ошибку NSURLErrorDomain -999 в iPhone .

Подробнее о новом едином входе в Facebook:

Выдержка из Учебник по Facebook для iOS (см. Особенно последний абзац):

Шаг 3. Внедрение единого входа (SSO)

Одной из наиболее привлекательных функций iOS SDK является Single-Sign-On (ССО). Единый вход позволяет пользователям входить в ваше приложение через Facebook идентичность. Если они уже вошли в приложение Facebook iOS на на их устройстве им даже не нужно вводить имя пользователя и пароль. Кроме того, потому что они подписываются на ваше приложение со своим Facebook личность, вы можете получить разрешение от пользователя на доступ к их информация профиля и социальный график.

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

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

Если приложение работает в версии iOS, которая поддерживает многозадачность, и если на устройстве установлено приложение Facebook версии 3.2.3 или выше установлен, SDK пытается открыть диалоговое окно авторизации в приложение Facebook. После того, как пользователь предоставит или отклонит авторизацию, приложение Facebook перенаправляет обратно в приложение вызова, передавая токен авторизации, срок действия и любые другие параметры фейсбука OAuth-сервер может вернуться.

Если устройство работает в версии iOS, которая поддерживает многозадачность, но у нее нет приложения Facebook версии 3.2.3 или Чем больше установлено, SDK откроет диалоговое окно авторизации в Сафари. После того, как пользователь предоставит или отменит авторизацию, Safari перенаправляет обратно в вызывающее приложение. Похоже на приложение для Facebook авторизация, это позволяет нескольким приложениям использовать один и тот же Facebook пользователь access_token через cookie-файл Safari.

Если приложение работает под управлением версии iOS, которая не поддерживает многозадачность, SDK использует старый механизм всплывающей строки UIWebView, предлагая пользователю войти в систему и предоставить доступ. FBSessionDelegate - это интерфейс обратного вызова, который ваше приложение должно реализовать: методы делегата будут вызваны, когда приложение успешный вход или выход. Прочитайте документацию по iOS SDK для подробнее об этом делегате.

...

Когда пользователь хочет прекратить использование интеграции Facebook с вашим приложением, Вы можете вызвать метод выхода из системы, чтобы очистить состояние приложения и сделать запрос сервера на аннулирование текущего access_token.

[выход из Facebook: сам]; Вы можете реализовать метод fbDidLogout протокол FBSessionDelegate для обработки любых действий после выхода из системы хочу взять.

Обратите внимание, что выход из системы не отменит разрешения вашего приложения, но просто очистит access_token вашего приложения. Если пользователь, который ранее вышли из вашего приложения, они просто увидят уведомление о том, что они входят в ваше приложение, а не уведомление предоставить разрешения. Чтобы изменить или отозвать приложение разрешения, пользователь может посетить «Приложения, Игры и Веб-сайты "на их панели настроек конфиденциальности Facebook. Вы можете также программно аннулировать разрешения приложения, используя Graph API звоните.

Надеюсь, это поможет, дайте мне знать, если найдете что-то другое.

...