Інтеграція Unity з Facebook. Авторизація та обмін новинами

Хто хоче зробити свою гру більш вірусною? Ласкаво просимо до другої частини серії «Інтеграція Unity з Facebook». Обіцяю, цього разу буде більше коду.

План:

  1. Інтеграція Facebook SDK
  2. Авторизація та обмін новинами (читаємо зараз)

Дисклеймер. Як і в інших моїх статтях, ця може містити деякі не оптимальні рішення, тому, якщо ви хочете вказати на кращі варіанти, будь ласка, зробіть це в коментарях нижче — мені буде приємно почути думки інших розробників Unity.

Хоча кроки можуть відрізнятися в залежності від типу вашого проєкту, основи інтеграції Unity з Facebook найкраще описані в офіційній документації. Тож ще раз, перевірте це перед початком. Сподіваюся, ви вже інтегрували Facebook SDK у свій проєкт (якщо ні — інтегруйте Facebook в Unity, інакше ви не зможете слідувати далі) і нам залишилося всього кілька справ :)

О, я майже забув. Чому інтеграція Unity з Facebook? Це досить просто. Соціальний компонент є дуже потужним, і коли його правильно використовувати, ви можете отримати чимало нових гравців. Адже ми всі хочемо, щоб більше людей насолоджувалися нашими іграми!

Treasure Pop Bubble Shooter і City Jumper — Рівень пройдено

Інтеграція логіки обміну

