Skip to content

7 アプリ内メッセージ利用方法

アプリ内メッセージはカスタムイベントの付与をトリガーに、ポップアップなどのメッセージを表示させることができる機能です。

アプリ内メッセージ利用手順

  1. FANSHIP SDK ver6.1.0 以上を導入します
  2. アプリ上の任意の箇所で「カスタムイベントの付与」を行います
  3. 配信管理画面より、付与を行ったカスタムイベントを起動トリガーとしてアプリ内メッセージを作成します
  4. アプリを操作し、対象のカスタムイベントが付与される挙動を行うことでアプリ内メッセージが表示されます

※「コールバッククラス」を利用することで、アプリ内メッセージのボタン押下時の挙動なども制御できます

Warning

アプリ内メッセージは表示をする際に通信を行うという仕様上、通信状況などによって表示が遅れたり、表示に失敗することがあります。
「メッセージが表示されていないとアプリが動かない」等の実装は行わないでください。


7.1 カスタムイベントの付与

カスタムイベントは、アプリ上でのユーザーの挙動などを「イベント」として記録する機能です。
「カスタムイベント(独自イベント)の実装」を参考に、アプリに組み込んでください。
※アプリ内メッセージの実装に必須となります

実装するイベントにつきましては「推奨イベント」をご参考ください。

アプリでカスタムイベントの付与を行うサンプル

「推奨イベント」app.topapp.firstapp.update を付与する際のサンプルとなります。
※アプリの状態を保存するため、SharedPreferences を使用しております。
※アプリの設計に合わせて、onCreateonRasume などでカスタムイベントの付与を行ってください。

// アプリのトップ画面 Activity
public class MyActivity extends AppCompatActivity {

    ・・・

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ・・・

        // 保存している初回フラグとアプリバージョンを取得
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
        boolean isFirst = prefs.getBoolean("APP.FIRST", true);
        int versionCode = prefs.getInt("APP.VERSION", 0);

        if (isFirst) {
            // チュートリアル突破後に初めてトップ画面を開いた場合
            Popinfo.trackEvent(this, "app.first", null); 

            // 初回フラグを false に変更し、現在のバージョンを保存
            SharedPreferences.Editor editor = prefs.edit();
            editor.putBoolean("APP.FIRST", false);
            editor.putInt("APP.VERSION", BuildConfig.VERSION_CODE);
            editor.apply();

        } else if (BuildConfig.VERSION_CODE > versionCode) {
            // アプリをアップデート後にトップ画面を開いた場合
            Popinfo.trackEvent(getApplicationContext(), "app.update", null);

            // 現在のバージョンを保存
            SharedPreferences.Editor editor = prefs.edit();
            editor.putInt("APP.VERSION", BuildConfig.VERSION_CODE);
            editor.apply();
        } else {
            // 通常時、トップ画面を開いた場合
            Popinfo.trackEvent(this, "app.top", null); 
        }
    }

    ・・・
}

Warning

Popinfo.start() と同タイミングでイベントを付与する場合、初回起動時の許諾ダイアログとアプリ内メッセージが両方表示されてしまわないようご注意ください。


7.2 アプリ内メッセージのコールバック

コールバッククラスを利用することでアプリ内メッセージの処理をアプリ側で受け取ることができます。
コールバッククラスを利用するには同梱の PopinfoCallback.java をアプリプロジェクトの任意の名前(ここでは MyPopinfoCallback とします)で任意のパッケージに配置し、AndroidManifest.xml に設定します。
(詳細は「6.3 AndroidManifest.xmlの修正」より<meta-data 一覧>をご確認ください。)

<meta-data
    android:name="POPINFO_CALLBACK_CLASS"
    android:value="パッケージ名.MyPopinfoCallback" />


画面遷移のサンプル

アプリ内メッセージのボタンが押された際に受け取った URL から画面を遷移するサンプルです。
追加した MyPopinfoCallback へ追記してください。
※アプリ独自の遷移を行う際は事前にカスタムURIスキームの設定が必要となります。

[MyPopinfoCallback.java]

public void onInappMessageTapAction(Context context, String url) {
    Uri uri = Uri.parse(url);
    Intent intent = new Intent(Intent.ACTION_VIEW, uri);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);
}


独自判断のサンプル

アプリ側で独自の要素を含むユーザーに対し、アプリ内メッセージを表示させないようにするというサンプルです。
このアプリ内メッセージは作成する際にカテゴリを指定しております。

[MyPopinfoCallback.java]

// 同時に複数のアプリ内メッセージの条件と一致する可能性があるため、categoryList となっております。
// この判定後にサーバーへ問い合わせを行い、複数一致していた場合は作成時に指定した優先度から表示するメッセージを決定します(同じ優先度の場合は新しく作成されたメッセージ)
public boolean onEventActionTrigger(Context context, String event, List<String> categoryList) {
    // アプリで独自に保存している要素を取得 
    // ※サンプルのため、仮の文字列を入れております
    String originalCategory = "xxxxxxx";
    for (String category : categoryList) {
        if (original.equals(category)) {
            return false;
        } 
    }
    return true;
}


