Буду разбираться, очень надо.
Потом отпишу тут
Добавлено через 28 часов 1 минуту
Приветствую!
Разобрался.
Надеюсь в ближайшем будущем появится более простой способ, но пока буду пользоваться этим
Когда юзер кидает приглашение своему другу и когда друг нажимает на принять, его кидает на страничку приложения и в строку запроса добавляется параметр "request_ids"
К примеру:
http://apps.facebook.com/[имя пр...st_ids=1111111
С помощью этого request_ids я и получу айди юзера приславшего этот запрос.
С помощью запроса к АПИ можно получить весь список активных запросов к конкретному юзеру фейсбука, но для этого нужен access_token от данного приложения.
Есть еще момент, когда одному юзеру накидали сразу несколько запросов на одно приложение, тогда на глобусике оповещений появляется ссылка которая передает сразу несколько айди запросов.
Пример:
http://apps.facebook.com/[имя пр..._t=app_request
Как тогда определить правильно кто же будет рефералом и кто же будет получать бонус?
Я решил, что в данном случае буду смотреть сначала весь список запросов и брать самый первый, так я назначу рефералом того, кто первым кинул запрос данному юзеру.
В моем случае, я получаю access_token и request_ids через flashVars.
Привожу код из своего приложения.

Код AS3:
// Запрос к серверу для определения статуса юзера
ServerAPI.Query("user.getInfo", function (sData:Object):void {
if(sData.response.exists!="1") { // если юзер зашел первый раз
isNewUser=true;
if(iFlashVars.request_ids=="empty") { // если юзер без рефералов, то просто регестрируем его на сервере и запускаем приложение
ServerAPI.Query("user.register", function (sData:Object):void {
userReady(); // запуск приложения
}, "avatar=1", "refid=0");
return;
}
// если же мы получили один или несколько рефералов
// получаем от ФБ(facebook) список запросов
var urlLoader:URLLoader=new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, function(ev:Event):void {
var loader:URLLoader = URLLoader(ev.target);
var reqObj:Object=JSON.decode(loader.data); // преобразуем строку формата JSON в объект
var refId:String="0";
var pushIdsText:String=String(iFlashVars.request_ids);
var pushIdsArr:Array=pushIdsText.split(",");
var needFind:Boolean=false;
var targetReqId:String="";
if(pushIdsArr.length==1) { // если в параметре [request_ids] получили всего один запрос
needFind=true; // значит нам нужно найти конкретного юзера из всего списка запросов
targetReqId=pushIdsArr[0];
}
for(var i:Number=0; i<reqObj.data.length; i++) { // смотрим список запросов
if(needFind) { // если нужно найти конкретного юзера
if(reqObj.data[i].id==targetReqId && reqObj.data[i].application.id==APP_ID) { // находим наш запрос и если он относится к нашему приложению
refId=reqObj.data[i].from.id; // тогда назначаем этого юзера как реферала
break;
}
continue;
}
if(reqObj.data[i].application.id==APP_ID) { // если нужно найти юзера, который кинул запрос самым первым, ищем первый запрос относящийся к нашему приложению
refId=reqObj.data[i].from.id; // назначаем реферала
break;
}
}
// регестрируем нового юзера и передаем айди реферала
ServerAPI.Query("user.register", function (sData:Object):void {
userReady(); // запускаем приложение
}, "avatar=1", "refid="+refId);
});
var url:String="https://graph.facebook.com/"+iStorage.fb.me.id+"/apprequests?"+iFlashVars.app_token; // формируем строку, для получения списка запросов
urlLoader.load(new URLRequest(url)); // отправляем запрос
}
else { // если юзер уже не первый раз заходит в приложение и он уже есть в базе сервера
ServerAPI.Query("user.getMe", function(sData:Object):void {
if(sData.response.tutorialComplete=="0") isNewUser=true;
else isNewUser=false;
userReady(); // запускаем приложение
});
}
});