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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 29.10.2010, 22:53
altermann вне форума Посмотреть профиль Отправить личное сообщение для altermann Найти все сообщения от altermann
  № 11  
Ответить с цитированием
altermann
 
Аватар для altermann

Регистрация: Jul 2010
Адрес: 59.939039, 30.315785
Сообщений: 65
Отправить сообщение для altermann с помощью ICQ Отправить сообщение для altermann с помощью Skype™
Я во флексе замечательно юзал стандартный контактовский посредник APIConnection (APIConnection), не нужно никакого контейнера, один гемор с ним. Очень легко юзается.

Алгоритм примерно такой:
1) создаешь пакет, например social.vk, в него распаковываешь классы посредника.
2) создаешь в том же пакете класс. например, VKApi, примерно такой:

Код AS3:
package social.vk {
 
    import flash.system.Security;
    import flash.events.*;
 
    import social.SocialConnectionEvent; // Этот класс надо будет еще создать, о нем ниже...
 
    import social.vk.APIConnection;
    import social.vk.events.*;
 
    public class VKApi extends EventDispatcher {
        private var flashVars:Object;
        private var apiConnection:APIConnection;
 
        public function VKApi() {
 
		}
 
        public function initVKNetConnection():void {
            Security.allowDomain("*"); 
            flashVars = mx.core.FlexGlobals.topLevelApplication.parameters as Object;
 
            apiConnection = new APIConnection(flashVars);
			apiConnection.addEventListener(CustomEvent.CONN_INIT, initComplete);
        }
 
        private function initComplete(e: CustomEvent):void {
            // Тут можно поставить проверку установлена ли прилага или нет
            // Либо не делать проверку, а заюзать новый контактовский интерфейс для этого
            // Установив соответствующую галочку в параметрах
 
            // Если делать проверку, то примерно так:
 
            if (flashVars['is_app_user'] == 1) {
                // Если прилага установлена, проверим нужные настройки юзверя
				if (flashVars['api_settings'] >= 3) {
				    // 3 - это доступ к френдам и к отправке уведомлений
				    // Если все нас устраивает, то формируем событие инициализации
					dispatchEvent(new Event("initComplete"));
				} else {
				    // Либо откроем окно настроек прилаги
					apiConnection.addEventListener('onSettingsChanged', onSettingsChanged);
					apiConnection.callMethod('showSettingsBox', 3);
				}
			} else {
			    // Если прилага не установлена, то откроем окно установки,
			    // предварительно записав, кто пригласил чела в прилагу
				if (flashVars['user_id'] != flashVars['viewer_id']) {
					var localSO:SharedObject;
					localSO = SharedObject.getLocal("userInviteIDs");
					localSO.data.userID = flashVars['user_id'];
					localSO.flush();
				}
 
				// Открываем окно установки
				apiConnection.addEventListener('onApplicationAdded', onApplicationAdded);
				apiConnection.callMethod('showInstallBox');
			}
		}
 
		private function onApplicationAdded(e: CustomEvent):void {
			if (flashVars['api_settings'] >= 3) {
				dispatchEvent(new Event("initComplete"));
			} else {
				apiConnection.addEventListener('onSettingsChanged', onSettingsChanged);
				apiConnection.callMethod('showSettingsBox', 3);
			}
		}
 
		private function onSettingsChanged(e: CustomEvent):void {
			dispatchEvent(new Event("initComplete"));
        }
 
        // Узнаем свой ID в контакте
        // Надо замутить еще один класс - SocialConnectionEvent
        // Создай его, например, в пакете social, его код будет ниже
        public function WhatIsMyVKID():String {
            var event:SocialConnectionEvent = new SocialConnectionEvent(Event.COMPLETE);
			event.socialID = flashVars.viewer_id;
			dispatchEvent(event);
        }
 
        // Определим данные своего профиля и получим свою аву
        public function WhatIsMyNameVK(id:String):void {
            apiConnection.api('getProfiles', {uids: id, fields: 'photo_medium'}, getProfilesresultListener, errorListener);
        }
 
        private function getProfilesresultListener(data: Object):void {
            var event:SocialConnectionEvent = new SocialConnectionEvent(Event.COMPLETE);
            event.first_name = data[0].first_name;
			event.last_name = data[0].last_name;
			event.avatar = data[0].photo_medium;
			dispatchEvent(event);
        }
    }
}
А вот класс SocialConnectionEvent. Он нужен для передачи инфы в родительский класс

Код AS3:
package social
{
	import flash.events.Event;
 
	public class SocialConnectionEvent extends Event
	{
		public var socialID:String;
 
		public var first_name:String;
		public var last_name:String;
		public var avatar:String;
 
		public function SocialConnectionEvent(type:String)
		{
			super(type);
		}
	}
}

Теперь основной код:
Я люблю отделять код от скелета, поэтому создаю два файла:

файл preved.mxml:

Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" 
			   creationComplete="init()"
			   width="807" height="630">
 
	<fx:Script source="MainController.as"/>
	<s:HGroup width="100%" height="100%">
	    <s:VGroup width="200" height="100%">
	        <s:Label text="Моя ава:"/>
        	<mx:Image id="myFace"/>
        </s:VGroup>
        <s:VGroup>
            <s:Label text="Логи:"/>
	        <s:TextArea width="100%" height="100%" id="statusArea" editable="false"/>
	    </s:VGroup>
	</s:HGroup>
</s:Application>

файл MainController.as:

Код AS3:
import social.vk.VKApi;
import flash.events.*;
 
 
private var vkConnect:VKApi;
 
private function init():void {
    saveToLog("Инициализируем апи...");
    vkConnect = new VKApi();
    vkConnect.addEventListener('initComplete', initComplete);
    vkConnect.initVKNetConnection();
}
 
private function initComplete(e: Event):void {
    vkConnect.removeEventListener('initComplete', initComplete);
    saveToLog("Апи инициализировано успешно");
 
    saveToLog("Узнаем свой ID в контакте");
    vkConnect.addEventListener(Event.COMPLETE, WhatIsMySocialIDResult);
	vkConnect.WhatIsMyVKID();
}
 
private function WhatIsMySocialIDResult (event:SocialConnectionEvent):void {
    vkConnect.removeEventListener(Event.COMPLETE, WhatIsMySocialIDResult);
    saveToLog("Мой ID: " + event.socialID);
 
    saveToLog("Узнаем мое имя и прочую инфу...");
    vkConnect.addEventListener(Event.COMPLETE, WhatIsMyNameResult);
	vkConnect.WhatIsMyNameVK();
}
 
private function WhatIsMyNameResult (event:SocialConnectionEvent):void {
    vkConnect.removeEventListener(Event.COMPLETE, WhatIsMyNameResult);
 
    saveToLog("Меня зовут: " + event.first_name + ' ' + event.last_name);
    saveToLog("Ссылка на мою аву: " + event.avatar);
    myFace.source = event.avatar;
}
 
 
// Пишем мессаги в текстовое поле
private function saveToLog(msg:String):void {
	var curTime:Date = new Date();
 
	statusArea.text += String(curTime.hours) + ':' + String(curTime.minutes) + ':' + String(curTime.seconds) + ' ' + msg + '\n';
	trace("ScriptDebug: " + msg);
}

Не гарантирую полной работоспособности всего, это выдержки из моего кода, возможно надо еще какие-нить библиотеки подключить.

За код прошу сильно не ругать, я сам недавно во флеше =) А этот код - плод моих долгих и упорных усилий =) (кончено это только часть, но все же).

Создать новую тему   Часовой пояс GMT +4, время: 21:22.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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