アイリッジ開発者ブログ

アイリッジに所属するエンジニアが技術情報を発信していきます。

SDK を利用して色々なアプリを作成できるようにしてみる

こんにちは、プロダクト開発グループ SDK チームの山田です。

弊社では APPBOX SDK を利用してパッケージアプリというものを作成しております。

パッケージアプリとは、アプリとしては比較的シンプルなものとなりますが APPBOX SDK の機能を活用し、安価且つ短い期間でアプリのリリースができるものとなっております。

今回は、このアプリを作成する際にどういった SDK の機能を利用し、どういった構成になっているかといったところを簡単に紹介できればと思います。

参考:APPBOX パッケージ

※今回は Android 版アプリの話となります


アプリの構成について

まずは、作成するアプリがどういったものか、紹介できればと思います。

①アプリ初回起動時

チュートリアルを開始し、その後にユーザーの情報設定を行います。


②ホーム画面

ユーザー情報設定完了後や、通常起動時に遷移する画面となります。ここでは位置情報の権限許諾なども行っています。

また、ホーム画面ではタブの切り替えによってクーポンの利用や左上のメニューを押下することで、各種設定などを行えます。


このようなアプリとなっていますが、実はこれらのほとんどは SDK 機能の呼び出しのみで構成されています。

APPBOX SDK は機能を付属した画面も提供しているため、基本的にはこのアプリではホーム画面のタブやメニューのみを用意し、あとは SDK 提供の画面を利用しているといった構成となっています。

※チュートリアルやクーポンの内容、ホームタブ内の画面の構成などは APPBOX 管理画面よりいつでも変更可能です

そして、このアプリについては SDK の設定や呼び出す画面、呼び出す機能などを設定するファイルがあり、アプリとしてはその設定を読み込んでアプリの全体を構成するといった作りとなっています。

設定内容については、主にフッタータブの数や表示する画面、ドロワーメニュー内の項目やそこから呼び出す機能、位置情報やプッシュ通知の利用などといったものが設定可能です。

このアプリですと、おおまかとなりますが下記のような設定内容となっています。

プッシュ通知利用:あり(SDK 機能)
位置情報利用:あり(SDK 機能)
ユーザー情報利用:あり(SDK 機能)

フッタータブ数 : 2
フッタータブ 1 (ホーム) -> フリーレイアウト画面呼び出し(SDK 機能)
フッタータブ 2 (クーポン) -> クーポン画面呼び出し(SDK 機能)
ドロワーメニュー 1(店舗検索) -> 店舗検索画面呼び出し (SDK 機能)
ドロワーメニュー 2(ユーザー情報) -> ユーザー情報呼び出し(SDK 機能)
ドロワーメニュー 3(利用規約) -> 内部 WebView へ遷移(SDK 機能)
ドロワーメニュー 4(よくある質問) -> 内部 WebView へ遷移(SDK 機能)
ドロワーメニュー 5(お問い合わせ) -> 外部ブラウザへ連携

これらの設定をどう反映しているかについて、続けて紹介できればと思います。


SDK の設定について

APPBOX SDK には様々な設定があり、それらをビルドごとに設定できるようになっています。

参考:SDK 設定値

SDK の設定については下記のような各種設定用の config.gradle をアプリ毎に作成し、ビルド時に読み込みを行うようにしています。

config.gradle

ext {
      appboxBuildConfig = [
          appId                      : 'jp.iridge.appbox.sample',
          appName                    : 'サンプルアプリ',
          appboxAppId                : '"契約時に発行されるアプリ専用ID"',
          appboxTenantId             : '"契約時に発行されるテナントID"',
          versionCode                : 1,
          versionName                : '1.0.0',
          storePass                  : 'package_key_pass',
          keyAlias                   : 'package_key_alias',
          keyPass                    : 'package_key_alias_pass',
          appboxUseSegment           : 'true', 
          appboxUseLocationGps       : true, // 位置情報を利用するかどうか。利用する:true 利用しない:false
          appboxUseLocationBeacon    : true, // iビーコンによる位置情報を利用するかどうか。利用する:true 利用しない:false
          appboxUseLocationWiFi      : true  // Wi-Fiによる位置情報を利用するかどうか。利用する:true 利用しない:false
     ]
}

