Plugins for iOS

At the moment Godot provides StoreKit, GameCenter, iCloud services plugins. They are using same model of asynchronous calls explained below.

ARKit and Camera access are also provided as plugins.

Accessing plugin singletons

To access plugin functionality, you first need to check that the plugin is exported and available by calling the Engine.has_singleton() function, which returns a registered singleton.

Here's an example of how to do this in GDScript:

var in_app_store

func _ready():
    if Engine.has_singleton("InAppStore"):
        in_app_store = Engine.get_singleton("InAppStore")

    else:
        print("iOS IAP plugin is not exported.")

Asynchrone Methoden

Wenn Sie eine asynchrone Operation anfordern, sieht die Methode folgendermaßen aus:

Error purchase(Variant p_params);

The parameter will usually be a Dictionary, with the information necessary to make the request, and the call will have two phases. First, the method will immediately return an Error value. If the Error is not 'OK', the call operation is completed, with an error probably caused locally (no internet connection, API incorrectly configured, etc). If the error value is 'OK', a response event will be produced and added to the 'pending events' queue. Example:

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()

Remember that when a call returns OK, the API will always produce an event through the pending_event interface, even if it's an error, or a network timeout, etc. You should be able to, for example, safely block the interface waiting for a reply from the server. If any of the APIs don't behave this way it should be treated as a bug.

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() löscht das erste Ereignis aus der Warteschlange und gibt es zurück.

Store Kit

Implemented in Godot iOS InAppStore plugin.

The Store Kit API is accessible through the InAppStore singleton. It is initialized automatically.

  • Error purchase(Variant p_params);

  • Error request_product_info(Variant p_params);

  • Error restore_purchases();

und die Schnittstelle pending_event

int get_pending_event_count();
Variant pop_pending_event();

Kauf

Kauf einer Produkt-ID über die Store Kit API.

Parameter

Takes a Dictionary as a parameter, with one field, product_id, a string with your product id. Example:

var result = InAppStore.purchase( { "product_id": "my_product" } )

Antwortereignis

Das Antwortereignis ist ein Wörterbuch 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

Takes a Dictionary as a parameter, with one field, product_ids, a string array with a list of product ids. Example:

var result = InAppStore.request_product_info( { "product_ids": ["my_product1", "my_product2"] } )

Antwortereignis

Das Antwortereignis ist ein Wörterbuch 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

Restores previously made purchases on user's account. This will create response events for each previously purchased product id.

Antwortereignis

Bei den Antwortereignissen geht es um Wörterbücher mit den folgenden Feldern:

{
  "type": "restore",
  "result": "ok",
  "product id": "product id of restored purchase"
}

Game Center

Implemented in Godot iOS GameCenter plugin.

The Game Center API is available through the GameCenter singleton. It has the following methods:

  • Error authenticate();

  • bool is_authenticated();

  • Error post_score(Variant p_score);

  • Error award_achievement(Variant p_params);

  • void reset_achievements();

  • void request_achievements();

  • void request_achievement_descriptions();

  • Error show_game_center(Variant p_params);

  • Error request_identity_verification_signature();

sowie die Standardschnittstelle für ausstehende Ereignisse.

authentifizieren

Authentifiziert einen Benutzer im Game Center.

Antwortereignis

Das Antwortereignis ist ein Wörterbuch 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 Wörterbuch als Parameter mit zwei Feldern:

  • score eine Kleitkommazahl

  • category eine Zeichenfolge mit dem Kategorienamen

Beispiel:

var result = GameCenter.post_score( { "score": 100, "category": "my_leaderboard", } )

Antwortereignis

Das Antwortereignis ist ein Wörterbuch 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-Erfolgs.

Parameter

Nimmt ein Wörterbuch als Parameter mit 3 Feldern:

  • name (Zeichenfolge) den Namen des Erfolgs

  • progress (Fließkomma) der Leistungsfortschritt von 0,0 bis 100,0 (übergeben an GKAchievement::percentComplete)

  • show_completion_banner (bool) whether Game Center should display an achievement banner at the top of the screen

Beispiel:

var result = award_achievement( { "name": "hard_mode_completed", "progress": 6.1 } )

Antwortereignis

Das Antwortereignis ist ein Wörterbuch 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-Erfolge. Die Funktion benötigt keine Parameter.

Antwortereignis

Das Antwortereignis ist ein Wörterbuch 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

Request all the Game Center achievements the player has made progress on. The function takes no parameters.

Antwortereignis

Das Antwortereignis ist ein Wörterbuch 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

Request the descriptions of all existing Game Center achievements regardless of progress. The function takes no parameters.

Antwortereignis

Das Antwortereignis ist ein Wörterbuch 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, Erfolgen und Herausforderungen an.

Parameter

Nimmt ein Wörterbuch als Parameter mit zwei Feldern:

  • view (string) (optional) the name of the view to present. Accepts "default", "leaderboards", "achievements", or "challenges". Defaults to "default".

  • leaderboard_name (string) (optional) the name of the leaderboard to present. Only used when "view" is "leaderboards" (or "default" is configured to show leaderboards). If not specified, Game Center will display the aggregate leaderboard.

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 Wörterbuch mit den folgenden Feldern:

beim beenden:

{
  "type": "show_game_center",
  "result": "ok",
}