Можно ли расширить маркеры Facebook с помощью exteAccessTokenIfNeeded в приложении для Android?
Я думаю, что это может повлиять на многих разработчиков Facebook/Android, и, тем не менее, похоже, что не так много дискуссий на эту тему...
Мой вопрос
Кто-нибудь успешно обновил токен с помощью функции exteAccessTokenIfNeeded? Если у вас все получилось, какую версию работало устройство (или эмулятор)?
Фон
Я получил электронное письмо от Facebook, в котором говорится, что разрешение offline_access устарело с 1 мая 2012 года, и Facebook рекомендовал обновить его до последней версии SDK. Хорошо.
Я обновил до последней версии SDK, на моем устройстве установлено официальное приложение Facebook, и (в конце концов!) Единый вход работает нормально. Я получаю токены на 60 дней, что снова в порядке.
Проблемы начались, когда я попытался использовать exteAccessTokenIfNeeded(Контекст контекста, ServiceListener serviceListener). Я не мог заставить его обновить свои токены в течение более длительного срока действия. Я ждал 24 часа между попытками, но токен не обновлялся. Единственный способ получить обновленный токен - выйти и войти. Это также произошло, когда я использовал пример проекта "Взломщик".
Наиболее очевидный ответ заключается в том, что я делаю что-то не так, но в Facebook было отправлено сообщение об ошибке, в котором говорилось, что "shouldExtendAccessToken практически всегда возвращает false". Этому отчету был присвоен приоритет "Список пожеланий".
Альтернативы extensionAccessTokenAsNeeded()
В документации Facebook о токенах устаревания offline_access можно расширить с помощью Graph API. Однако это имеет недостаток, заключающийся в необходимости включения "Секрета приложения" в URL. Преимущество заключается в том, что пользователю не нужно устанавливать официальное приложение Facebook на своем устройстве.
Другие идеи и проблемы
Изменяя функцию extendAccessTokenIfNeeded в Facebook.java, чтобы она всегда возвращала true, я думаю, что я получил ее один раз для обновления. (Причина, по которой я говорю "думаю", заключается в том, что она не повторяет поведение, и я подозреваю, что мне придется подождать еще 24 часа, прежде чем появится какой-либо шанс на успех)
Я заметил, что Hackbook требует импорта AndroidHttpClient. Это доступно только для API 8 и выше. Означает ли это, что единый вход в Facebook (в частности, обновление токенов) может работать только на устройствах с API 8 и более поздних версий?
Facebook.apk, включенный в SDK, довольно старый. Возможно, именно поэтому токены не обновляются на эмуляторах под управлением API 8 и более поздних версий?
И, наконец, все это относится только к тем людям, у которых установлено официальное приложение Facebook! Для тех людей, у которых нет официального приложения на Facebook, нужно завершить еще один метод (просто жалуюсь сейчас!)
Соответствующие ссылки на Facebook
Facebook-Android-SDK на GitHub
Facebook offline_access разрешение отклонено
Связанные вопросы переполнения стека
Facebook 60-дневный токен доступа и устарел Offline_Access
Маркер доступа Facebook не может быть продлен
Как будет работать offline_access после устаревания после 1 мая?
Маркер доступа Facebook не может быть продлен
Защита секрета приложения для использования exteAccessToken (Java/Android)
2 ответа
Я не знаю, как разрабатывать Android, но если у вас возникли проблемы с этой функцией, возможно, в Android есть аналогичная функция CURL, которая позволит вам вызывать https://graph.facebook.com/oauth/access_token?
client_id=APP_ID&
client_secret=APP_SECRET&
grant_type=fb_exchange_token&
fb_exchange_token=EXISTING_ACCESS_TOKEN
(Google открыл: http://thesoftwarerogue.blogspot.com/2010/05/porting-of-libcurl-to-android-os-using.html о том, как CURL с Android)
Попробуйте изменить время REFRESH_TOKEN_BARRIER
, так что вам не придется ждать 24 часа каждый раз, когда вы хотите проверить. Я изменил мой примерно на 2 минуты, и я смог увидеть, что маркер доступа фактически расширялся, когда я перезапустил приложение через 2 минуты.