Как заставить API Twitter соблюдать параметр обратного вызова с OAuth? - PullRequest
5 голосов
/ 18 июля 2009

Я работаю над приложением для iPhone, которое в идеале использует OAuth для связи с Twitter. Я знаю, что многие люди выполняют рабочий процесс OAuth внутри своих приложений, используя UIWebView, но я не согласен с этим и использую Pownce подход .

Проблема в том, что в Twitter есть вся эта схема для работы с настольными приложениями, использующая пин-код. Когда я регистрирую свое приложение в Twitter, у них появляется веб-форма, спрашивающая меня, являюсь ли я рабочим столом или веб-клиентом. Если я выберу настольный клиент, при попытке авторизации пользователя я могу установить параметр oauth_callback, но Твиттер проигнорирует его после авторизации и покажет номер пин-кода. Если в форме твиттера я укажу, что я веб-клиент, мне потребуется ввести URL-адрес для перенаправления после авторизации. И, поскольку я использую специфическую для приложения iPhone схему URL-адресов, их веб-форма не проходит проверку, так как кажется, что она принимает только URL-адреса, соответствующие протоколу HTTP.

Так что, похоже, я застрял - я не могу сказать «рабочий стол», потому что я не хочу беспокоиться о булавке, и я не могу сказать «сеть», или я не могу использовать iPhone URL приложения. Любое решение этого?

Ответы [ 4 ]

8 голосов
/ 19 июля 2009

Из вашего вопроса:

Я знаю, что многие люди выполняют рабочий процесс OAuth внутри своих приложений, используя UIWebView, но я не согласен с этим и придерживаюсь подхода Pownce.

В статье Pownce предполагается, что выход из приложения и открытие Mobile Safari для выполнения шага аутентификации проблематичны, и что они начали получать плохие отзывы от пользователей за это. Они также испытали частоту отказов около 40%.

Решение Pownce состоит в том, чтобы вместо этого использовать UIWebView в вашем приложении, поэтому у меня сложилось впечатление, что вы, возможно, неверно истолковали их рекомендации. При этом они отмечают это как «наивное» решение и предлагают ряд теоретических «идеальных» решений.

Еще один момент, который вы можете не осознавать, - это то, что приложениям для настольных компьютеров (использующим метод «out-of-band» / пин-код) и веб-приложениям необходимо открывать сайт Twitter во встроенном или внешнем браузере. 1013 *

Итак, у вас есть два варианта на iPhone:

  1. Откройте twitter.com в UIWebView, не указав параметр oauth_callback или oauth_callback=oob для запуска внеполосного потока на основе выводов. Затем пользователь должен скопировать пин-код, используя функцию копирования-вставки iPhone, вручную закрыть UIWebView и вставить пин-код в свое приложение. Затем этот пин можно использовать для преобразования в токен доступа.
  2. Делайте так, как делают все остальные (UIWebView + custom-uri://foo.bar в параметре обратного вызова).

По очевидным причинам первый вариант довольно дерьмовый и действительно полезен только на платформах, где Twitter не может перенаправить на пользовательский URI.

0 голосов
/ 29 июля 2009

Вы можете использовать промежуточный веб-сайт для аутентификации. Ваше приложение создает уникальный идентификатор (на основе оборудования?) И сохраняет его. Затем он записывает, что отправил пользователя для аутентификации и отправляет уникальный идентификатор на ваш сайт. Затем он перенаправляет пользователя на ваш сайт. Затем ваш сайт отправляет пользователя в Twitter, используя oAuth. Пользователь возвращается на ваш сайт, и вы отмечаете уникальный идентификатор как аутентифицированный и сохраняете аутентификационную информацию. Пользователь перезапускает приложение на iPhone, он читает, что отправил пользователя для аутентификации, и связывается с вашим сайтом с уникальным идентификатором - и считывает информацию об аутентификации.

Долго набирается и нуждается в другом сайте, но он должен работать.

0 голосов
/ 24 июля 2009

Вот как я это делаю: скажите Twitter, что вы веб-приложение, и создайте любой старый HTTP: // URL, чтобы удовлетворить Twitter при регистрации вашего клиента oauth.

Затем в своем приложении передайте URL-адрес, который вам нужен, в параметре обратного вызова. Твиттер (по моему опыту) использует тот, который вы ему даете.

0 голосов
/ 23 июля 2009

Простым решением может быть создание страницы HTTP, которая всегда отправляет перенаправление 301 в вашу пользовательскую схему URL, а затем предоставляет этот URL HTTP в веб-API Twitter.

Кроме того, ответ Натана очень полный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...