
Хто хоче зробити свою гру більш вірусною? Ласкаво просимо до другої частини серії «Інтеграція Unity з Facebook». Обіцяю, цього разу буде більше коду.
План:
- Інтеграція Facebook SDK
- Авторизація та обмін новинами (читаємо зараз)
Дисклеймер. Як і в інших моїх статтях, ця може містити деякі не оптимальні рішення, тому, якщо ви хочете вказати на кращі варіанти, будь ласка, зробіть це в коментарях нижче — мені буде приємно почути думки інших розробників Unity.
Хоча кроки можуть відрізнятися в залежності від типу вашого проєкту, основи інтеграції Unity з Facebook найкраще описані в офіційній документації. Тож ще раз, перевірте це перед початком. Сподіваюся, ви вже інтегрували Facebook SDK у свій проєкт (якщо ні — інтегруйте Facebook в Unity, інакше ви не зможете слідувати далі) і нам залишилося всього кілька справ :)
О, я майже забув. Чому інтеграція Unity з Facebook? Це досить просто. Соціальний компонент є дуже потужним, і коли його правильно використовувати, ви можете отримати чимало нових гравців. Адже ми всі хочемо, щоб більше людей насолоджувалися нашими іграми!
Інтеграція логіки обміну
Для інтеграції логіки обміну в ігровий процес використовуються кілька підходів. Зазвичай ми надаємо таку функцію після того, як гравець завершив рівень або іншу логічну частину гри. У цьому випадку гравець може перевірити свій прогрес і поділитися ним з друзями (згадайте всі ті пости в соціальних мережах, які з'являються після успішно складених іспитів або закінчення університету).
Тут дизайнер гри ніби тягне за нитки гравця, який не проти поділитися своїми досягненнями в грі. Крім того, ви можете мотивувати гравців, подвоюючи золото/кільця/гриби або інші колекційні предмети, доступні у вашій грі, таким чином отримуючи кілька репостів.
Ще один варіант для генерації репостів — це дати гроші користувачу. Я маю на увазі внутрішньоігрову валюту (інакше вам доведеться змінити свою модель монетизації :). І, обмеживши кількість репостів, ви можете отримати постійний потік таких дій. Не так погано, правда?
Ініціалізація 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()
за замовчуванням. Тож чим цей варіант відрізняється від першого?
- При його використанні вам не потрібно публікувати посилання, ви можете просто використовувати зображення з заголовком і описом.
- Він має параметр "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("Користувач скасував вхід");}}
При авторизації користувач спочатку бачить звичайне вікно авторизації, а потім вікно з запитом на публікацію на стіні або надсилання приватного повідомлення друзям.
Це означає, що навіть використовуючи LogInWithPublishPermissions()
, ви можете отримати авторизованого користувача без дозволу на публікацію (якщо він або вона скасує публікацію під час авторизації або вимкне її пізніше на Facebook). У цьому випадку ви можете отримати всі надані дозволи в наступній колекції:
foreach(string perm in AccessToken.CurrentAccessToken.Permissions){// log each granted permission Debug.Log(perm);}
Ви можете запитати: навіщо нам взагалі потрібен цей вхід? Окрім отримання очевидних речей, таких як фотографія профілю, електронна пошта, список друзів тощо, використовуючи withPublishPermissions для входу, ми можемо писати на стіні користувача прямо з додатку (можливо, навіть пропустити етап підтвердження, якщо користувач дозволив вам публікувати без підтвердження).
Ось як з'являються повідомлення про проходження наступного рівня Candy Crush у вашій стрічці новин. Але це тема для окремої статті :) І, як ви, напевно, здогадалися, я запрошую вас залишати коментарі нижче та ділитися власним досвідом.
“Досить і спасибі за всю рибу”
Потрібна розробка MVP, iOS та Android застосунків або прототипування? Ознайомтесь з нашим портфоліо та зробіть замовлення сьогодні!