UnAPI - враппер функций ВКонтакте API для Unity

Лучший способ помочь другим, поделиться своими находками.

Re: UnAPI - враппер функций ВКонтакте API для Unity

Сообщение bomberest 15 май 2014, 20:22

Исправление. Содержит готовую сцену и консоль для проверки в вебе.
Инициализация происходит при получении всех нужных параметров (раньше вызывалось при получении каждого параметра, были ошибки).
http://www.4shared.com/file/JU2Exm39ba/UnAPI101.html

Кто-нибудь понял, как сделать ф-ю вызова showOrderBox? Я знаю только, как через html сделать, не могу понять, как через wrapper.
Основы Unity3D Свой 2D-движок Фильм для разработчиков Кастомизация едитора
Лекции игрового программирования
Skype: Andrewf56 | Steam: bomberest (-AnF-) | Vk: _https://vk.com/andrewshut
Аватара пользователя
bomberest
Старожил
 
Сообщения: 538
Зарегистрирован: 22 июн 2011, 14:38
Откуда: Минск
  • ICQ

Re: UnAPI - враппер функций ВКонтакте API для Unity

Сообщение DualPain 12 июл 2014, 00:25

Подскажите как загружать фотографию в вк? метод UploadPhotoToWall возвращает ошибку, проблемы с crossdomain.xml, пробую написать свой post запрос на jquery, тоже не работает(
Синтаксис:
Используется csharp
Application.ExternalEval(
            "$.post(upload_url,"+
            "{ photo: 'https://pp.vk.me/c618720/v618720590/4a6b/z13667SN5qw.jpg' }, function(data)                   " +
                 "{                                                         " +
                     "if (data.response)                                    " +
                         "var resp = data.response.toXml('response', true); " +
                     "else                                                  " +
                         "var resp = data.error.toXml('error', false);      " +

                     "unity.SendMessage(GameObjName, Callback, resp);       " +
                 "});  }                                                    ".
            Replace("upload_url",URL).
            Replace("GameObjName", "'" + JSCore.GameObjName + "'").
            Replace("Callback", "'" + s + "'") +
            JSCore.ObjToXml());
DualPain
Старожил
 
Сообщения: 727
Зарегистрирован: 11 янв 2013, 01:18
Skype: demon21.09

Re: UnAPI - враппер функций ВКонтакте API для Unity

Сообщение AppCode 12 июл 2014, 10:54

DualPain писал(а):Подскажите как загружать фотографию в вк? метод UploadPhotoToWall возвращает ошибку, проблемы с crossdomain.xml, пробую написать свой post запрос на jquery, тоже не работает(
Синтаксис:
Используется csharp
Application.ExternalEval(
            "$.post(upload_url,"+
            "{ photo: 'https://pp.vk.me/c618720/v618720590/4a6b/z13667SN5qw.jpg' }, function(data)                   " +
                 "{                                                         " +
                     "if (data.response)                                    " +
                         "var resp = data.response.toXml('response', true); " +
                     "else                                                  " +
                         "var resp = data.error.toXml('error', false);      " +

                     "unity.SendMessage(GameObjName, Callback, resp);       " +
                 "});  }                                                    ".
            Replace("upload_url",URL).
            Replace("GameObjName", "'" + JSCore.GameObjName + "'").
            Replace("Callback", "'" + s + "'") +
            JSCore.ObjToXml());


Кроссдоменные запросыф запрещеня, или отсылать Jsonp или на хостнге добавлять в хедеры атрибут Access-Control-Allow-Origin
AppCode
UNITрон
 
Сообщения: 172
Зарегистрирован: 03 июл 2013, 16:01
Откуда: Днепропетровск
Skype: appcode_

Re: UnAPI - враппер функций ВКонтакте API для Unity

Сообщение DualPain 19 июл 2014, 16:17

AppCode писал(а):Кроссдоменные запросыф запрещеня, или отсылать Jsonp или на хостнге добавлять в хедеры атрибут Access-Control-Allow-Origin

Если не сложно, пожалуйста, по-подробнее, или может ссылочку какую на эту тему...
DualPain
Старожил
 
Сообщения: 727
Зарегистрирован: 11 янв 2013, 01:18
Skype: demon21.09

Re: UnAPI - враппер функций ВКонтакте API для Unity

Сообщение DualPain 19 июл 2014, 16:43

мне кажется или для обоих вариантов необходим отдельный сервер, который будет посредником между клиентов и вк?
DualPain
Старожил
 
Сообщения: 727
Зарегистрирован: 11 янв 2013, 01:18
Skype: demon21.09

Re: UnAPI - враппер функций ВКонтакте API для Unity

Сообщение AppCode 25 июл 2014, 13:43

DualPain писал(а):
AppCode писал(а):Кроссдоменные запросыф запрещеня, или отсылать Jsonp или на хостнге добавлять в хедеры атрибут Access-Control-Allow-Origin

Если не сложно, пожалуйста, по-подробнее, или может ссылочку какую на эту тему...


Вот как пример - http://www.webdevdoor.com/jquery/cross- ... json-ajax/
А вообще смотря на чем у вас написан сервер, я могу показать пример реализации для Java сервера
AppCode
UNITрон
 
Сообщения: 172
Зарегистрирован: 03 июл 2013, 16:01
Откуда: Днепропетровск
Skype: appcode_

Re: UnAPI - враппер функций ВКонтакте API для Unity

Сообщение AppCode 25 июл 2014, 13:51

JS часть:

Синтаксис:
Используется javascript
VKModule.postMessageToUserWall = function postMessageToUserWall(uid, message, fileName, appUrl, success) {
                VK.api("photos.getWallUploadServer", function (data) {
                        if (data.response) {
                                $.ajax({
                                        url: "http://localhost:8080/rest/vk/wall",
                                        type: "POST",
                                        data: JSON.stringify({upload_url:data.response.upload_url, file_name:fileName}),
                                        contentType:"application/json; charset=utf-8",
                                        dataType:"json",
                                        success: function(response){
                                                VK.api("photos.saveWallPhoto", {user_id:uid, photo:response.photo, server:response.server, hash:response.hash}, function(data){
                                                        VK.api("wall.post", {owner_id:uid, message:message, attachments:"photo" + uid + "_" + data.response[0].id + "," + appUrl}, function(result){
                                                                success(result);
                                                        });
                                                });
                                        },
                                        error: function(response){
                                                console.log("ERROR");
                                                //TODO send error message to server
                                        }
                                });
                        }
                });
    };
 


Серверная часть:

Сервис аплоада изображения на сервера ВК:
Синтаксис:
Используется java
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.HttpClientBuilder;
import org.codehaus.jackson.map.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import ua.com.zlgames.rest.vk.WallImage;

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;

/**
 * Created by Vitalij_Litvinenko on 6/27/2014.
 */

@RestController
@RequestMapping(value = "/rest/vk/wall")
public class WallImageService {
    protected static final Logger _logger = LoggerFactory.getLogger(WallImageService.class);

    private final String USER_AGENT = "Mozilla/5.0";

    @RequestMapping(method = RequestMethod.POST)
    WallImage createWallImage(@RequestBody WallImage wallImage) {
        return uploadFileToServer(wallImage.getUpload_url(), wallImage.getFile_name());
    }

    private WallImage uploadFileToServer(String serverUrl, String filename) {
        ObjectMapper mapper = new ObjectMapper();

        try {
            HttpClient httpclient = HttpClientBuilder.create().build();

            HttpPost httppost = new HttpPost(serverUrl);
            httppost.setHeader("User-Agent", USER_AGENT);

            MultipartEntityBuilder builder = MultipartEntityBuilder.create();
            builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
            builder.addBinaryBody("file", new File(filename));
            httppost.setEntity(builder.build());

            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();

            BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
            String inputLine;
            StringBuffer result = new StringBuffer();

            while ((inputLine = in.readLine()) != null) {
                result.append(inputLine);
            }
            in.close();

            WallImage wallImage = mapper.readValue(result.toString(), WallImage.class);
            return wallImage;
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }
}
 


Настройки фильтров на сервере:
Синтаксис:
Используется java
import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * Created by Vitalij_Litvinenko on 7/2/2014.
 */

@Component
public class SimpleCORSFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse res = (HttpServletResponse) response;

        res.setHeader("Access-Control-Allow-Origin", NetworkConfig.ACCESS_CONTROL_ALLOW_ORIGIN);
        res.setHeader("Access-Control-Allow-Methods", NetworkConfig.ACCESS_CONTROL_ALLOW_METHODS);
        res.setHeader("Access-Control-Max-Age", NetworkConfig.ACCESS_CONTROL_MAX_AGE);
        res.setHeader("Access-Control-Allow-Headers", NetworkConfig.ACCESS_CONTROL_ALLOW_HEADERS);
        res.setHeader("Access-Control-Expose-Headers", NetworkConfig.ACCESS_CONTROL_EXPOSE_HEADERS);
        res.setHeader("Content-Type", NetworkConfig.CONTENT_TYPE);

        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {
    }
}
 


Но учтите что я использую Spring Boot, но в общем идея должна быть понятна и прозрачна, если будут вопросы - пишите, надеюсь я помог.
AppCode
UNITрон
 
Сообщения: 172
Зарегистрирован: 03 июл 2013, 16:01
Откуда: Днепропетровск
Skype: appcode_

Re: UnAPI - враппер функций ВКонтакте API для Unity

Сообщение DualPain 25 июл 2014, 18:03

огромное спасибо, буду разбираться
DualPain
Старожил
 
Сообщения: 727
Зарегистрирован: 11 янв 2013, 01:18
Skype: demon21.09

Re: UnAPI - враппер функций ВКонтакте API для Unity

Сообщение netghost55 09 ноя 2015, 10:26

Как скрывать окно плеера, если открывается к примеру экран настроек? никак не могу разобраться, как использовать JSEvents OnWindowBlur...
Аватара пользователя
netghost55
UNIт
 
Сообщения: 108
Зарегистрирован: 23 июн 2015, 12:23

Re: UnAPI - враппер функций ВКонтакте API для Unity

Сообщение Diab10 09 ноя 2015, 11:39

netghost55 писал(а):Как скрывать окно плеера, если открывается к примеру экран настроек? никак не могу разобраться, как использовать JSEvents OnWindowBlur...



Синтаксис:
Используется csharp


    /// <summary>
    /// Вызывается при удачной инициализации JavaScript API
    /// </summary>
    /// <param name="ParamData"></param>
    public void InitSuccess(string ParamData)
    {
        //получение параметров запуска из GET запроса
        JSCore.GetParams("OnGetParams");
        JSCore.AddCallback("onWindowBlur", "onWindowBlu");
        JSCore.AddCallback("onWindowFocus", "onWindowFoc");
    }
       
        public void onWindowBlu()
    {
        JSCore.CallMethod("resizeWindow", "10,10");
    }
       
        public void onWindowFoc()
    {
        JSCore.CallMethod("resizeWindow", "800,850");
    }
 
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: UnAPI - враппер функций ВКонтакте API для Unity

Сообщение netghost55 09 ноя 2015, 12:39

почему то не работает. У меня и через html страницу почему то не хочет скрывать окно... Делаю игру в Unity 5.2.1 , может что то не так с этим? [curved_hands]
Синтаксис:
Используется javascript
VK.init(function() {
                        // API initialization succeeded
                        // Your code here              
                        //hide window with player Unity
                        VK.addCallBack('onWindowBlur', function(settings) { UnityHide(); });
                        //show window with player Unity
                        VK.addCallBack('onWindowFocus', function(settings) { UnityShow();});
                               
                }, function() {
                // API initialization failed
                // Can reload page here
                }, '5.37');
               
                //get Unity access
                function GetUnity(){
                                return u.getUnity();
                }
               
                //show Unity
                function UnityShow(){
                        GetUnity().style.visibility = 'visible';
                }
               
                //hide Unity
                function UnityHide(){
                        GetUnity().style.visibility = 'hidden';
                }
а может не работать, если я в htmlе Это прописал, а из юнити пытаюсь другое вытащить. ? прописал в гейм менеджере те строчки что вы написали, чтоб он действовал по всей игре...
Аватара пользователя
netghost55
UNIт
 
Сообщения: 108
Зарегистрирован: 23 июн 2015, 12:23

Re: UnAPI - враппер функций ВКонтакте API для Unity

Сообщение Diab10 09 ноя 2015, 13:41

Не знаю что у вас там, но у меня этот код прописан в VKCommunicator.cs прям в враппере, и всё работает.
Не думаю, что версия юнити может на это влиять
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: UnAPI - враппер функций ВКонтакте API для Unity

Сообщение netghost55 09 ноя 2015, 13:57

Diab10 писал(а):Не знаю что у вас там, но у меня этот код прописан в VKCommunicator.cs прям в враппере, и всё работает.
Не думаю, что версия юнити может на это влиять


Спасибо, все заработало :), когда в комуникаторе прописал...
Аватара пользователя
netghost55
UNIт
 
Сообщения: 108
Зарегистрирован: 23 июн 2015, 12:23

Re: UnAPI - враппер функций ВКонтакте API для Unity

Сообщение Kiritoart95 10 ноя 2015, 10:23

Ребят, помогите! В консоли пишет, что GetUnity() не определено. Может у кого есть ссылка на документацию JSAPI самой юньки?
Kiritoart95
UNец
 
Сообщения: 1
Зарегистрирован: 18 сен 2014, 20:35

Re: UnAPI - враппер функций ВКонтакте API для Unity

Сообщение DbIMok 10 ноя 2015, 14:47

правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.6k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Пред.

Вернуться в Исходники (Копилка)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1