Services for iOS

    When requesting an asynchronous operation, the method will look like this:

    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:

    1. var result = InAppStore.purchase( { "product_id": "my_product" } )
    2. if result == OK:
    3. animation.play("busy") # show the "waiting for response" animation
    4. else:
    5. show_error()
    6. # put this on a 1 second timer or something
    7. func check_events():
    8. while InAppStore.get_pending_event_count() > 0:
    9. var event = InAppStore.pop_pending_event()
    10. if event.type == "purchase":
    11. if event.result == "ok":
    12. show_success(event.product_id)
    13. else:
    14. 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.

    The pending event interface consists of two methods:

    • get_pending_event_count() Returns the number of pending events on the queue.
    • Variant pop_pending_event() Pops the first event from the queue and returns it.

    Implemented in platform/iphone/in_app_store.mm.

    The Store Kit API is accessible through the “InAppStore” singleton (will always be available from gdscript). It is initialized automatically. It has three methods for purchasing:

    • Error purchase(Variant p_params);
    • Error request_product_info(Variant p_params);
    • Error restore_purchases();

    and the pending_event interface

    1. int get_pending_event_count();
    2. Variant pop_pending_event();

    Purchases a product id through the Store Kit API.

    Parameters

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

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

    Response event

    The response event will be a dictionary with the following fields:

    On error:

    1. {
    2. "type": "purchase",
    3. "result": "error",
    4. "product_id": "the product id requested"

    On success:

    1. {
    2. "type": "purchase",
    3. "result": "ok",
    4. "product_id": "the product id requested"
    5. }

    request_product_info

    Requests the product info on a list of product IDs.

    Parameters

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

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

    Response event

    The response event will be a dictionary with the following fields:

    1. {
    2. "type": "product_info",
    3. "result": "ok",
    4. "invalid_ids": [ list of requested ids that were invalid ],
    5. "ids": [ list of ids that were valid ],
    6. "titles": [ list of valid product titles (corresponds with list of valid ids) ],
    7. "descriptions": [ list of valid product descriptions ] ,
    8. "prices": [ list of valid product prices ],
    9. "localized_prices": [ list of valid product localized prices ],
    10. }

    restore_purchases

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

    Response event

    The response events will be dictionaries with the following fields:

    The Game Center API is available through the “GameCenter” singleton. It has 9 methods:

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

    plus the standard pending event interface.

    Authenticates a user in Game Center.

    Response event

    The response event will be a dictionary with the following fields:

    On error:

    1. {
    2. "type": "authentication",
    3. "result": "error",
    4. "error_code": the value from NSError::code,
    5. "error_description": the value from NSError::localizedDescription,
    6. }

    On success:

    1. {
    2. "type": "authentication",
    3. "result": "ok",
    4. "player_id": the value from GKLocalPlayer::playerID,
    5. }

    post_score

    Posts a score to a Game Center leaderboard.

    Parameters

    Takes a Dictionary as a parameter, with two fields:

    • score a float number
    • category a string with the category name

    Example:

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

    Response event

    The response event will be a dictionary with the following fields:

    On error:

    1. {
    2. "type": "post_score",
    3. "result": "error",
    4. "error_code": the value from NSError::code,
    5. "error_description": the value from NSError::localizedDescription,
    6. }

    On success:

    1. {
    2. "type": "post_score",
    3. "result": "ok",
    4. }

    award_achievement

    Modifies the progress of a Game Center achievement.

    Parameters

    Takes a Dictionary as a parameter, with 3 fields:

    • name (string) the achievement name
    • progress (float) the achievement progress from 0.0 to 100.0 (passed to GKAchievement::percentComplete)
    • show_completion_banner (bool) whether Game Center should display an achievement banner at the top of the screen

    Example:

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

    Response event

    The response event will be a dictionary with the following fields:

    On error:

    1. {
    2. "type": "award_achievement",
    3. "result": "error",
    4. "error_code": the error code taken from NSError::code,

    Clears all Game Center achievements. The function takes no parameters.

    Response event

    The response event will be a dictionary with the following fields:

    On error:

    1. {
    2. "type": "reset_achievements",
    3. "result": "error",
    4. "error_code": the value from NSError::code
    5. }

    On success:

    1. {
    2. "result": "ok",
    3. }

    request_achievements

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

    Response event

    The response event will be a dictionary with the following fields:

    On error:

    1. {
    2. "type": "achievements",
    3. "result": "error",
    4. "error_code": the value from NSError::code
    5. }

    On success:

    1. {
    2. "type": "achievements",
    3. "result": "ok",
    4. "names": [ list of the name of each achievement ],
    5. "progress": [ list of the progress made on each achievement ]
    6. }

    request_achievement_descriptions

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

    Response event

    The response event will be a dictionary with the following fields:

    On error:

    1. {
    2. "type": "achievement_descriptions",
    3. "result": "error",
    4. "error_code": the value from NSError::code
    5. }

    On success:

    1. {
    2. "type": "achievement_descriptions",
    3. "result": "ok",
    4. "names": [ list of the name of each achievement ],
    5. "titles": [ list of the title of each achievement ]
    6. "unachieved_descriptions": [ list of the description of each achievement when it is unachieved ]
    7. "achieved_descriptions": [ list of the description of each achievement when it is achieved ]
    8. "maximum_points": [ list of the points earned by completing each achievement ]
    9. "hidden": [ list of booleans indicating whether each achievement is initially visible ]
    10. "replayable": [ list of booleans indicating whether each achievement can be earned more than once ]
    11. }

    Displays the built in Game Center overlay showing leaderboards, achievements, and challenges.

    Parameters

    Takes a Dictionary as a parameter, with two fields:

    • 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.

    Examples:

    1. var result = show_game_center( { "view": "leaderboards", "leaderboard_name": "best_time_leaderboard" } )
    2. var result = show_game_center( { "view": "achievements" } )

    Response event

    The response event will be a dictionary with the following fields:

    On close:

    1. var GameCenter = null # define it as a class member
    2. func post_score(p_score):
    3. if GameCenter == null:
    4. return
    5. GameCenter.post_score( { "value": p_score, "category": "my_leaderboard" } )
    6. func check_events():
    7. while GameCenter.get_pending_event_count() > 0:
    8. # do something with events here
    9. pass
    10. func _ready():
    11. # check if the singleton exists
    12. if Globals.has_singleton("GameCenter"):
    13. # connect your timer here to the "check_events" function