|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jan 2011
Сообщений: 247
|
Авторизация OAuth2 на стороннем сайте из Flash приложения.
Имеется следующая ситуация:
1. Есть какой-то сайт, на одной из его страничек имеется flash приложение. 2. Заходя в это flash приложение, необходимо чтобы внутри него пользователь мог авторизоваться через соц. сети, например, Вконтакте (именно внутри флэшки). Подскажите пожалуйста куда копать ? есть ли уроки по этому вопросу ? В инете кроме одной темы нечего не нашел, и там в итоге код не выложили работоспособный. |
|
|||||
Регистрация: Jan 2011
Сообщений: 247
|
Цитата:
С прочитанного в инете я сделал приблизительные предположение действий которые нужно сделать : 1.в флеше внутри слушателе кнопки по нажатию прописать вызов обращения к JS методу 2.написать html страничку с JS скриптами где будет тот метод который я обращаюсь со флеша 3.внутри метода написать авторизацию вконтакте 4.полученные данные отослать обратно во флеш 5. с полученними данными делать что угодно Если все написанное верно, тогда вопрос в 3 и 4-ом пункте Добавлено через 6 часов 6 минут Такс, перешел к практике ну нечего не вышло, вот что собрал: addChild(btn).x=100; btn.addEventListener(MouseEvent.MOUSE_DOWN, openVKAouth); addChild(btn).x=200; btn.addEventListener(MouseEvent.MOUSE_DOWN, getVK); private function getVK(e:MouseEvent):void { //пытаемся забрать полученную инфу var result:Object = ExternalInterface.call("getVKData"); trace(result); textField.text = String(result.name)+" = "+ String(result.length); } private function openVKAouth(e:MouseEvent):void { if (ExternalInterface.available){ //стартуем авторизацию var result:String = ExternalInterface.call("startLogin"); trace("result> "+result); textField.text = String(result); }else{ textField.text = "ExternalInterface.available = false"; } } <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>example</title> </head> <script src="//vk.com/js/api/openapi.js" type="text/javascript"></script> <script language="JavaScript"> var vk = {} function startLogin() { loginVK(); return "start login"; } function loginVK() { VK.init({apiId:4453251}); load(); } function load(){ VK.Auth.login(authInfo, 16); if(response.session){ // check session activate vk = response.session.user; alert('user: '+response.session.mid); }else { alert("session is false!"); } } function getVKData(){ return vk; } </script> </head> <body bgcolor="#ffffff"> <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="250" height="150" id="VK_autorization" align="middle"> <param name="allowScriptAccess" value="always" /> <param name="allowFullScreen" value="false" /> <param name="movie" value="VK_autorization.swf" /> <param name="quality" value="high" /> <param name="bgcolor" value="#ffffff" /> <embed src="VK_autorization.swf" quality="high" bgcolor="#ffffff" width="250" height="150" name="VK_autorization" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" /> </object> <br/> </body> </html> З.Ы. как дебажить нормально такие вещи ? Последний раз редактировалось GrafMine; 10.07.2014 в 12:15. |
|
|||||
Выложи минимальный пример (JS + flash). Случай интересный я сам поковыряю на досуге. А если дебажить JS console.log() и смотри что он в панельку браузера выводит. И кстати тут вполне может быть проблема безопасности - хрен знает что они там вконтактовский скрипт напихали.
Добавлено через 1 минуту Да я как то сталкивался со случаем (одноклассники) когда шарить можно было только через их попап, через эксернал интерфейс во флеше не работало. |
|
|||||
Регистрация: Jan 2011
Сообщений: 247
|
Долго мучался, но все таки осилил.
В инете готового кода я не нашел поэтому вот выкладываю, надеюсь это многим сохранит время и нервов (зато я больше погрузился в это и читал разные варианты на будущее) Main.AS import flash.display.Sprite; import flash.events.MouseEvent; import flash.external.ExternalInterface; import flash.system.Security; import flash.text.TextField; public class VK_autorization extends Sprite { private var textField:TextField = new TextField(); public function VK_autorization() { Security.allowDomain("*"); textField.text = "Hello, World"; addChild(textField); var btn:Sprite = new Sprite(); btn.graphics.clear(); btn.graphics.beginFill(0x58B1F8); btn.graphics.drawRect(0, 0, 30, 10); // x, y, width, height, ellipseW, ellipseH btn.graphics.endFill(); addChild(btn).x=100; btn.addEventListener(MouseEvent.MOUSE_DOWN, openVKAouth); } private function openVKAouth(e:MouseEvent):void { if (ExternalInterface.available){ var param1:uint = 3; var param2:uint = 7; var result:uint = ExternalInterface.call("addNumbers", param1, param2); trace("result> "+result); textField.text = String(result); try{ ExternalInterface.addCallback("parseVKData", parseVKData); }catch (e:*){ textField.text = String(e); } ExternalInterface.call("loginVK"); ExternalInterface.call("authVK"); }else{ textField.text = "ExternalInterface.available = false"; } } public function parseVKData(data:String):void { textField.text = "hello "+data; } <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>example</title> </head> <script src="//vk.com/js/api/openapi.js" type="text/javascript"></script> <script language="JavaScript"> var scope = 'wall ,offline,photos,friends' // adds two numbers, and sends the result back to ActionScript function addNumbers(num1, num2) { console.log("see",num1, num2); return (num1 + num2); } function loginVK() { VK.init({apiId: ВАШ АЙДИ ПРИЛОЖЕНИЯ}); console.log("init vk"); } function authVK(){ VK.Auth.login(authInfo, scope); console.log("Auth vk- end"); } function authInfo(response){ console.log("Auth vk"); if(response.session){ // check session activate console.log("Auth vk - true"); sendVKDataToAS3(response.session.user.first_name); }else { console.log("Auth vk - false"); alert("session is false!"); } } function sendVKDataToAS3(value) { console.log("parseVKData"); try{ getGameSwf().parseVKData(value); } catch(e) { console.log(e); } finally { console.log("finished"); } } function getGameSwf() { return getFlashMovieObject('VK_game'); } function getFlashMovieObject(movieName) { if (window.document[movieName]){ return window.document[movieName]; } if (navigator.appName.indexOf("Microsoft Internet")==-1){ if (document.embeds && document.embeds[movieName]) return document.embeds[movieName]; } else { return document.getElementById(movieName); } return null; } VK.Auth.getLoginStatus(authInfo); </script> </head> <body bgcolor="#ffffff"> <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="250" height="150" id="VK_game" align="middle"> <param name="allowScriptAccess" value="always" /> <param name="allowFullScreen" value="false" /> <param name="movie" value="VK_game.swf" /> <param name="quality" value="high" /> <param name="bgcolor" value="#ffffff" /> <embed src="VK_game.swf" quality="high" bgcolor="#ffffff" width="250" height="150" name="VK_game" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" /> </object> <br/> </body> </html> для продолжения действий через флеш для flashVars мне нужны следующие данные: flashVars['api_id'] = app_id; flashVars['viewer_id'] = mid; flashVars['sid'] = sid; flashVars['secret'] =;//<--- secret: "oauth" - wtf ? чтоб сделать запросы через APIConnection? Или мне теперь и дальше продолжать только через JS ? что не очень удобно ) Последний раз редактировалось GrafMine; 10.07.2014 в 20:54. |
Часовой пояс GMT +4, время: 07:26. |
|
« Предыдущая тема | Следующая тема » |
|
|