2020-10-01に更新

GodotのiOS用のモジュールを作った

GodotでiOS用のモジュールを作りました。作ったのはSKStoreReviewControllerのrequestReviewを呼んでユーザーにレビューをしてもらうポップアップを出すだけのモジュールです。

作り方

作り方としては、元々iOS用のモジュールとして、AdMobのモジュールがしっかり動いているのは知っていたので、それを参考にしました。

kloder-games/godot-admob: Module Admob for Godot engine

このリポジトリのGodotのモジュールフォルダにコピーするフォルダがあるのですが、それをコピーして改造していきました。

ちなみに完成品はこちらです。動けばOKという感じでやっているので中身の理解はしていません。

dala00/godot-store-review: Godot store review module for iOS.

libフォルダは今回は不要ですので使っていません。外部ライブラリを使う場合は参考にすると良いと思います。

最低限必要なファイル

今回利用した最低限必要なファイルは下記です。

  • SCsub
  • config.py
  • register_types.cpp
  • register_types.h
  • ios/src/godotAdmob.h
  • ios/src/godotAdmob.mm

これらのファイル名や中身のadmobという名称部分を、独自のものに置き換えていきます。

対応する内容

不要なプロパティやメソッドを削っていきます。今回はrequestReviewを呼ぶメソッドだけがあればいいので、下記のメソッドを作って後は削除しました。

void GodotStoreReview::requestReview() {
    NSLog(@"Calling requestReview");

    if (instance != this) {
        NSLog(@"GodotStoreReview Module dublicate singleton");
        return;
    }

    if (@available(iOS 10.3, *)) {
        if ([SKStoreReviewController class]) {
            [SKStoreReviewController requestReview];
        } else {
            NSLog(@"SKStoreReviewController not found");
        }
    } else {
        NSLog(@"SKStoreReviewController not found for this version");
    }
}

バージョンの判定をしているのでごちゃごちゃしていますが、基本的にはinstanceの有無をチェックした後はシンプルに処理を書くだけで大丈夫です。

あとは_bind_methodsの中身も書き換え、作ったメソッドをGodotと連携させるための宣言をしておきます。

void GodotStoreReview::_bind_methods() {
    CLASS_DB::bind_method("requestReview", &GodotStoreReview::requestReview);
}

基本的には以上です。あとはGodotをビルドして実際に試すだけです。Godot側では下記のような感じで実行できるようになります。

if Engine.has_singleton("StoreReview"):
    _store_review = Engine.get_singleton("StoreReview")
    _store_review.requestReview()

補足

今回はやっていませんが、コールバックもできます。AdMobモジュールでも実装されていますので、必要な方は参考にできます。

逆に今回と同様のシンプルなモジュールを作りたい方は今回僕が作ったものを参考にしていただくと簡単そうです。

ツイッターでシェア
みんなに共有、忘れないようにメモ

だら@Crieit開発者

Crieitの開発者です。 Webエンジニアです(在宅)。大体10年ちょい。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel, React, Flutter, Vue.js, Node, RoR 趣味:Elixir, Phoenix, Nuxt, Express, GCP, AWS等色々 PHPフレームワークちいたんの作者

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント