Skip to main content

Games

In version 1.22.0 we added the ability to open games not from stories. The InAppStory.shared.openGame(...) and InAppStory.shared.closeGame() methods were added for this functionality, as well as a closure to track game completion InAppStory.shared.gameComplete.

  • openGame(with game:<Game>, complete: ((_ opened: Bool) -> Void)? = nil) - open game with Game object and closure indicating if game screen was opened;
  • closeGame() - closing the game screen;
  • gameComplete: ((_ data: <String>, _ result: <Dictionary<String, Any>?>, _ url: <String?>) -> Void) - the closure is called when the game is over;
    • data - data from the game, set in the console;
    • result - the results of the game session;
    • url - link for the transition (for example, deepLink, set in the console);
Please note

As of version 1.27.x closure gameComplete is deprecated.

ViewController.swift​

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()
/// Do any additional setup after loading the view.
}

override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)

/// closure is called when the game screen is closed
/// can be called when the game is terminated, closed by the user or developer
/// deprecated from 1.27.0
InAppStory.shared.gameComplete = { data, results, url in
/// do something with the data from game
}
}

@IBAction func showGame(sender: UIButton) {
InAppStory.shared.openGame(with: Game(id: "1"), from: self) { opened in
/// the closure is called after processing the possibility of launching the game
/// if all went well and the game opened on the screen, `opened = true`
/// otherwise,` opened = false` (e.g. failed to load the archive with the game)
}
}
}

Input fields​

Since SDK 1.29.9 (4370), games support text, email, and telephone input fields through the SDK input dialog. No additional initialization is required when using the standard interface.

To supply your own interface, set InAppStory.shared.inputPresenter to an implementation of InputPresenter; see input fields and the presenter contract. The default is nil, which uses the standard SDK dialog. Existing games without input requests keep their behavior from before the update.

The game continues running while the input interface is open; opening input does not automatically pause it. Closing the game dismisses its input interface.

Preload games​

In version 1.24.0, the game preloading feature was introduced.

Automatic Preloading​

To enable automatic game preloading, follow these steps:

  1. In the game settings console, check the "Preload the game on users' devices, if possible" option for the games you want to preload. This will inform the server which games need to be preloaded.
  2. In the application, open a session by invoking any InAppStorySDK method that initiates a session, such as creating a story feed, displaying single stories, or onboarding stories.

Manual Preloading​

To enable manual game preloading, follow these steps:

  1. Mark the desired games for preloading in the console.
  2. In the application, specify the key and settings for InAppStory.
  3. Invoke the preloading method to start the process.

These steps will ensure the correct setup and execution of game preloading in your application.

func preloadGames() {
InAppStory.shared.initWith(serviceKey: <api-key>,
settings: Settings(userID: <userID>, tags: <tags array>))
InAppStory.shared.preloadGames()
}

Animations game loading​

Starting from version 1.24.0, you can display Lottie animations during game loading instead of the standard ActivityIndicator with percentages. You can read more about working with Lottie animations here.

Game Object​

Game object with an id.

Parameters​

  • id - game id obtained from the console <String?>;

Events​

To receive events from games, you must subscribe to trigger closure:

InAppStory.shared.gameEvent: ((_ event: IASEvent.Game) -> Void)

More information and event descriptions can be found here