Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.07.2014, 15:44
GrafMine вне форума Посмотреть профиль Отправить личное сообщение для GrafMine Найти все сообщения от GrafMine
  № 1  
Ответить с цитированием
GrafMine
 
Аватар для GrafMine

Регистрация: Jan 2011
Сообщений: 247
По умолчанию Авторизация OAuth2 на стороннем сайте из Flash приложения.

Имеется следующая ситуация:
1. Есть какой-то сайт, на одной из его страничек имеется flash приложение.
2. Заходя в это flash приложение, необходимо чтобы внутри него пользователь мог авторизоваться через соц. сети, например, Вконтакте (именно внутри флэшки).

Подскажите пожалуйста куда копать ? есть ли уроки по этому вопросу ? В инете кроме одной темы нечего не нашел, и там в итоге код не выложили работоспособный.

Старый 09.07.2014, 17:29
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 2  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Сделать авторизацию из JS по обычной схеме, а с флешкой связать мостом через ExternalInterface
__________________
Ко мне можно и нужно обращаться на ты)

Старый 09.07.2014, 18:50
GrafMine вне форума Посмотреть профиль Отправить личное сообщение для GrafMine Найти все сообщения от GrafMine
  № 3  
Ответить с цитированием
GrafMine
 
Аватар для GrafMine

Регистрация: Jan 2011
Сообщений: 247
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Сделать авторизацию из JS по обычной схеме, а с флешкой связать мостом через ExternalInterface
звучит оч легко, ну на деле наверно головняка хватает.
С прочитанного в инете я сделал приблизительные предположение действий которые нужно сделать :
1.в флеше внутри слушателе кнопки по нажатию прописать вызов обращения к JS методу
2.написать html страничку с JS скриптами где будет тот метод который я обращаюсь со флеша
3.внутри метода написать авторизацию вконтакте
4.полученные данные отослать обратно во флеш
5. с полученними данными делать что угодно

Если все написанное верно, тогда вопрос в 3 и 4-ом пункте

Добавлено через 6 часов 6 минут
Такс, перешел к практике ну нечего не вышло, вот что собрал:
Код AS3:
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 :

Код AS3:
<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>
ExternalInterface.available = true , следуя из этого значит он видет что к флешке подключен JS ну вот на запросы реагирует null , я так понимаю не проходит авторизация.
З.Ы. как дебажить нормально такие вещи ?


Последний раз редактировалось GrafMine; 10.07.2014 в 12:15.
Старый 10.07.2014, 12:46
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 4  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
Выложи минимальный пример (JS + flash). Случай интересный я сам поковыряю на досуге. А если дебажить JS console.log() и смотри что он в панельку браузера выводит. И кстати тут вполне может быть проблема безопасности - хрен знает что они там вконтактовский скрипт напихали.

Добавлено через 1 минуту
Да я как то сталкивался со случаем (одноклассники) когда шарить можно было только через их попап, через эксернал интерфейс во флеше не работало.

Старый 10.07.2014, 13:14
GrafMine вне форума Посмотреть профиль Отправить личное сообщение для GrafMine Найти все сообщения от GrafMine
  № 5  
Ответить с цитированием
GrafMine
 
Аватар для GrafMine

Регистрация: Jan 2011
Сообщений: 247
Долго мучался, но все таки осилил.
В инете готового кода я не нашел поэтому вот выкладываю, надеюсь это многим сохранит время и нервов (зато я больше погрузился в это и читал разные варианты на будущее)
Main.AS
Код AS3:
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:
Код AS3:
<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>
Вопрос появился следуйщего характера, через JS я получил только : mid, sid, sig, secret: "oauth", expire: 1405012702, user:Object
для продолжения действий через флеш для flashVars мне нужны следующие данные:
Код AS3:
flashVars['api_id'] = app_id;
        flashVars['viewer_id'] = mid;
        flashVars['sid'] = sid;
        flashVars['secret'] =;//<--- secret: "oauth" - wtf ?
где мне теперь достать secret для работы через flash api vk sdk ?
чтоб сделать запросы через APIConnection?

Или мне теперь и дальше продолжать только через JS ? что не очень удобно )


Последний раз редактировалось GrafMine; 10.07.2014 в 20:54.
Создать новую тему Ответ Часовой пояс GMT +4, время: 07:26.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 07:26.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.