Тема: [FaceBook] ID пригласившего
Показать сообщение отдельно
Старый 13.04.2011, 01:01
Gatz вне форума Посмотреть профиль Отправить личное сообщение для Gatz Найти все сообщения от Gatz
  № 5  
Ответить с цитированием
Gatz

Регистрация: Nov 2008
Сообщений: 5
Буду разбираться, очень надо.
Потом отпишу тут

Добавлено через 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(); // запускаем приложение
							});
						}
					});