Work in progress
The content of this page was not yet updated for Godot
4.2
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:
score
eine Float-Zahlcategory
ein 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
¶
Zeigt das integrierte Game Center-Overlay mit Bestenlisten, Achievements und Herausforderungen an.
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",
}