8 よくあるカスタマイズ方法
FANSHIP SDK各画面のカスタマイズ
Warning
画面クラスの修正は、popinfo-sdkプロジェクト内の画面クラスファイルを直接修正や継承しないで使用してください。
アプリケーションモジュール内にpopinfo-sdkよりコピーし(クラス名変更可能)編集することを推奨しております。
これは、popinfo-sdkプロジェクトを直接修正すると、SDKをアップデートする際に画面クラスをアップデートすることが難しくなってしまうためです。 また、各画面クラスで継承している”PopinfoBase~”クラスは、変更せずにご使用いただくことを推奨しております。
1) 各画面クラスを修正し、独自の画面を作成する場合は、popinfo-sdk/src/配下のパッケージ内にある各種画面クラスとそれに対応するレイアウトファイルをアプリプロジェクトにコピーしていただき、独自処理を実装してください。
※ 各画面に対応するファイルは 「4.ファイル構成」 を参考にしてください。
2) 作成した独自画面クラスへの遷移制御は popinfo-sdk/res/values/popinfo_values.xml で行います。アプリモジュールの res/values にコピーして変更してください。
以下、独自のお知らせ一覧画面を作成した場合の遷移先記述例になります。
※ コピーしたpopinfo_values.xmlの以下の部分を変更します。パッケージ名を含めたクラス名で記述してください。
<!-- お知らせ一覧画面 -->
<string name="popinfo_class_list">パッケージ名含めた遷移先クラス名</string>
3) AndroidManifest.xmlに追加したActivityクラスを設定します。
※各メソッドの詳細につきましては、同梱のpopinfo_javadoc をご確認ください。
PopinfoCallbackクラスの使用方法
PopinfoCallbackクラスを使用して、FANSHIP SDKの様々な処理のコールバックを受け取ることができます。
※ コールバックタイミングは javadocの各種メソッド説明 や ログを実装 して確認してください。
下記は、PUSH通知が受信可能になったタイミングのコールバックを受け取るための実装例になります。
1) 同梱のPopinfoCallback.javaファイルを任意のファイル、クラス名でコピーします。(ここでは、src/main/java/jp/iridge/myapp/popinfo/MyPopinfoCallback.javaへコピーしたものとします)
2) AndroidManifest.xmlのmeta-data POPINFO_CALLBACK_CLASSに 1) でコピーしたMyPopinfoCallbackクラスを設定します。
<meta-data
android:name="POPINFO_CALLBACK_CLASS"
android:value="jp.iridge.myapp.popinfo.MyPopinfoCallback" />
3) PUSH通知が受信可能時のコールバック onTokenRegistered()内で任意の処理を実装します。
/**
* FCMトークン (またはRegistrationID) とpopinfoIDの紐付け完了(PUSH通知受信可能)時にコールバックされます。
*
* @param context コンテキスト
* @param popinfoId push受信可能になったpopinfo ID
*/
public void onTokenRegistered(Context context, String popinfoId) {
// 任意の処理を実装してください
}
ユーザー属性設定画面の表示
属性配信をご利用になる場合で、任意のタイミングでユーザー自身が属性を設定する画面を呼び出す場合は、次のメソッドを呼び出します。
// 表示できた場合はtrue、ユーザー登録未完了などで表示できなかった場合はfalseを返します。
boolean ret = PopinfoUiUtils.showSegmentSettings(this); // this はContext
ユーザー属性の変更
属性配信をご利用になる場合で、ソースコードから直接ユーザー属性を変更する場合は、次のメソッドを呼び出します。
使用可能なカテゴリID、属性ID につきましては、配信管理画面からご確認ください。
また、このメソッドは内部で同期通信を行います。メインスレッドをブロックしますので、バックグラウンドで呼び出す等、適宜ご配慮ください。
// 成功時はtrue、失敗時はfalseを返します。またthisはContextになります。
// 1つの属性を設定します。
boolean ret = PopinfoUtils.setSegments(this, "カテゴリID", new String[] {"属性ID"});
// 複数の属性を一括設定します。
boolean ret = PopinfoUtils.setSegments(this, "カテゴリID", new String[] {"属性ID", "属性ID", ...});
// 属性を解除します。
boolean ret = PopinfoUtils.setSegments(this, "カテゴリID", new String[] {});
ユーザー属性の取得
属性配信をご利用になる場合で、ソースコードから設定されているユーザー属性の値や情報を取得する場合は次のメソッドを呼び出します。
// this はContextになります。
// ユーザーが設定したユーザー属性の値や情報を取得します。
ArrayList<HashMap<String, String>> PopinfoUtils.getSegments(this);
// 利用中でないユーザー属性の情報も含めて取得します。
ArrayList<HashMap<String, String>> PopinfoUtils.getSegmentsAll(this);
/*
※取得したMap値は以下を参考にご使用ください。
key_id – カテゴリID
key_name - カテゴリ名
value_id – 属性ID
value_name – 属性名
is_default – 属性のデフォルト値
is_set – 属性を利用中かどうか
is_multiple - 複数選択をできる属性かどうか
*/
カスタムイベント(独自イベント)の実装
カスタムイベント(独自イベント)は、アプリ上でのユーザーの挙動などを「イベント」(key値とvalue値)という形で記録し、FANSHIP サーバーに送信して蓄積することができる仕組みです。
カスタムイベントを使用する場合は、次のメソッドを適宜必要な箇所で呼び出してください。
※記録されたイベントは1時間周期でサーバー側へ送信されます。電波の悪い場所等で送信に失敗した場合は、削除されず、次の送信タイミングで同時に送信されます。
※端末が省電力状態などの場合、周期がずれる可能性があります
// カスタムイベントのkey名とそれに対応するvalue 値を指定します。
// カスタムイベントvalue値は、name**(必須)**とvalue(null の場合は空("")扱い)のセットで構成されます。
// カスタムイベントvalue値は、複数の組み合わせて使用できます。
// カスタムイベントvalue値がnullの場合、空("")と扱われます。
List<PopinfoEventItem> values = new ArrayList<PopinfoEventItem>();
values.add(new PopinfoEventItem("testName1", "testVal1"));
values.add(new PopinfoEventItem("testName2", "testVal2"));
Popinfo.trackEvent(this, "キー名", values); // this はContext、values がnull なら空("")として扱われます
※各メソッドの詳細につきましては、同梱のpopinfo_javadoc をご確認ください。
Note
配信管理画面より付与を行ったカスタムイベントのレポートを確認することができます。
アプリ内メッセージでも利用するので合わせてご活用ください。
配信タイプ「Push通知のみ」配信を使用時の処理を行う方法
1) AndroidManifest.xmlのmeta-dataで下記設定の設定値を true に変更します。
<!-- 配信タイプ「Push通知のみ」の配信を行う場合は true に設定してください。。-->
<meta-data
android:name="POPINFO_USES_PUSH_ONLY"
android:value="true" />
2) 同梱の PopinfoCallback.java ファイルをアプリモジュール側の任意の場所に任意の名前でコピーし、AndroidManifest.xmlのmeta-dataでPopinfoCallbackクラスを設定します。(ここでは MyPopinfoCallback として パッケージ/popinfo配下にコピーしたとします)
<meta-data
android:name="POPINFO_CALLBACK_CLASS"
android:value="パッケージ.popinfo.MyPopinfoCallback" />
3) FANSHIP SDKライブラリモジュール側のsrc配下にある PopinfoPopup.java を アプリモジュール側の任意の場所に任意の名前でコピーします。(ここでは MyPopinfoPopup として、パッケージ/popinfo配下にコピーしたとします)
4) コピーしたMyPopinfoPopupクラスをAndroidManifest.xmlに追加します。
<activity
android:name="パッケージ.popinfo.MyPopinfoPopup"
android:screenOrientation="behind"
android:exported="false"
android:launchMode="singleInstance"
android:excludeFromRecents="true"
android:theme="@android:style/Theme.Dialog"
/>
5) FANSHIP SDKライブラリモジュール側のres配下のvalues配下にある values/popinfo_values.xml を アプリモジュール側の同フォルダにコピーし、下記項目を手順2)でコピーしたクラスに変更します。
<!-- お知らせポップアップ -->
<string name="popinfo_class_popup">パッケージ.popinfo.MyPopinfoPopup</string>
6) 手順3)でコピーしたMyPopinfoPopupクラスにポップアップ通知の表示ボタンを押した時の処理を下記を参考に実装します。
※ 「実装:」部分の処理に関しましてはアプリの仕様に合わせて実装してください。
MyPopinfoPopup.java L.112~
// 表示ボタン
Button btnShow = (Button) findViewById(jp.iridge.popinfo.sdk.R.id.show);
btnShow.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// popinfoのPush通知のpayloadを取得します
Intent payload = getPopinfoPayload();
// 「Push通知のみ」配信かどうかの値をpayloadより取得します
// "has_detail"キーの値で配信タイプを判定できます(true: Push通知のみ配信以外 false: Push通知のみ配信)
boolean hasDetail = Boolean.valueOf(payload.getStringExtra("has_detail"));
// 「Push通知のみ」配信時に設定できる「"URLを開く"から遷移するURL」項目です
String linkUrl = payload.getStringExtra("link_url");
// 「Push通知のみ」配信以外の場合
if (hasDetail) {
// お知らせ詳細画面へ遷移します
PopinfoUiUtils.showMessageView(PopinfoPopup.this, messageId);
// 「Push通知のみ」配信の場合
} else {
// 「Push通知のみ」配信時に限り、開封イベントを記録させます(配信管理画面の開封率に影響します)
trackEventPushOpen();
// 通知バーの通知を削除します
PopinfoUiUtils.clearNotification(PopinfoPopup.this, messageId);
// 配信時にURLを設定している場合
if (!TextUtils.isEmpty(linkUrl)) {
/**************** 実装:配信時に設定されたURLを暗黙的インテントで起動します。必要に応じて処理は変更してください。 ****************/
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(linkUrl));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
// 配信時にURLを設定していない場合
} else {
/**************** 実装:URLを設定されていない場合の処理をアプリの仕様に合わせて処理を実装してください。 ****************/
}
}
// 終了
finish();
}
});
7) 手順2)でコピーしたMyPopinfoCallbackクラスでNotification(通知エリアの通知)タップ時の処理を下記を参考に実装します。
※ 「実装:」部分の処理に関しましてはアプリの仕様に合わせて実装してください。
MyPopinfoCallback.java L81~
public boolean onInfoTapAction(Context context, long id, String src, Intent payload) {
// 「Push通知のみ」配信かどうかの値をpayloadより取得します
// "has_detail"キーの値で配信タイプを判定できます(true: Push通知のみ配信以外 false: Push通知のみ配信)
boolean hasDetail = Boolean.valueOf(payload.getStringExtra("has_detail"));
// "link_url"キーの値は「Push通知のみ」配信時に設定できる「"URLを開く"から遷移するURL」項目に該当します
String linkUrl = payload.getStringExtra("link_url");
// 「Push通知のみ」配信以外の場合
if (hasDetail) {
return super.onInfoTapAction(context, id, src, payload);
// 「Push通知のみ」配信の場合
} else {
// 配信時にURLを設定している場合
if (!TextUtils.isEmpty(linkUrl)) {
/**************** 実装:(デフォルトサンプル)配信時に設定されたURLを暗黙的インテントで起動します。必要に応じて処理は変更してください。 ****************/
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(linkUrl));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
// 配信時にURLを設定していない場合
} else {
/**************** 実装:URLを設定されていない場合の処理をアプリの仕様に合わせて処理を実装してください。 ****************/
}
// 通知バーの通知を削除します
PopinfoUiUtils.clearNotification(context, id);
return false;
}
}
PUSH通知受信時の通知エリア(Notification)のカスタマイズ方法
FANSHIP SDK ver3.7.0より、PUSH通知受信時のNotificationを自由に作成できるようになりました。
下記手順で実装してください。
1) res/values/popinfo_values.xmlをアプリプロジェクトの同位置にコピーし、通知カスタマイズ設定を有効にします。
<!-- popinfoのNotificationを使用せず、独自にカスタマイズして表示する場合はtrueに変更してください。(true=Notificationカスタマイズ有効 false=Notificationカスタマイズ無効) -->
<bool name="popinfo_notification_customize_enabled">true</bool>
2) 同梱のPopinfoCallback.javaをアプリプロジェクトの任意の名前(ここではMyPopinfoCallbackとします)で任意のパッケージに配置し、AndroidManifest.xmlに設定します。(詳細は「6.3 AndroidManifest.xmlの修正」より<meta-data 一覧>をご確認ください。 )
<meta-data
android:name="POPINFO_CALLBACK_CLASS"
android:value="パッケージ名.MyPopinfoCallback" />
3) 上記PopinfoCallbackクラス内のonNotificaitonAppearedメソッドの説明を参考に独自のNotificationクラスを実装し返却します。
PopinfoCallbackクラスにサンプルコードもコメントアウトされているので参考に実装してください。
※ 通知カスタマイズを有効にするとデフォルトの FANSHIP が指定しているチャンネルは削除されますので、通知チャンネル登録はアプリ内の任意のタイミングで必ず実装してください。
/**
* PUSH通知受信時にpopinfoがNotificationを作成する直前のタイミングでコールバックされます。<br>
* Notificationをカスタマイズしたい場合、独自に作成したNotificaitonクラスを返却してください。<br>
* ※ res/values/popinfo_values.xmlのpopinfo_notification_customize_enabledをtrueに変更することで、このメソッドがコールされるようになります。<br>
* Notificationカスタマイズする際、下記をご確認ください。<br>
* 1. タップ時の処理は引数のpendingIntentをセットしてください。タップ時のアクションを制御する場合、 同クラス内のNotificationタップ時制御用メソッドのonInfoTapAction()をご使用ください。<br>
* 2. 通知チャンネルの設定は、任意のタイミングで作成・登録処理を実装してください。(popinfoのチャンネルIDはpopinfo_notificationとなってます。)
*
* @param context コンテキスト
* @param msgId メッセージID
* @param popupMsg PUSH通知ポップアップメッセージ
* @param icon 配信アイコン
* @param pendingIntent popinfo PendingIntent
* @return Notificationクラス
*/
public Notification onNotificaitonAppeared(Context context, String msgId, String popupMsg, Bitmap icon, PendingIntent pendingIntent){
return 作成したNotificationクラス;
}
PUSH通知受信時の通知エリア(Notification)を複数件表示する方法
FANSHIP SDK ver4.0.0より、PUSH通知受信時のNotificationを複数件表示できるようになりました。
デフォルトでは、以前のバージョンと同じ動作(最新1件のみ表示)を行います。
複数件表示させる場合、下記手順で設定してください。
1) res/values/popinfo_values.xmlをアプリプロジェクトの同位置にコピーし、Notificationの上書き設定を変更します。
<!-- Notificationの上書き設定 -->
<!-- popinfoのNotificationは、デフォルトで最新の通知1件のみ表示されます。最新の通知を上書きしない場合に変更してください。(true=最新で上書き false=上書きしない) -->
<bool name="popinfo_notification_multiple_enabled">true</bool>
FANSHIP 通知音/バイブレーションパターン指定
- 独自の着信音を設定する場合は、
/res/raw/popinfo_alarm.oggを差し替えてください。 - 独自のバイブレーションパターンを設定する場合は、
@array/popinfo_vibration_pattern(/res/values/popinfo_arrays.xml)を変更してください。
配列は、バイブレーションOff の時間、ONの時間、OFFの時間、ONの時間…の順にミリ秒単位の数値で設定します。
その他リソースファイルについて
- その他のリソースファイルも通常のAndroidプロジェクトと同様に修正可能です。アプリプロジェクト内の同フォルダ内にコピーして編集していただくことを推奨しております。
各画面のレイアウトファイル構成については「4.ファイル構成」を参考にしてください。
Warning
バージョン3.5.x 以降、SDKが指定した特定IDのViewに対応する動作が設定されなくなりました。各画面クラス内で、必要に応じて実装を行ってください。