Для інтеграції логіки обміну в ігровий процес використовуються кілька підходів. Зазвичай ми надаємо таку функцію після того, як гравець завершив рівень або іншу логічну частину гри. У цьому випадку гравець може перевірити свій прогрес і поділитися ним з друзями (згадайте всі ті пости в соціальних мережах, які з'являються після успішно складених іспитів або закінчення університету).

Тут дизайнер гри ніби тягне за нитки гравця, який не проти поділитися своїми досягненнями в грі. Крім того, ви можете мотивувати гравців, подвоюючи золото/кільця/гриби або інші колекційні предмети, доступні у вашій грі, таким чином отримуючи кілька репостів.

Ще один варіант для генерації репостів — це дати гроші користувачу. Я маю на увазі внутрішньоігрову валюту (інакше вам доведеться змінити свою модель монетизації :). І, обмеживши кількість репостів, ви можете отримати постійний потік таких дій. Не так погано, правда?

Treasure Pop Bubble Shooter і City Jumper — Поділитися з друзями та отримати монети

Ініціалізація SDK

Перед репостингом вам потрібно ініціалізувати SDK. Додайте наступне до методу Awake() компонента об'єкта у вашій сцені завантаження (або будь-якому іншому базовому компоненті, що реалізує MonoBehaviour):

void Awake (){if(!FB.IsInitialized){// Ініціалізуйте Facebook SDK
        FB.Init(InitCallback, OnHideUnity);}else{// Вже ініціалізовано, сигналізуємо про активацію програми
        FB.ActivateApp();}}privatevoid InitCallback (){if(FB.IsInitialized){// Сигналізуємо про активацію програми
        FB.ActivateApp();// Продовжуємо з Facebook SDK// ...}else{
        Debug.Log("Не вдалося ініціалізувати Facebook SDK");}}
 
privatevoid OnHideUnity (bool isGameShown){if(!isGameShown){// Призупинити гру - нам потрібно приховатиTime.timeScale=0;}else{// Відновити гру - ми знову отримуємо фокусTime.timeScale=1;}}

Чудово! Тепер у нас є вибір і ми можемо писати те, що хочемо.

Додавання функції репосту

Припустімо, ви хочете додати функцію репосту до вашого додатку. Є два можливі способи зробити це. Давайте розглянемо перший варіант:

FB.ShareLink();
 
 FB.ShareLink(new Uri("https://developers.facebook.com/"),
                callback: ShareCallback);

Facebook рекомендує використовувати це для поширення посилань на різні веб-сайти. Воно автоматично отримує назву сторінки, опис і зображення — вам не потрібно про це турбуватися.

Ваш другий варіант для реалізації функції репосту:

FB.FeedShare()
 
FB.FeedShare(
            toId:"",
            link:new Uri("https://developers.facebook.com/"),
            callback: ShareCallback);

Так само, як і перший варіант, він дозволяє поділитися посиланням. Але тут ми отримуємо трохи більше функцій, хоча хлопці з Facebook рекомендують використовувати FB.ShareLink() за замовчуванням. Тож чим цей варіант відрізняється від першого?

  1. При його використанні вам не потрібно публікувати посилання, ви можете просто використовувати зображення з заголовком і описом.
  2. Він має параметр "to", який визначає, на якій сторінці публікація з'явиться: на сторінці користувача чи на чужій.

Окрім цього, обидва приймають колбек для обробки результатів поширення новин як останній параметр:

privatevoid ShareCallback (IShareResult result){if(result.Cancelled||!String.IsNullOrEmpty(result.Error)){
        Debug.Log("Помилка ShareLink: "+result.Error);}elseif(!String.IsNullOrEmpty(result.PostId)){// Вивести ідентифікатор поста поділеного контенту
        Debug.Log(result.PostId);}else{// Поширення пройшло успішно без postID
        Debug.Log("ShareLink успішно!");}}

Слід зазначити, що для використання цієї функції вам НЕ потрібно, щоб користувач входив в систему.

Але якщо ви хочете, перегляньте методи авторизації нижче. Є два типи авторизації: для читання та для запису.

Для читання:

publicvoid LoginWithReadPermission(){
        var perms =new List<string>(){"public_profile", "email", "user_friends"};
        FB.LogInWithReadPermissions(perms, AuthCallback);}</string>

Для запису:

publicvoid LoginWithPublishPermission(){
        var perms =new List<string>(){"publish_actions"};
        FB.LogInWithPublishPermissions(perms, AuthCallback);}</string>

Колбек для обробки результатів авторизації:

privatevoid AuthCallback(ILoginResult result){if(FB.IsLoggedIn){// AccessToken class will have session details
            var aToken = Facebook.Unity.AccessToken.CurrentAccessToken;// Print current access token's User ID
            Debug.Log(aToken.UserId);// Print current access token's granted permissionsforeach(string perm in aToken.Permissions){
                Debug.Log(perm);}}else{
            Debug.Log("Користувач скасував вхід");}}

При авторизації користувач спочатку бачить звичайне вікно авторизації, а потім вікно з запитом на публікацію на стіні або надсилання приватного повідомлення друзям.

Treasure Pop Bubble Shooter — Отримання дозволів

Це означає, що навіть використовуючи LogInWithPublishPermissions(), ви можете отримати авторизованого користувача без дозволу на публікацію (якщо він або вона скасує публікацію під час авторизації або вимкне її пізніше на Facebook). У цьому випадку ви можете отримати всі надані дозволи в наступній колекції:

foreach(string perm in AccessToken.CurrentAccessToken.Permissions){// log each granted permission
    Debug.Log(perm);}

Ви можете запитати: навіщо нам взагалі потрібен цей вхід? Окрім отримання очевидних речей, таких як фотографія профілю, електронна пошта, список друзів тощо, використовуючи withPublishPermissions для входу, ми можемо писати на стіні користувача прямо з додатку (можливо, навіть пропустити етап підтвердження, якщо користувач дозволив вам публікувати без підтвердження).

Ось як з'являються повідомлення про проходження наступного рівня Candy Crush у вашій стрічці новин. Але це тема для окремої статті :) І, як ви, напевно, здогадалися, я запрошую вас залишати коментарі нижче та ділитися власним досвідом.

“Досить і спасибі за всю рибу”

Потрібна розробка MVP, iOS та Android застосунків або прототипування? Ознайомтесь з нашим портфоліо та зробіть замовлення сьогодні!