Work in progress
The content of this page was not yet updated for Godot
4.4
and may be outdated. If you know how to improve this page or you can confirm
that it's up to date, feel free to open a pull request.
Plugins für iOS
Godot bietet StoreKit, GameCenter, iCloud-Dienste und andere Plugins. Sie verwenden dasselbe Modell asynchroner Aufrufe, das weiter unten erläutert wird.
ARKit und Kamerazugriff werden auch als Plugins bereitgestellt.
Aktuelle Updates, Dokumentation und Quellcode finden Sie im Godot iOS plugins repository
Zugriff auf Plugin-Singletons
Um auf die Plugin-Funktionen zugreifen zu können, müssen Sie zunächst überprüfen, ob das Plugin exportiert wurde und verfügbar ist, indem Sie die Funktion Engine.has_singleton() aufrufen, die ein registriertes Singleton zurückgibt.
Hier ist ein Beispiel dafür, wie Sie dies in GDScript tun können:
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.")
Asynchrone Methoden
Wenn Sie eine asynchrone Operation anfordern, sieht die Methode folgendermaßen aus:
Error purchase(Variant params);
Der Parameter ist in der Regel ein Dictionary mit den für die Anfrage erforderlichen Informationen, und der Aufruf erfolgt in zwei Phasen. Zunächst gibt die Methode sofort einen Fehlerwert zurück. Ist der Fehlerwert nicht "OK", wird der Aufrufvorgang abgeschlossen, wobei der Fehler wahrscheinlich lokal verursacht wurde (keine Internetverbindung, API falsch konfiguriert usw.). Ist der Fehlerwert "OK", wird ein Antwort-Ereignis erzeugt und in die Warteschlange "ausstehende Ereignisse" aufgenommen. Beispiel:
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()
Denken Sie daran, dass die API, wenn ein Aufruf mit OK beantwortet wird, immer ein Ereignis über die Schnittstelle pending_event erzeugt, auch wenn es sich um einen Fehler, eine Zeitüberschreitung im Netzwerk usw. handelt. Sie sollten in der Lage sein, die Schnittstelle sicher zu blockieren und auf eine Antwort vom Server zu warten. Wenn eine der APIs sich nicht auf diese Weise verhält, sollte dies als Fehler behandelt werden.
Die Schnittstelle für ausstehende Ereignisse besteht aus zwei Methoden:
get_pending_event_count()gibt die Anzahl der ausstehenden Ereignisse in der Warteschlange zurück.Variant pop_pending_event()entfernt das erste Ereignis aus der Warteschlange und gibt es zurück.
Store Kit
Implementiert in Godot iOS InAppStore plugin.
Die Store Kit-API ist über das Singleton InAppStore zugänglich. Es wird automatisch initialisiert.
Folgende Methoden sind unten verfügbar und dokumentiert:
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()
purchase
Kauft eine Produkt-ID über die Store Kit API. Sie müssen finish_transaction(product_id) aufrufen, sobald Sie eine erfolgreiche Antwort erhalten haben oder set_auto_finish_transaction(true) aufrufen, bevor Sie purchase() aufrufen. Diese beiden Methoden stellen sicher, dass die Transaktion abgeschlossen wird.
Parameter
Nimmt ein Dictionary als Parameter, mit einem Feld product_id: Einem String mit Ihrer Produkt-ID. Beispiel:
var result = in_app_store.purchase({ "product_id": "my_product" })
Antwortereignis
Das Antwortereignis ist ein Dictionary mit den folgenden Feldern:
bei Fehler:
{
"type": "purchase",
"result": "error",
"product_id": "the product ID requested",
}
bei Erfolg:
{
"type": "purchase",
"result": "ok",
"product_id": "the product ID requested",
}
request_product_info
Fordert die Produktinfo aus einer Liste von Produkt-IDs an.
Parameter
Nimmt ein Dictionary als Parameter, mit einem einzelnen product_ids-Key, dem ein String-Array von Produkt-IDs zugewiesen wird. Beispiel:
var result = in_app_store.request_product_info({ "product_ids": ["my_product1", "my_product2"] })
Antwortereignis
Das Antwortereignis ist ein Dictionary mit den folgenden Feldern:
{
"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
Stellt zuvor getätigte Käufe auf dem Konto des Benutzers wieder her. Dadurch werden Antwortereignisse für jede zuvor gekaufte Produkt-ID erstellt.
Antwortereignis
Bei den Antwortereignissen geht es um Dictionarys mit den folgenden Feldern:
{
"type": "restore",
"result": "ok",
"product_id": "product ID of restored purchase",
}
set_auto_finish_transaction
Wenn diese Methode auf true gesetzt ist, wird der Kauf automatisch abgeschlossen, sobald er erfolgreich war. Rufen Sie diese Methode vor dem Aufruf von Purchase() auf.
Parameter
Nimmt einen booleschen Wert als Parameter an, der angibt, ob die Einkäufe automatisch abgeschlossen werden sollen. Beispiel:
in_app_store.set_auto_finish_transaction(true)
finish_transaction
Wenn Sie nicht wollen, dass Transaktionen automatisch abgeschlossen werden, rufen Sie diese Methode auf, nachdem Sie eine erfolgreiche Kaufantwort erhalten haben.
Parameter
Nimmt einen String product_id als Argument. Die Produkt_ID gibt an, für welches Produkt der Kauf abgeschlossen werden soll. Beispiel:
in_app_store.finish_transaction("my_product1")
Game Center
Implementiert in Godot iOS GameCenter Plugin.
Die Game Center-API ist über das GameCenter-Singleton verfügbar. Es hat die folgenden Methoden:
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()
und die Schnittstelle für anstehende Ereignisse:
int get_pending_event_count()
Variant pop_pending_event()
authenticate
Authentifiziert einen Benutzer im Game Center.
Antwortereignis
Das Antwortereignis ist ein Dictionary mit den folgenden Feldern:
bei Fehler:
{
"type": "authentication",
"result": "error",
"error_code": the value from NSError::code,
"error_description": the value from NSError::localizedDescription,
}
bei Erfolg:
{
"type": "authentication",
"result": "ok",
"player_id": the value from GKLocalPlayer::playerID,
}
post_score
Veröffentlicht eine Punktzahl auf einer Game Center-Bestenliste.
Parameter
Nimmt ein Dictionary als Parameter mit zwei Feldern:
scoreeine Float-Zahlcategoryein String mit dem Kategorienamen
Beispiel:
var result = game_center.post_score({ "score": 100, "category": "my_leaderboard", })
Antwortereignis
Das Antwortereignis ist ein Dictionary mit den folgenden Feldern:
bei Fehler:
{
"type": "post_score",
"result": "error",
"error_code": the value from NSError::code,
"error_description": the value from NSError::localizedDescription,
}
bei Erfolg:
{
"type": "post_score",
"result": "ok",
}
award_achievement
Ändert den Fortschritt eines Game Center-Achievements.
Parameter
Nimmt ein Dictionary als Parameter mit 3 Feldern:
name(String) den Namen des Achievementsprogress(Float) der Achievements-Fortschritt von 0.0 bis 100.0 (übergeben anGKAchievement::percentComplete)show_completion_banner(bool) ob Game Center ein Banner am oberen Rand des Bildschirms anzeigen soll
Beispiel:
var result = award_achievement({ "name": "hard_mode_completed", "progress": 6.1 })
Antwortereignis
Das Antwortereignis ist ein Dictionary mit den folgenden Feldern:
bei Fehler:
{
"type": "award_achievement",
"result": "error",
"error_code": the error code taken from NSError::code,
}
bei Erfolg:
{
"type": "award_achievement",
"result": "ok",
}
reset_achievements
Löscht alle Game Center-Achievements. Die Funktion benötigt keine Parameter.
Antwortereignis
Das Antwortereignis ist ein Dictionary mit den folgenden Feldern:
bei Fehler:
{
"type": "reset_achievements",
"result": "error",
"error_code": the value from NSError::code,
}
bei Erfolg:
{
"type": "reset_achievements",
"result": "ok",
}
request_achievements
Fordert alle Game Center-Achievements an, bei denen der Spieler Fortschritte gemacht hat. Die Funktion benötigt keine Parameter.
Antwortereignis
Das Antwortereignis ist ein Dictionary mit den folgenden Feldern:
bei Fehler:
{
"type": "achievements",
"result": "error",
"error_code": the value from NSError::code,
}
bei Erfolg:
{
"type": "achievements",
"result": "ok",
"names": [ list of the name of each achievement ],
"progress": [ list of the progress made on each achievement ],
}
request_achievement_descriptions
Fordert die Beschreibungen aller vorhandenen Game Center-Achievements unabhängig vom Fortschritt an. Die Funktion benötigt keine Parameter.
Antwortereignis
Das Antwortereignis ist ein Dictionary mit den folgenden Feldern:
bei Fehler:
{
"type": "achievement_descriptions",
"result": "error",
"error_code": the value from NSError::code,
}
bei Erfolg:
{
"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.
Parameter
Nimmt ein Dictionary als Parameter mit zwei Feldern:
view(String) (optional) der Name der zu präsentierenden Ansicht. Akzeptiert "default", "leaderboards", "achievements", oder "challenges". Standardmäßig wird "default" verwendet.leaderboard_name(String) (optional) der Name des Leaderboards, das angezeigt werden soll. Wird nur verwendet, wenn "view" gleich "leaderboards" ist (oder "default" so konfiguriert ist, dass Leaderboards angezeigt werden). Wenn nicht angegeben, zeigt Game Center die Gesamtrangliste an.
Beispiele:
var result = show_game_center({ "view": "leaderboards", "leaderboard_name": "best_time_leaderboard" })
var result = show_game_center({ "view": "achievements" })
Antwortereignis
Das Antwortereignis ist ein Dictionary mit den folgenden Feldern:
beim Beenden:
{
"type": "show_game_center",
"result": "ok",
}