21 авг. 2011 г.

Unity3d, Facebook и Twitter. Давайте публиковать результаты игр

Существует несколько проверенных мной способов отправить результаты игры (и не только), написанной на Unity3d. Как всем известно, публиковать на Facebook и Twitter сообщения можно двумя способами: открыв сайт сервиса в браузере либо открыв клиентскую программу, вбить туда сообщение и отправить сообщение (хотя есть еще способ - отправить с помощью смс, однако, для игры с подключенным сервисом OpenFeint, которому требуется интернет-соединение, этот способ можно отключить, поскольку смс не так удобно, как написать сообщение в клиенте или браузере).


Публикация результата игры на Facebook и Twitter с помощью браузера

Начнем с того, что в Unity3d есть замечательная функция, которая открывает нужную нам страничку в браузере. Конечно же, никто не запрещает передать параметры в строке запроса. Вот она:

Application.OpenURL(string url);
Она открывает заданный URL в браузере мобильного устройства.

Facebook и Unity3d

  • создаем приложение фейсбук, с помощью которого будем публиковать сообщения на стенах игроков (конечно же, по их воле ;) ). Заходим на страницу создания приложения Facebook и добавляем свое приложение, через которое будем публиковать. Назвать можно как угодно, главное, чтоб оно не пугало пользователей. Я назвал по имени нашей компании "Lopatatech Sharer", хотя можно было по имени игры, к примеру. Можно добавить логотип приложению и другие феньки, чтоб солиднее смотрелось, но не будем вдаваться в оффтопик, тему приложений в соцсетях разовьем позже. Здесь нам нужен App ID

    Параметры только что созданного приложения Facebook


  • Далее создаем модуль для Unity3d. Для моего функционала достаточно одного класса с одной функцией, которая выглядит вот так:

    
    const string AppId = "17657657657850";
    const string ShareUrl = "http://www.facebook.com/dialog/feed";
    
    public static void Share(string link, string pictureLink, string name, 
        string caption, string description, string redirectUri)
    {
        Application.OpenURL(ShareUrl + 
            ?app_id=" + AppId + 
            "&link=" + WWW.EscapeURL( link )+ 
            "&picture=" + WWW.EscapeURL(pictureLink) + 
            "&name=" + WWW.EscapeURL(name) + 
            "&caption=" + WWW.EscapeURL(caption) + 
            "&description=" + WWW.EscapeURL(description) + 
            "&redirect_uri=" + WWW.EscapeURL(redirectUri));
    }
    

    AppId - тот самый идентификатор приложения, которое мы создали выше, link - ссылка, которая появится в сообщении на стене пользователя, picture - ссылка на изображение, которое будет прикреплено к сообщению, name - имя сообщения, caption - его заголовок, description - описание, redirect_uri - адрес того места, куда будет переадресован пользователь после публикации сообщения.

    Сразу замечу вот что: ввиду жуткого качества документации социальной сети Facebook, там не указано, что ссылка picture обязательная, как и redirect_uri (чтоб сильно не мучаться, в качестве этого адреса указываю сам Facebook).

    Это все выглядит вот так:

    Опубликованное сообщение на Facebook


Twitter и Unity3d

 

С Twitter все проще: здесь достаточно знать нужный URL и параметры публикации:


const string Address = "http://twitter.com/intent/tweet";

public static void Share(string text, string url, 
    string related, string lang="en")
{
    Application.OpenURL(Address + 
        "?text=" + WWW.EscapeURL(text) + 
        "&url=" + WWW.EscapeURL(url) + 
        "&related=" + WWW.EscapeURL(related) + 
        "&lang=" + WWW.EscapeURL(lang));
}


text - текст твита (напомню, не более 140 символов), url - адрес прикрепляемой ссылки, related - аккаунты, на которые будет предложено подписаться после отправки твита, если пользователь не подписан на них и lang - язык твита.

Публикация результата игры на Facebook и Twitter с помощью клиентской программы

Конечно, этот подход не подходит напрямую для Unity3d, однако тоже может подойти для отправки результатов игры в социальные сети. Причем пользователь может выбрать сам в какую социальную сеть он желает отправить сообщение с результатом. Здесь речь идет не только о Twitter и Facebook, но и о любой другой сети, клиент которой установлен на устройстве пользователя.
Замечу, что изучал я эту тему только на Android, но и на iOS должно найтись что-то подобное.

Следующий код на чистой яве, которая используется при написании приложений при работе напрямую с Android SDK:


public void share(String subject,String text) 
{
    final Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("text/plain");
    intent.putExtra(Intent.EXTRA_SUBJECT, subject);
    intent.putExtra(Intent.EXTRA_TEXT, text);
    startActivity(Intent.createChooser(intent, getString(R.string.share)));
}

После выполнения данной функции будет открыто окно выбора программы, через которую можно отправить сообщение. Выглядит примерно так:

Диалог Share на Android

По поводу того, как использовать это в проекте Unity3d - есть такой класс как Android JNI. Он позволяет выполнять функции Android SDK из Unity3d. Думаю, можно успешно его использовать для открытия этого диалога на Android-устройстве. Я не использовал этот подход в своем проекте потому, что наткнувшись вот на эту публикацию и поняв, что ответа дать не могут (да и, к тому же, решение не кроссплатформенное), я приостановил свои изыскания и выбрал вариант с браузерами. Однако данная тема интересна мне и все-таки хотелось бы ее освоить.

На этом останавливаю свой поток сознания, спасибо всем за внимание, надеюсь хоть что-то пригодится ;)

7 комментариев:

  1. А для вконтакте есть такое же?

    ОтветитьУдалить
  2. Очень нужная инфа, спасибо !

    ОтветитьУдалить
  3. Error Message: Requires valid redirect URI

    Выдает независимо от того что пишу в редиректе. Что делать?

    ОтветитьУдалить
    Ответы
    1. Вполне возможно, что Redirect URI должен вести на домен приложения (если такой параметр есть). Точнее подсказать не могу, надо экспериментировать

      Удалить