アプリ側の gradle では上記の設定を AndroidManifest.xml やソースコードへ反映をするようにしています。

app/build.gradle

apply from: 'config.gradle'
・
・
・
def locationSourceString = getLocationSources()
defaultConfig {
      minSdkVersion 24
    targetSdkVersion 35
    applicationId appboxBuildConfig.appId
    versionCode appboxBuildConfig.versionCode
    versionName appboxBuildConfig.versionName

        manifestPlaceholders.appName = appboxBuildConfig.appName
        manifestPlaceholders.useSegment = appboxBuildConfig.appboxUseSegment
        manifestPlaceholders.locationSources = locationSourceString
    buildConfigField "String", "APPBOX_TENANT_ID", appboxBuildConfig.appboxTenantId
    buildConfigField "String", "APPBOX_APP_ID", appboxBuildConfig.appboxAppId
}
・
・
・
// config 設定を読み取り、SDK 設定用の文字列に変換
def getLocationSources() {
    def locationSourceArray = []
    if (appboxBuildConfig.appboxUseLocationGps) {
        locationSourceArray += "GPS"
    }
    if (appboxBuildConfig.appboxUseLocationWiFi) {
        locationSourceArray += "Wi-Fi"
    }
    if (appboxBuildConfig.appboxUseLocationBeacon) {
        locationSourceArray += "iBeacon"
    }
    return locationSourceArray.join(",")
}

applicationId などは厳密には SDK の設定じゃないのですが build.gradle に設定する情報といったところで一括で指定できるようにしています

app/AndroidManifest.xml

<meta-data
      android:name="APPBOX_LOCATION_SOURCES"
      android:value="${locationSources}" />
<meta-data
      android:name="APPBOX_USES_SEGMENT_SETTINGS"
      android:value="${useSegment}"/>
・
・
・

また、位置情報を利用する場合は権限の有無なども必要になってきます。

こちらについては別途ビルド時に実行するシェルで今回のアプリに必要な権限を config.gradle から読み取り、権限を宣言をした AndroidManifest.xml を出力してビルド実行時の自動マージに任せるという動作をさせています。


アプリの設定について

アプリの設定については下記のような設定ファイルをアプリ毎に作成し、フッターメニューの指定に利用しています。

config.xml

<resources>
    <string-array name="footer_tab_destinations">
        <item>appbox://freelayout/home</item>
        <item>appbox://coupons</item>
    </string-array>

    <array name="footer_tab_icons">
        <item>@drawable/selector_ic_footer_tab_1</item>
        <item>@drawable/selector_ic_footer_tab_2</item>
    </array>
</resources>

この xml をアプリ内でリソースとして読み込み、フッタータブの個数や SDK の機能呼び出しを指定できるようにしています。

xml の内容となりますが、footer_tab_destinations で各フッタータブの動作を指定しています。

具体的には appbox://freelayout で APPBOX のフリーレイアウト機能の呼び出し、 appbox://coupons で APPBOX のクーポン機能の呼び出しを行うような作りになっています。

footer_tab_icons についてはそのままとなるのですが、各フッタータブに指定するアイコンのリソースの指定となっています。

アイコンについては別途アプリごとに必要なアイコンを用意し、指定のフォルダに配置しています。


ビルドについて

紹介しました各設定ファイル・アイコンなどの必要な情報を下記のようにアプリごとにフォルダを配置して、ビルド用のシェルを実行するだけでアプリが作成できるようになっています。

ビルド用のシェルについては、ビルド用ソースの取得や各アイコンのコピーなどをしているのですが、こちらの詳細を紹介すると少し長くなりそうなので今回は割愛させていただきます。


おわりに

APPBOX SDK という特性を活かしたパッケージという、設定ファイルに必要な情報を追加するだけで色々なアプリを作成できるようにしたものの紹介となりました。

今回については Android の紹介となりますが、iOS でも似たビルド方法を取っており、Android と同様に設定ファイルに必要な情報を追加するのみでアプリが作成できる仕組みとなっています。

現状、OS 間で設定ファイルの構成がそれぞれ専用のものとなってしまっているのですが、両 OS 共通のファイルにすることも可能かと思うので、いつかそれらも合わせてさらに簡略化していきたいですね。