プッシュ通知を受信する
事前準備
事前に、KARTE SDKの導入を行う必要があります。
- 参考:SDKを導入する
KARTE のプッシュ通知では、バックエンドとして Firebase Cloud Messaging (以下 FCM)を利用しています。
そのため、事前に FCM SDK を導入する必要があります。
FCM SDK を導入することで、FCM の登録トークンの取得が可能となり、KARTE から FCM を経由してプッシュ通知を送ることが可能になります。
なお KARTE から FCM を経由してプッシュ通知を送信するために、KARTE の管理画面側でもいくつかの設定が必要になります。
設定方法については、以下のドキュメントをご覧ください。
通知の表示と通知イベントの呼び出しについて
Firebase Unity SDKの仕様上、Android,iOSのネイティブ実装と挙動が違う部分があります。ご注意ください。
Androidアプリがバックグラウンド時に通知を受信した場合、通知イベント(
Firebase.Messaging.FirebaseMessaging.MessageReceived
)は呼ばれません。その後、アプリがフォアグラウンドになった時に通知イベントが呼ばれます。また、アプリがバックグラウンド時に通知を表示するためには後述のServiceの設定が必要です。
iOSアプリがフォアグラウンド時に通知を受信した場合、通知イベントは呼ばれますが、通知は表示されません。
通知の表示有無、通知イベントが呼ばれるタイミングについては以下の表をご参照ください。
Android
アプリの状態 | 通知表示 | 通知イベント |
---|---|---|
フォアグラウンド | ○ | 即時 |
バックグラウンド | ○(Serviceの設定が必要) | アプリがフォアグラウンドになった時 |
iOS
アプリの状態 | 通知表示 | 通知イベント |
---|---|---|
フォアグラウンド | × | 即時 |
バックグラウンド | ○ | アプリがフォアグラウンドになった時 |
FCM SDK の導入を行う
FCM SDK の導入に関しては、下記ドキュメントをご覧ください。
- Unity を使用して Firebase Cloud Messaging クライアント アプリを設定する
ステップ 4: Firebase Unity SDK を追加するについてはKarte SDKをインストールした方法によって導入方法が異なりますので、以下の手順をご確認ください。
Karte SDKをUnity Package Managerからインストールした場合
- https://developers.google.com/unity/archive からFirebase App(Core)と Firebase Cloud Messagingの.tgzファイルをダウンロード
- ダウンロードしたファイルをプロジェクト内の適当なパスに配置
Window
>Package Manager
から左上の+ボタンをクリックし、Add package from git tarball...
を選択Firebase App
の.tgzを選択- 同様の手順で
Firebase Cloud Messaging
も追加
Karte SDKをKarteSDK.unitypackageからインストールした場合
上記Firebaseのドキュメントの通りFirebase SDKを導入してください。
プッシュ通知の利用に必要な実装を行う
FCM トークンの送信
KARTE からプッシュ通知を送信するためには、アプリケーションから端末の登録トークンを送信する必要があります。
using UnityEngine;
using Io.Karte;
public class Sample : MonoBehaviour {
private Firebase.FirebaseApp firebaseApp;
void Start () {
Firebase.FirebaseApp.CheckAndFixDependenciesAsync ().ContinueWith (task => {
var dependencyStatus = task.Result;
if (dependencyStatus == Firebase.DependencyStatus.Available) {
firebaseApp = Firebase.FirebaseApp.DefaultInstance;
Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
} else {
UnityEngine.Debug.LogError (System.String.Format ("Could not resolve all Firebase dependencies: {0}", dependencyStatus));
}
});
}
public void OnTokenReceived (object sender, Firebase.Messaging.TokenReceivedEventArgs token) {
App.RegisterFCMToken (token.Token);
}
}
受信した通知メッセージのハンドリング
Unity側の実装
以下の処理を行うためには通知受信時にRemoteNotificationHandler
クラスの HandleRemoteNotification
メソッドを呼び出します。
- iOS
- 通知のディープリンクを開く
- Android
- 通知の表示
- 通知開封イベントの送信
- 通知のディープリンクを開く
using UnityEngine;
using Io.Karte;
public class Sample : MonoBehaviour {
public void OnMessageReceived (object sender, Firebase.Messaging.MessageReceivedEventArgs e) {
#if UNITY_IOS && !UNITY_EDITOR
if (e.Message.NotificationOpened) {
//通知がタップされてアプリに遷移した
RemoteNotificationHandler.HandleRemoteNotification (e.Message.Data);
} else {
//アプリがフォアグラウンド時に通知を受信した
}
#elif UNITY_ANDROID && !UNITY_EDITOR
RemoteNotificationHandler.HandleRemoteNotification (message.Data);
#endif
}
}
iOSのUnity側実装について
上記のiOS用の実装はディープリンクを開くためだけのものです。iOSでは通知の表示と通知の開封イベント送信は自動で行われます。そのため、ディープリンクの処理が必要ない場合は
#if UNITY_IOS && !UNITY_EDITOR
で囲われた部分は必要ありません。
ディープリンク処理について
HandleRemoteNotification
で受け取ったディープリンクに対応する処理はアプリケーション側で実装が必要です。
詳細はUnityマニュアルのディープリンクを有効にするをご参照ください。
なお通知メッセージに含まれるディープリンクを独自に処理したい場合は、KarteRemoteNotificationHandler
クラスのRetrieveURLFromUserInfo
メソッドを呼び出すことで、ディープリンクのみを取得し利用することが可能です。
string url = RemoteNotificationHandler.RetrieveURLFromUserInfo (e.Message.Data);
Androidのバックグラウンド状態で通知を受信する
Androidでバックグラウンドでも通知を受信するためにはlauncherのAndroidManifest.xmlに以下のようにServiceを追加してください。
<application android:label="@string/app_name" android:icon="@mipmap/app_icon" android:name="io.karte.unity.UnityApplication">
<service android:name="io.karte.unity.UnityMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
</application>
テストメッセージを送信する
テストメッセージの送信方法については、以下のドキュメントをご覧ください。
Updated 12 months ago