// Funcao para fazer uma postagem no mural do usuario/amigo // Retorna ID do post se nao for feito por dialogo public IEnumerator WallPost(string _facebookId, Dictionary <string, string> parameters, FacebookAPI.WallPostCallback callback, int tries = 0) { // Cria URL do request bool isDialog = (parameters != null && parameters.ContainsKey("dialog")) ? true : false; string url = (isDialog) ? DIALOG_URL : GRAPH_URL; if (!isDialog) { url += _facebookId + "/"; } url += "feed/?"; // Se for dialogo, adiciona redirecionamento para php aonde fecha o browser nativo do Prime31 // e informacoes extras para fazer o post if (isDialog) { url += "app_id=" + facebookId + "&"; url += "redirect_uri=" + WWW.EscapeURL(Flow.URL_BASE + "login/tables/input_share.php?" + //"app_id=" + Info.appId + "&token=" + WWW.EscapeURL(Save.GetString(PlayerPrefsKeys.TOKEN.ToString())) +"&device=" + GameInfo.device()) + "&"; "app_id=" + Info.appId + "&token=" + WWW.EscapeURL(Save.GetString(PlayerPrefsKeys.TOKEN.ToString())) + "&device=" + SystemInfo.deviceUniqueIdentifier.Replace("-", "")) + "&"; if (_facebookId != "me") { url += "to=" + WWW.EscapeURL(_facebookId) + "&"; } } else { url += "method=post&"; } // Checa se os parametros enviados nao sao nulos e adiciona no form if (parameters != null) { if (parameters.ContainsKey("message")) { url += "message=" + WWW.EscapeURL(parameters["message"]) + "&"; } if (parameters.ContainsKey("name")) { url += "name=" + WWW.EscapeURL(parameters["name"]) + "&"; } if (parameters.ContainsKey("link")) { url += "link=" + WWW.EscapeURL(parameters["link"]) + "&"; } if (parameters.ContainsKey("description")) { url += "description=" + WWW.EscapeURL(parameters["description"]) + "&"; } if (parameters.ContainsKey("picture")) { url += "picture=" + WWW.EscapeURL(parameters["picture"]) + "&"; } } // Se for nulo, enviar erro para o callback else { if (callback != null) { callback(NULL_PARAMETERS, facebookId, parameters, null); } Debug.LogWarning(NULL_PARAMETERS); yield break; } // Access token do usuario url += "access_token=" + WWW.EscapeURL(facebookToken); // Se nao for dialogo, fazer o post if (!isDialog) { WWW wallPost = new WWW(url); yield return(wallPost); // Se houver algum erro, enviar erro para o callback if (wallPost.error != null) { // Envia para o callback if (callback != null) { callback(wallPost.error, _facebookId, parameters, null); } // Cacheia a conexão atual para tentar novamente apos o "giro" Login( new GenerateState(_facebookId, parameters, callback) , HandleState ); yield break; } // Caso contrario, decodar JSON recebido else { IJSonObject data = wallPost.text.ToJSon(); // Se o JSON recebido for invalido, retornar e enviar para o callback if (data.IsEmpty() || data.IsError()) { if (callback != null) { callback("Invalid JSon: " + wallPost.text, _facebookId, parameters, null); } yield break; } // Envia ID do post para o callback if (callback != null) { callback(null, _facebookId, parameters, data.GetString("id")); } } } // Se for dialogo, abrir a url no navegador do Prime31 else { Flow.game_native.openUrlInline(url); tempFace = _facebookId; tempParams = parameters; tempCallback = callback; if (_facebookId == "me") { new GameJsonAuthConnection(Flow.URL_BASE + "login/tables/check_share.php", GetShareData).connect(); } else { if (callback != null) { callback(null, _facebookId, parameters, null); } } // Como nao tem como receber o callback do navegador do Prime31 // enviar callback de sucesso (mesmo se o usuario nao estiver postado) } yield break; }
// Funcao para pegar informacoes do usuario // Retorna FacebookId, Nome, Sobrenome, e Login public IEnumerator GetInfo(string _facebookId, FacebookAPI.GetInfoCallback callback, int tries = 0) { // Se ja estiver cacheada as informacoes, somente enviar para o callback if (users.ContainsKey(_facebookId) && users[_facebookId].firstName != null) { if (callback != null) { callback(null, _facebookId, users[_facebookId].firstName, users[_facebookId].lastName, users[_facebookId].userName); } yield break; } // Caso contrario, fazer uma conexão ao facebook para pegar as informacoes else { // Cria URL do request string url = GRAPH_URL + _facebookId + "/?"; if (_facebookId == "me") { url += "access_token=" + WWW.EscapeURL(facebookToken) + "&"; } url += "fields=username,first_name,last_name"; WWW getInfo = new WWW(url); yield return(getInfo); // Se houver algum erro, enviar erro para o callback if (getInfo.error != null) { if (callback != null) { callback(getInfo.error, _facebookId, null, null, null); } } // Caso contrario, decodar JSON recebido else { IJSonObject data = getInfo.text.ToJSon(); // Se o JSON recebido for invalido, retornar e enviar para o callback if (data.IsEmpty() || data.IsError()) { if (callback != null) { callback("Invalid JSon: " + getInfo.text, _facebookId, null, null, null); } yield break; } // Cacheia as informacoes recebidas FacebookAPI.User user = (users.ContainsKey(_facebookId)) ? users[_facebookId] : new FacebookAPI.User(); user.facebookId = _facebookId; user.firstName = data.GetString("first_name"); user.lastName = data.GetString("last_name"); user.userName = data.GetString("username"); // Envia pro callback if (callback != null) { callback(null, _facebookId, user.firstName, user.lastName, user.userName); } } } yield break; }