Pinless OAuth на Adobe AIR для Android - PullRequest
3 голосов
/ 23 апреля 2011

У меня есть OAuth без булавки, работающий на Adobe AIR for Desktop, iOS, но не Android. По какой-то причине мы не получаем oauth_verifier (который содержит sha'd code) в StageWebView на устройстве Android. Любая подсказка? Вот отладка на рабочем столе и на Droid 2; обратите внимание на 3-ю строку в выводе трассировки Droid 2, которая отсутствует все переменные OAuth после URL обратного вызова.

Desktop:

AuthorizeTwitterService::onComplete, data: 
oauth_token=De2k4zANjzAhT3hXV4eqOfTVxJsshVIJjgsuwPMUg8&oauth_token_secret=s     WsBzyS43nh6DDBwLaogaWpVftoDaiYTJDfBKQE&oauth_callback_confirmed=true 
-------------------- 
TwitterLoginView::onLocationChange 
location: 
https://api.twitter.com/oauth/authorize?oauth_callback=oob&applicatio... 
-------------------- 
TwitterLoginView::onLocationChange 
location: https://api.twitter.com/oauth/authorize 
-------------------- 
TwitterLoginView::onLocationChange 
location: 
http://www.twitter.com/combovercharlie?oauth_token=De2k4zANjzAhT3hXV4&oauth_verifier=js1B4bAYfUer05a2rlZSDcOLOaIa66q93K24FUzrk

Дроид 2:

AuthorizeTwitterService::onComplete, data: 
oauth_token=BtwJHbpaS5OWy1AMYdwl0ecGKGpU9AEcyrFYaXQ8&oauth_token_secret=Z2C     ff3ECfY5dp8dLLSA9qXvL2SRaZ3v5veStGuA00&oauth_callback_confirmed=true 
-------------------- 
TwitterLoginView::onLocationChange 
location: 
https://api.twitter.com/oauth/authorize?oauth_callback=oob&applicatio... 
Charlie&oauth_token=BtwJHbpaS5OWy1AMYdwl0ecGKGpU9AEcyrFYaXQ8&oauth_consumer     _key=LbMYslVau91uSAMZyGsOg 
-------------------- 
TwitterLoginView::onLocationChange 
location: https://api.twitter.com/oauth/authorize 
-------------------- 
TwitterLoginView::onLocationChange 
location: http://mobile.twitter.com/combovercharlie 

1 Ответ

0 голосов
/ 23 апреля 2011

Я исправил это через Event.COMPLETE для моего Droid 2 и Nexus One. Я даже не получаю LocationChangeEvent.LOCATION_CHANGING на своем настольном компьютере или Android, но в итоге Event.COMPLETE получает шейд oauth_verifier, который будет добавлен в него. Я могу разобрать это из свойства местоположения StageWebView, отправить, и я готов идти. Из паранойи я оставляю все 3 события там на всякий случай. Если вам интересно, вот различия в событиях перенаправления между ОС через Марка Локри: http://kb2.adobe.com/cps/895/cpsid_89526.html.

Кроме того, предполагается, что ваше приложение фактически зарегистрировано как «веб-приложение», а не как приложение для настольного компьютера, в противном случае вам придется использовать пин-код, и вы не получите oauth_verifier в URL-адресе ответа. Да, вы можете создать URL-адрес обратного вызова для чего угодно; просто убедитесь, что это стандартный URL-адрес, который, как мы надеемся, не равен 404.

stageWebView = new StageWebView();
stageWebView.addEventListener(LocationChangeEvent.LOCATION_CHANGING, onLocationChange);
stageWebView.addEventListener(LocationChangeEvent.LOCATION_CHANGE, onLocationChange);
stageWebView.addEventListener(Event.COMPLETE, onLocationChange);
stageWebView.stage = stage;
stageWebView.viewRect = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight);
// loaded from an OAuth library
// try http://code.google.com/p/oauth-as3/ or Tweetr http://wiki.swfjunkie.com/tweetr
stageWebView.loadURL(authenticationURL); 

var code:String;

function onLocationChange(event:Event):void
{
        var location:String;

    if(event is LocationChangeEvent)
    {
        location = LocationChangeEvent(event).location;
    }
    else
    {
        location = _stageWebView.location;
    }

    var search:String       = "oauth_verifier=";
    var ver:String          = location;
    var startIndex:int      = ver.lastIndexOf(search);
    if(startIndex != -1)
    {
        code = ver.substr(startIndex + search.length, location.length);
        // remove listeners and dispatch success here
    }
}
...