Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Плаґіни для iOS
Godot надає сервіси StoreKit, GameCenter, iCloud та інші плагіни. Вони використовують ту саму модель асинхронних викликів, яка описана нижче.
ARKit і доступ до камери також надаються як плагіни.
Останні оновлення, документацію та вихідний код можна знайти в Godot iOS plugins repository
Доступ до синглтонів плагіна
Щоб отримати доступ до функцій плагіна, вам спочатку потрібно перевірити, чи плагін експортовано та доступний, викликавши функцію Engine.has_singleton(), яка повертає зареєстрований синглтон.
Ось приклад того, як це зробити в GDScript:
var in_app_store
var game_center
func _ready():
if Engine.has_singleton("InAppStore"):
in_app_store = Engine.get_singleton("InAppStore")
else:
print("iOS IAP plugin is not available on this platform.")
if Engine.has_singleton("GameCenter"):
game_center = Engine.get_singleton("GameCenter")
else:
print("iOS Game Center plugin is not available on this platform.")
Асинхронні методи
При запиті асинхронної операції метод буде виглядати так:
Error purchase(Variant params);
Зазвичай параметром буде словник з інформацією, необхідною для виконання запиту, і виклик матиме дві фази. По-перше, метод негайно поверне значення Error. Якщо помилка не «ОК», операція виклику завершена, і помилка, ймовірно, спричинена локально (відсутнє підключення до Інтернету, неправильно налаштований API тощо). Якщо значення помилки «ОК», буде створено подію відповіді та додано до черги «подій, що очікують». приклад:
func on_purchase_pressed():
var result = in_app_store.purchase({ "product_id": "my_product" })
if result == OK:
animation.play("busy") # show the "waiting for response" animation
else:
show_error()
# put this on a 1 second timer or something
func check_events():
while in_app_store.get_pending_event_count() > 0:
var event = in_app_store.pop_pending_event()
if event.type == "purchase":
if event.result == "ok":
show_success(event.product_id)
else:
show_error()
Пам’ятайте, що коли виклик повертається нормально, API завжди створюватиме подію через інтерфейс pending_event, навіть якщо це помилка, мережевий тайм-аут тощо. Ви повинні мати можливість, наприклад, безпечно заблокувати інтерфейс, який очікує відповідь від сервера. Якщо якийсь із API не поводиться таким чином, це слід розглядати як помилку.
Інтерфейс очікуваної події складається з двох методів:
get_pending_event_count()
Повертає кількість незавершених подій у черзі.Variant pop_pending_event()
Витягує першу подію з черги та повертає її.
Store kit
Реалізовано у плагіні Godot iOS InAppStore.
API Store Kit доступний через синглет InAppStore
. Він ініціалізується автоматично.
Наступні методи доступні та задокументовані нижче:
Error purchase(Variant params)
Error request_product_info(Variant params)
Error restore_purchases()
void set_auto_finish_transaction(bool enable)
void finish_transaction(String product_id)
and the pending events interface:
::
int get_pending_event_count()
Variant pop_pending_event()
покупка
Купує ідентифікатор продукту через Store Kit API. Вам потрібно викликати finish_transaction(product_id)
, коли ви отримаєте успішну відповідь, або викликати set_auto_finish_transaction(true)
перед викликом purchase()
. Ці два методи гарантують завершення транзакції.
Параметри
Приймає словник як параметр з одним полем, product_id
, рядком з ідентифікатором вашого продукту. приклад:
var result = in_app_store.purchase({ "product_id": "my_product" })
Подія відповіді
Подією відповіді буде словник із такими полями:
При помилці:
{
"type": "purchase",
"result": "error",
"product_id": "the product ID requested",
}
На успіх:
{
"type": "purchase",
"result": "ok",
"product_id": "the product ID requested",
}
request_product_info
Запитує інформацію про продукт у списку ідентифікаторів продукту.
Параметри
Приймає словник як параметр із єдиним ключем product_ids
, якому призначається рядковий масив ідентифікаторів продукту. приклад:
var result = in_app_store.request_product_info({ "product_ids": ["my_product1", "my_product2"] })
Подія відповіді
Подією відповіді буде словник із такими полями:
{
"type": "product_info",
"result": "ok",
"invalid_ids": [ list of requested IDs that were invalid ],
"ids": [ list of IDs that were valid ],
"titles": [ list of valid product titles (corresponds with list of valid IDs) ],
"descriptions": [ list of valid product descriptions ],
"prices": [ list of valid product prices ],
"localized_prices": [ list of valid product localized prices ],
}
restore_purchases
Відновлює раніше зроблені покупки в обліковому записі користувача. Це створить події відповіді для кожного раніше придбаного ідентифікатора продукту.
Подія відповіді
Подіями відповіді будуть словники з такими полями:
{
"type": "restore",
"result": "ok",
"product_id": "product ID of restored purchase",
}
set_auto_finish_transaction
Якщо встановлено значення true
, щойно покупка буде успішною, її буде автоматично завершено. Викличте цей метод перед викликом purchase()
.
Параметри
Приймає логічне значення як параметр, який визначає, чи потрібно автоматично завершувати покупки. приклад:
in_app_store.set_auto_finish_transaction(true)
finish_transaction
Якщо ви не хочете, щоб транзакції завершувалися автоматично, викликайте цей метод після отримання відповіді про успішну покупку.
Параметри
Приймає рядок product_id
як аргумент. product_id
визначає, який продукт завершити покупку. приклад:
in_app_store.finish_transaction("my_product1")
Game center
Реалізовано у плагіні Godot iOS GameCenter.
API Game Center доступний через синглет GameCenter
. Він має такі методи:
Error authenticate()
bool is_authenticated()
Error post_score(Variant score)
Error award_achievement(Variant params)
void reset_achievements()
void request_achievements()
void request_achievement_descriptions()
Error show_game_center(Variant params)
Error request_identity_verification_signature()
та інтерфейс очікуваних подій:
int get_pending_event_count()
Variant pop_pending_event()
authenticate
Автентифікує користувача в Game Center.
Подія відповіді
Подією відповіді буде словник із такими полями:
При помилці:
{
"type": "authentication",
"result": "error",
"error_code": the value from NSError::code,
"error_description": the value from NSError::localizedDescription,
}
На успіх:
{
"type": "authentication",
"result": "ok",
"player_id": the value from GKLocalPlayer::playerID,
}
post_score
Публікує рахунок у таблиці лідерів Game Center.
Параметри
Приймає словник як параметр із двома полями:
score
число з плаваючою точкоюcategory
рядок із назвою категорії
Приклад:
var result = game_center.post_score({ "score": 100, "category": "my_leaderboard", })
Подія відповіді
Подією відповіді буде словник із такими полями:
При помилці:
{
"type": "post_score",
"result": "error",
"error_code": the value from NSError::code,
"error_description": the value from NSError::localizedDescription,
}
На успіх:
{
"type": "post_score",
"result": "ok",
}
award_achievement
Змінює прогрес досягнення Game Center.
Параметри
Приймає словник як параметр із 3 полями:
name
(рядок) назва досягненняprogress
(float) прогрес досягнення від 0,0 до 100,0 (передаєтьсяGKAchievement::percentComplete
)show_completion_banner
(bool) чи повинен Game Center відображати банер досягнення у верхній частині екрана
Приклад:
var result = award_achievement({ "name": "hard_mode_completed", "progress": 6.1 })
Подія відповіді
Подією відповіді буде словник із такими полями:
При помилці:
{
"type": "award_achievement",
"result": "error",
"error_code": the error code taken from NSError::code,
}
На успіх:
{
"type": "award_achievement",
"result": "ok",
}
reset_achievements
Очищає всі досягнення Game Center. Функція не приймає параметрів.
Подія відповіді
Подією відповіді буде словник із такими полями:
При помилці:
{
"type": "reset_achievements",
"result": "error",
"error_code": the value from NSError::code,
}
На успіх:
{
"type": "reset_achievements",
"result": "ok",
}
request_achievements
Запитуйте всі досягнення Game Center, у досягненні яких досягнув гравець. Функція не приймає параметрів.
Подія відповіді
Подією відповіді буде словник із такими полями:
При помилці:
{
"type": "achievements",
"result": "error",
"error_code": the value from NSError::code,
}
На успіх:
{
"type": "achievements",
"result": "ok",
"names": [ list of the name of each achievement ],
"progress": [ list of the progress made on each achievement ],
}
request_achievement_descriptions
Запитуйте описи всіх наявних досягнень Game Center незалежно від прогресу. Функція не приймає параметрів.
Подія відповіді
Подією відповіді буде словник із такими полями:
При помилці:
{
"type": "achievement_descriptions",
"result": "error",
"error_code": the value from NSError::code,
}
На успіх:
{
"type": "achievement_descriptions",
"result": "ok",
"names": [ list of the name of each achievement ],
"titles": [ list of the title of each achievement ],
"unachieved_descriptions": [ list of the description of each achievement when it is unachieved ],
"achieved_descriptions": [ list of the description of each achievement when it is achieved ],
"maximum_points": [ list of the points earned by completing each achievement ],
"hidden": [ list of booleans indicating whether each achievement is initially visible ],
"replayable": [ list of booleans indicating whether each achievement can be earned more than once ],
}
show_game_center
Displays the built-in Game Center overlay showing leaderboards, achievements, and challenges.
Параметри
Приймає словник як параметр із двома полями:
view
(рядок) (необов’язковий) ім’я перегляду для представлення. Приймає «за замовчуванням», «таблиці лідерів», «досягнення» або «виклики». За замовчуванням встановлено "default".leaderboard_name
(рядок) (необов’язковий) назва таблиці лідерів для представлення. Використовується лише тоді, коли «перегляд» — «таблиці лідерів» (або «за замовчуванням» налаштовано для показу таблиць лідерів). Якщо не вказано, Game Center відображатиме загальну таблицю лідерів.
Приклади:
var result = show_game_center({ "view": "leaderboards", "leaderboard_name": "best_time_leaderboard" })
var result = show_game_center({ "view": "achievements" })
Подія відповіді
Подією відповіді буде словник із такими полями:
При закритті:
{
"type": "show_game_center",
"result": "ok",
}