高度な
通知グループの作成¶
通知センターで通知をグループとして表示できます。同じイベントに対応する通知は、グループ化して折りたたまれた形式で表示できます。折りたたまれた通知グループはユーザーによって再度展開でき、個々の通知(グループに属する各通知)は別々に実行できます。
通知グループは、グループキーを有効に変更し、コンソール > 通知 > プッシュ v4 > プッシュキャンペーンの登録 > キャンペーン登録 > オプション > グループキーにキー値を追加することで作成できます。コンソールでグループを作成した後、groupId
を使用してローカルプッシュおよびリモートプッシュ通知を送信する際に通知グループを適用できます。グループが適用されると、通知は以下のようにグループごとに折りたたまれて表示されます。
| |
</tbody>
iOSメディア通知¶
AppleのUserNotificationsフレームワークを利用することで、通知に画像や動画などのメディアファイルを追加できます。
操作プロセス¶
この機能は、iOSの通知サービス拡張(以下、拡張と呼ぶ)を使用して動作します。通知サービス拡張は、リモート通知がユーザーに配信される前にペイロードを変更できるアプリ拡張の一種であり、コンテキストを切り替えることなく他のアプリのプロセス(UIまたは機能)を使用できるようにします。詳細については、こちらをご覧ください。
ファイルサイズとタイプの制限¶
メディアファイルを添付する際にはサイズ制限があり、詳細情報はUNNotificationAttachmentで確認できます。
Warning
私たちは、AVAudioSessionを使用しているアプリ(Youtubeやさまざまなモバイルゲーム(例:Summoners War, Be a Star, Chain Strike)など)が実行されているときに、プッシュ通知経由で受信した音声を送信すると、メイン画面(Springboard)が再起動することを発見しました。この問題は、iOSのバージョンやデバイスタイプに関係なく発生し、Hiveとは別にAppleシステム内での競合が確認されています。
2018年12月20日に、私たちはこの問題についてAppleに問い合わせを行い、回答が準備されるまで、 メディアプッシュを使用した音声伝送機能の使用を中止してください。
カテゴリ | タイプ | サイズ制限 |
---|---|---|
画像 | JPG, JPEG, PNG, GIF | 10MB |
動画 | MP4, AVI | 50MB |
- ネットワーク条件が悪いためにタイムアウトが発生した場合、ユーザーはメディアなしの通常の通知を受け取ります。
- 非常に遅いネットワークでは、ダウンロードに最大10分かかることがありますので、その地域のネットワーク条件を考慮し、適切なサイズのメディアを使用する必要があります。
実装と利用¶
メディアをダウンロードし、ユーザーへの配信のために通知オブジェクトを再構築するには、いくつかの設定と追加のソースコードが必要です。
Note
通知サービス拡張はライブラリやフレームワークの一部として含めたり配布したりすることはできませんので、拡張機能を使用するには、Hiveが提供するガイドに基づいて設定を進める必要があります。
拡張機能の追加¶
この機能を使用するには、プロジェクトに通知サービス拡張を追加する必要があります。これは、クラスを直接追加または上書きするのではなく、新しいターゲットをプロジェクトに追加することで行うべきです。
プロジェクトにターゲットを追加すると、テンプレートが自動的に作成されます。
1. プロジェクト設定でターゲット追加ボタンをクリックします(下部の赤い四角)
通知サービス拡張を選択し、次へクリックしてください
(Xcode 8以降、プロジェクトに通知サービス拡張をターゲットとして追加することが可能になりました)
4. ポップアップが表示されたら、アクティブ化をクリックしてください
拡張機能は現在のプロジェクトに自動的に含まれ(埋め込まれ)、ビルド用のスキームが追加されます。
5. 拡張機能が一般タブにプロジェクトに追加されていることを確認してください
6. プロジェクトにNotificationServiceというテンプレートクラスが追加されました
HIVEExtensions.frameworkの追加¶
Hiveが提供する**HIVEExtensions.framework**を使用して、メディアを簡単にダウンロードできます。
**HIVEExtensions.framework**を追加する方法は以下の通りです。
-
Hive SDKはCocoaPodsをサポートしています。プロジェクトパスにPodfileがない場合は、pod initを実行してください。
Podfileがある場合は、そのファイルを開いて、ターゲット '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];
}
申請に関する注意事項¶
送信時間と受信時間の違い¶
拡張機能内のすべてのタスクが完了した後、通知がユーザーに配信されます。これにより、送信時間と受信時間の間に違いが生じる可能性があり、クライアントはサーバーが送信した時刻に基づいて時間を表示します。
例えば、15:00に通知が送信され、15:05にダウンロードが完了した場合、通知は15:00に到着したと表示されます。
デバイスの容量¶
プッシュ通知を通じて受信したメディアは、ユーザーのデバイスに保存され、その後プッシュを通じて公開されます。受信したメディアはデバイスの内部キャッシュデータスペースに保存され、ユーザーのデバイスの内部容量を占有します。内部ストレージ容量が不足している場合、キャッシュデータスペースはOSによって自動的にクリアされます。
ユーザーのモバイルデータ使用量¶
プッシュ通知を通じて受信したメディアは、ユーザーのモバイルデータを使用してダウンロードされ、ダウンロードはユーザーの同意なしに進行します。これにより、ダウンロード中にデータ使用料が発生する可能性があります。
プッシュでオーディオ/ビデオファイルが配信される場合は、ダウンロードする前にユーザーのネットワーク接続状況を確認してください。ユーザーがWi-Fiに接続されていない場合は、ダウンロードを進めず、メディアなしのプッシュ通知を表示してください。
この時、プッシュを通じて受信したメディアの種類は、メディアURLの末尾に指定された拡張子によって確認され、[ファイルサイズとタイプの制限]セクションに指定された拡張子のみが正しく表示されます。
受信したURL | wifi | LTE / 3G |
http://xxx/notimovie.mp4 | メディアはダウンロード後に常に公開されます | ビデオファイル(mp4)に対応する拡張子があるため、メディアダウンロードなしで公開されます |
http://xxx/notimovie | メディアはダウンロード後に常に公開されます | オーディオ/メディアファイルではないため、メディアはダウンロード後に公開されます |
http://xxx/notisound.wav | メディアはダウンロード後に常に公開されます | オーディオファイル(wav)に対応する拡張子があるため、メディアダウンロードなしで公開されます |
http://xxx/notiimage.jpg | メディアはダウンロード後に常に公開されます | オーディオ/メディアファイルではないため、メディアはダウンロード後に公開されます |
アプリのトランスポートセキュリティ設定¶
Appleのデフォルトポリシーでは、すべてのアプリによって実行されるサーバー通信がhttpsを使用することを許可しており、通知を通じて受信したURLもこのポリシーの影響を受けます。Httpドメインを使用して通信したい場合は、App Transport Security (ATS) の例外を設定する必要があります。
アプリケーションにATS例外処理があっても、プッシュ通知を介して送信されるURLのhttpドメインを使用するには、拡張機能で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では、上記のようなエラーログを表示している間にメディアが配信されない場合があります。この場合、作成した拡張ターゲットのアーキテクチャにarmv7とarm64の両方の値が含まれているかどうかを確認してください。