Я во флексе замечательно юзал стандартный контактовский посредник 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);
}
Не гарантирую полной работоспособности всего, это выдержки из моего кода, возможно надо еще какие-нить библиотеки подключить.
За код прошу сильно не ругать, я сам недавно во флеше =) А этот код - плод моих долгих и упорных усилий =) (кончено это только часть, но все же).