高度な
通知グループの作成¶
通知センターで通知をグループとして表示できます。同じイベントに該当する通知はグループ化して折りたたんで表示できます。折りたたまれた通知グループはユーザーが再び展開でき、下位通知(グループに属する各通知)は個別に実行できます。
通知グループは、コンソール > 通知 > プッシュ v4 > プッシュキャンペーン登録 > キャンペーン登録 > オプション > グループキーでグループキーを使用に変更し、キー値を追加することで作成できます。コンソールでグループを作成した後、ローカルプッシュおよびリモートプッシュを送信する際にgroupId
で通知グループを適用できます。グループを適用すると、以下のように通知がグループごとに折りたたまれて表示されます。
| |
iOSメディア通知¶
AppleのUserNotificationsフレームワークを活用すると、Notificationに画像や動画などのメディアファイルを追加できます。
動作過程¶
この機能は、iOSのNotification Service Extension(以下、Extension)を活用して動作します。 Notification Service Extensionとは、ユーザーにRemote Notificationが届けられる前に、Payloadを修正できるApp Extensionの一つで、Contextの切り替えなしに他のアプリのプロセス(UIまたは機能)を使用できる技術です。 詳細については、次を参照してください。詳しく
ファイル容量およびタイプ制限¶
メディアファイル添付時には容量制限があり、詳細はUNNotificationAttachmentで確認できます。
Warning
Youtubeや各種モバイルゲーム(例:サマナーズウォー、星になれ、チェインストライク)などAVAudioSessionを使用しているアプリが実行中のとき、プッシュで送信されたオーディオを転送すると、メイン画面(Springboard)が再起動する現象が発生しました。これはiOSのバージョンやデバイスの種類に関係なく発生し、Hiveとは別にAppleのシステム内で衝突が発生していることが確認されました。
2018年12月20日にApple側にこの現象について問い合わせを行っており、対応が整うまでメディアプッシュを利用したオーディオ転送機能の使用を中止してください。
分類 | タイプ | 制限容量 |
---|---|---|
画像 | JPG, JPEG, PNG, GIF | 10MB |
動画 | MP4, AVI | 50MB |
- ネットワークが不安定なためタイムアウトが発生した場合、ユーザーはメディアが含まれていない通常の通知を受け取ることになります。
- 非常に遅い速度のネットワークでは最大10分間ダウンロードが進行することもあるため、該当地域のネットワーク状態を考慮して適切な容量のメディアを使用する必要があります。
実装と活用¶
メディアをダウンロードし、Notificationオブジェクトを再構成してユーザーに伝達する作業を行うためには、いくつかの設定とソースコードの追加が必要です。
Note
Notification Service Extensionはライブラリまたはフレームワークに含めて配布することができないため、Extensionを使用するにはHiveが提供するガイドに基づいて設定を進める必要があります。
拡張機能の追加¶
この機能を使用するには、プロジェクトにNotification Service Extensionを追加する必要があり、クラスを直接追加したりオーバーライドしたりせずに、プロジェクトに新しいターゲットを追加する方法を使用します。
プロジェクトにターゲットを追加すると、自動的にテンプレートが生成されます。
1. プロジェクト設定で、ターゲット追加ボタンをクリック (下部の赤い四角)
2. Notification Service Extensionを選択し、Nextをクリック
(Xcode 8からプロジェクトにNotification Service Extensionをターゲットとして追加できるようになりました)
4. 以下のようなポップアップが表示されたら、Activateをクリック
現在のプロジェクトにExtensionが自動的に含まれ(Embedded)、ビルドのためのSchemeが追加されます
5. Generalタブで、プロジェクトにExtensionが追加されたことを確認
6. プロジェクトにNotificationServiceという名前のテンプレートクラスが追加されました
HIVEExtensions.frameworkの追加¶
Hiveが提供する**HIVEExtensions.framework**を活用して、メディアを簡単にダウンロードできます。
HIVEExtensions.framework を追加する方法は次のとおりです。
-
Hive SDKはCocoaPodsをサポートしています。プロジェクトパスにPodfileがない場合はpod initを実行してください。
Podfileがある場合は、ファイルを開いて target 'NotificationServiceExtension(例のターゲット名)' do-end 構文を作成してください。
-
NotificationSample(例プロジェクト名).xcworkspaceを開くと、次のようにPodsプロジェクトが追加されているのがわかります。これでNotificationSampleとNotificationServiceExtensionターゲットからHIVEExtensionsをインポートできるようになります。
フレームワークの適用¶
NotificationService.m ファイルに例のようにフレームワークをインポートします。 テンプレートで提供されるメソッドで HIVEExtensions.framework が提供するメソッドを呼び出すように実装し、メソッド内部にあった初期テンプレートコードは削除してください。
import HIVEExtensions
func didReceiveNotificationRequest(request: UNNotificationRequest, with contentHandler: (UNNotificationContent) -> Void) {
HIVENotificationService.didReceive(request) { content in
guard let content else { return }
contentHandler(content)
}
}
func serviceExtensionTimeWillExpire() {
HIVENotificationService.serviceExtensionTimeWillExpire()
}
#import <HIVEExtensions/HIVEExtensions.h>
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
[HIVENotificationService didReceiveNotificationRequest:request withContentHandler:contentHandler];
}
- (void)serviceExtensionTimeWillExpire {
[HIVENotificationService serviceExtensionTimeWillExpire];
}
適用時の注意事項¶
発送、受信時点の違い¶
Extensionで全ての作業が終了した後に、ユーザーにNotificationを伝達するため、発送時間と受信時間に違いが生じる可能性があり、クライアントではサーバーから発送された時間を基準に表示されます。
例えば、15:00に通知を送信し、ダウンロードが完了した時間が15:05の場合、通知は15:00に到着したものとして表示されます。
デバイスの容量¶
プッシュを通じて受け取ったメディアは、ユーザーのデバイス内部に保存された後、プッシュを通じて表示され、受け取ったメディアはデバイス内部のキャッシュデータ空間に保存されてユーザーのデバイス内部容量を占有することになります。 キャッシュデータ空間は、ユーザーのデバイス内部ストレージ容量が不足している場合、OSが自動的にデータを削除します。
ユーザーのモバイルデータ使用¶
プッシュを通じて受信したメディアをダウンロードする際に、ユーザーのモバイルデータを使用し、ユーザーの同意なしにダウンロードが進行するため、ダウンロード時にデータ利用料金が発生する可能性があります。
プッシュを通じてオーディオ/ビデオファイルを受け取る場合、ダウンロード前にユーザーのネットワーク接続状態を確認し、ユーザーがWifi接続状態でない場合はダウンロードを進めず、メディアのないプッシュを表示するようにします。
この時、プッシュを通じて受け取ったメディアのタイプは、メディアURLの最後に記載された拡張子で確認し、[ファイル容量およびタイプ制限]項目に記載された拡張子のみが正常に表示されます。
受信したURL | wifi | LTE / 3G |
http://xxx/notimovie.mp4 | 常にダウンロード後にプッシュにメディアを表示 | 動画ファイルに該当する拡張子 (mp4) を持っているため、メディアのダウンロードなしでプッシュ表示 |
http://xxx/notimovie | 常にダウンロード後にプッシュにメディアを表示 | 音声ファイル/メディアファイルではないため、ダウンロード後にプッシュにメディアを表示 |
http://xxx/notisound.wav | 常にダウンロード後にプッシュにメディアを表示 | 音声ファイルに該当する拡張子 (wav) を持っているため、メディアのダウンロードなしでプッシュ表示 |
http://xxx/notiimage.jpg | 常にダウンロード後にプッシュにメディアを表示 | 音声ファイル/メディアファイルではないため、ダウンロード後にプッシュにメディアを表示 |
App Transport Security 設定¶
Appleの基本方針は、すべてのアプリで行われるサーバー通信はhttpsを許可することになっており、Notificationを通じて受信するURLもこの方針の影響を受けます。Httpドメインを使用して通信したい場合は、App Transport Security(以下ATS)例外設定が必要です。
この場合、ApplicationでATS例外処理が行われていても、プッシュを通じて送信されるurlにhttpドメインを使用するためには、ExtensionでATS例外設定を行ってください。
Unityでメディアが送信されない場合¶
Hub connection error Error Domain=NSCocoaErrorDomain Code=4097 "connection to service named com.com2us.hivesdk.normal.freefull.apple.global.ios.universal.NotificationServiceExtension" UserInfo={NSDebugDescription=connection to service named com.com2us.hivesdk.normal.freefull.apple.global.ios.universal.NotificationServiceExtension}
Unityで上記のようなエラーログが表示され、メディアが送信されない場合があります。この場合、生成されたExtension TargetのArchitecturesにarmv7とarm64の両方の値が含まれているか確認してください。