メッセージ校閲のサンプル

アプリ内メッセージを表示する直前に、メッセージ内容の校閲を行うサンプルです。
このサンプルではアプリ内メッセージに{$user}という内容を指定し、アプリ側で置換をする処理を行っております。

[MyPopinfoCallback.java]

public String onInappMessageUpdate(Context context, String htmlString, String event, String category) {
        // アプリで実際に表示をさせる要素を取得
        // ※サンプルのため、仮の文字列を入れております
        String name = "xxxxxxx";
        return htmlString.replace("{$user}", name);
    }


7.3 デバッグモードについて

AndroidManifest.xml の meta-data に POPINFO_EVENTACTION_DEBUG を追加することで、イベントトラッキングが付与された際にキー名を Toast で画面上に表示します。
(詳細は「6.3 AndroidManifest.xmlの修正」より<meta-data 一覧>をご確認ください。)

<meta-data
    android:name="POPINFO_EVENTACTION_DEBUG"
    android:value="true" />

・Toast 表示形式

<キー名> matched. (現在の1日の表示回数,1日の最大表示回数)(トータル表示回数、トータル最大表示回数)

app.top がマッチした際の例として、下記のように表示され、- は無制限を表します。

<app.top> matched. (1,5)(1,-)


7.4 推奨イベント

アプリでイベントをつける際、推奨するイベントの一覧となります。
※パラメータについては推奨ではありますが必須ではありません

アプリ共通イベント

イベントタイミング イベント名 パラメータ 備考
チュートリアル開始時 app.tutorial_begin
チュートリアル終了時 app.tutorial_complete
チュートリアル突破後、トップ画面に到達 app.first トップ画面でユーザーの任意操作が可能になったとき。初回起動判定はアプリ側で行う必要がある
アプリ更新後にトップ画面を開いたとき app.update トップ画面でユーザーの任意操作が可能になったとき。アプリ更新判定はアプリ側で行う必要がある
アプリのトップ画面を開いたとき app.top トップ画面でユーザーの任意操作を可能になったとき。初回時、更新時と重ならないよう注意
ログインしたとき app.login ログインが完了したあと
会員登録が完了したとき app.sign_up 会員登録が完了したあと
マイページを開いたとき app.mypage ユーザー専用のページがある場合
お気に入り登録をしたとき app.favorite お気に入り登録が完了したあと
アプリのお知らせページを開いたとき app.news news_id 任意のお知らせを確認した場合(プッシュ通知とは別)
お問い合わせページを開いたとき app.generate_lead

ショッピング系アプリ

イベントタイミング イベント名 パラメータ 備考
支払い情報を追加したとき shop.add_payment_info
商品の詳細を確認したとき shop.detail item_category, item_name, item_id
商品をカートに入れたとき shop.add_to_cart quantity, item_category, item_name, item_id, item_location_id, value, price, currency
商品の購入手続きを開始時 shop.begin_checkout coupon, currency, value
商品の購入手続きが完了時 shop.ecommerce_purchase coupon,currency,value, tax,shipping, transaction_id
商品の購入をキャンセルとき shop.purchase_cancel item_id, quantity, item_name, price
払い戻しが行われたとき shop.purchase_refund quantity, value, currency, transaction_id
商品の検索結果を表示したとき shop.view_search_results search_term
クーポンのページを開いたとき shop.coupon_view coupon_id
クーポンを利用した時 shop.coupon_use coupon_id

鉄道系アプリ

イベントタイミング イベント名 パラメータ 備考
運行状況を確認したとき train.info train_line
乗り換え案内を開いたとき train.transfer_guide boarding_station, getting_off_station
時刻表を確認したとき train.timetable train_line
路線図を確認したとき train.route_map train_line
駅構内図を確認したとき train.station_map station
マイ駅設定を追加したとき train.add_station station

推奨イベント付与のサンプル

パラメータが複数のイベントを付与する際は下記のサンプルのように追加してください。
商品をカートに入れたときのイベントのサンプルとなります。

List<PopinfoEventItem> values = new ArrayList<PopinfoEventItem>();
values.add(new PopinfoEventItem("quantity", "1"));
values.add(new PopinfoEventItem("item_category", "category"));
values.add(new PopinfoEventItem("item_name", "name"));
values.add(new PopinfoEventItem("item_id", "1"));
values.add(new PopinfoEventItem("item_location_id", "1"));
values.add(new PopinfoEventItem("value", "1"));
values.add(new PopinfoEventItem("price", "500"));
values.add(new PopinfoEventItem("currency", "jpy"));

Popinfo.trackEvent(this, "shop.add_to_cart", values);