高度な
通知グループの作成¶
通知センターで通知をグループとして表示することができます。同じイベントに対応する通知はグループ化され、折りたたまれた形式で表示されます。折りたたまれた通知グループはユーザーによって再度展開でき、個々の通知(グループに属する各通知)は別々に実行できます。
通知グループは、グループキーを有効に変更し、コンソール > 通知 > プッシュ 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が提供するガイドに基づいてセットアップを進める必要があります。
拡張機能の追加¶
メディア通知機能を使用するには、プロジェクトに通知サービス拡張を追加する必要があります。クラスを直接追加またはオーバーライドするのではなく、新しいターゲットをプロジェクトに追加してください。
ターゲットを追加すると、テンプレートが自動的に作成されます。
<summary>Unityプロジェクトにターゲットを追加する</summary>
Unityエディターでは、Hive SDKが自動的にターゲットの追加とInfo.plistの作成プロセスをPostProcess機能を使用して実行します。メディアプッシュオプションを有効にするだけで、他の手動ステップは必要ありません。
1. Unityエディタのメニューバーで、**Hive > プロジェクトビルド後の設定 > iOS**に移動します。
2. **プッシュメディアコンテンツ**を有効にします。
<summary>非Unity環境でのターゲットの追加</summary>
1. プロジェクト設定で、**ターゲットを追加**ボタン(左下の**+**ボタン)をクリックします。
{width="700px"}
2. **通知サービス拡張**を選択し、**次へ**をクリックします。 <br>
(Xcode 8以降、プロジェクトにターゲットとして通知サービス拡張を追加できます)
{width="700px"}
3. **製品名**を入力してください
{width="700px"}
4. ポップアップが表示されたら、**アクティブ化**をクリックします。 <br>
拡張機能は現在のプロジェクトに自動的に埋め込まれ、ビルド用のスキームが追加されます。
{width="700px"}
5. **一般**タブで、**拡張機能**がプロジェクトに追加されていることを確認します
{width="700px"}
6. **NotificationService** テンプレートクラスがプロジェクトに追加されたことを確認します
{width="700px"}
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.swiftファイルにフレームワークをインポートします。例に示すように。 テンプレートに提供されたメソッドを実装し、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の両方の値が含まれているかどうかを確認してください。
プッシュアクションボタン¶
プッシュアクションボタンは、プッシュ通知を長押ししたときに表示されるシステムボタンです。以下に示すように、プッシュ通知にこれらの追加ボタンを表示することで、ユーザーのインタラクションを促すことができます。
Hive SDKを使用すると、簡単な設定でプッシュアクションボタンを簡単に実装できます。
Android | iOS |
---|---|
![]() | ![]() |
Note
Android SDKのプッシュアクションボタンには追加の設定は必要ありません。アクションボタン機能の使用に関する詳細は、コンソールガイド > 通知を参照してください。 iOS SDKでは、「基本実装」または「高度な実装」メソッドを使用してプッシュアクションボタンを実装できます。
Warning
iOSメディア通知と一緒にプッシュアクションボタンを使用する際、iOS SDKでメディア通知機能が正しく動作しない場合があります。プッシュを送信する際は、一度に一つの機能のみを使用してください—「メディアURL」または「アクションプッシュ」のいずれかです。両方を同時に使用すると、受信時にメディアサムネイルのみが表示され、長押ししても拡張ビューアは表示されません。
基本的な実装 (iOS)¶
Hive SDKは、'確認'、'拒否'などの一般的に使用されるパターンに基づいて、デフォルトのプッシュアクションボタンのセットを提供します。これらの組み込みボタンの組み合わせは迅速に適用でき、必要に応じてカスタムアクションボタンセットを定義および拡張することもできます。デフォルトのプッシュアクションボタンセットは以下に示されています。
* 確認
* 閉じる
* 確認、閉じる
* 実行、キャンセル
* すべて受け入れる、閉じる
* 今すぐ請求、閉じる
* 購入、辞退
* 売却、辞退
* 受け入れる、拒否、保留
| カテゴリ~(カテゴリ識別子)~ | ボタン名~(アクション識別子)~ |
|:---:|:----|
|確認~(INFO_CATEGORY)~|確認~(CONFIRM_ID)~|
|閉じる~(CLOSE_CATEGORY)~|閉じる~(CLOSE_ID)~|
|選択を確認~(CONFIRM_CATEGORY)~|確認~(CONFIRM_ID)~, 閉じる~(CLOSE_ID)~|
|実行~(EXECUTE_CATEGORY)~|実行~(EXECUTE_ID)~, キャンセル~(CANCEL_ID)~|
|一括受け入れ~(ACCEPT_ALL_CATEGORY)~|すべて受け入れる~(ACCEPT_ALL_ID)~, 閉じる~(CLOSE_ID)~|
|即時請求~(ACCEPT_NOW_CATEGORY)~|今すぐ請求~(ACCEPT_NOW_ID)~, 閉じる~(CLOSE_ID)~|
|購入決定~(PURCHASE_CATEGORY)~|購入~(PURCHASE_ID)~, 辞退~(DECLINE_ID)~|
|販売リクエスト~(SALE_CATEGORY)~|売却~(SALE_ID)~, 辞退~(DECLINE_ID)~|
|決定~(ACCEPT_DECISION_CATEGORY)~|受け入れる~(ACCEPT_ID)~, 拒否~(REJECT_ID)~, 保留~(HOLDING_ID)~|
これらのプッシュアクションボタンセットを適用するために追加のコードは必要ありませんが、プロジェクトにNotification Content Extension
ターゲットを追加する必要があります。ターゲットを追加し、プッシュアクションボタンを有効にするための開発環境に関する「プッシュアクションボタンセット適用ガイド」を参照してください。
<summary>Unityでプッシュアクションボタンセットを適用する</summary>
Unityエディターでは、Hive SDKの**PostProcess**機能がターゲットの追加とInfo.plistの作成を自動的に処理します。プッシュアクションボタンを使用するオプションをチェックするだけで、他の手動ステップは必要ありません。
1. Unityエディタのメニューバーで、**Hive > Build project post process settings > iOS**に移動します。
2. **Push Action Buttons**を有効にします。
<BR> ボタンを有効にすると表示されるリストは、[Advanced Implementation](#ios_1)で使用される*hive_push_actions.json*ファイルの`categories`フィールドをプレビューします。このファイルなしでデフォルトの実装を進めると、'none'が表示されます。
<summary>非Unity環境でのプッシュアクションボタンセットの適用</summary>
Xcodeプロジェクト(.xcodeproj)を生成した後、次の手順に従ってください:
1. プロジェクト設定で、**ターゲットを追加**をクリックします
2. **通知コンテンツ拡張**を選択し、**次へ**をクリックします
3. **製品名**を入力し、メインゲームアプリターゲットを**アプリケーションに埋め込む**に割り当てます
4. メインゲームアプリターゲットの**一般**タブで、'製品名'がプロジェクトに追加されていることを確認します
5. '製品名'パスの下にある自動生成されたテンプレートクラスファイル~(NotificationContentViewController.swift)~を確認し、以下のように入力します

開発環境に設定されたプッシュアクションボタンを適用したら、コンソールからプッシュを送信する際のアクションを指定します。
アクションを指定する際は、上記の詳細リストからカテゴリとアクションの識別子を使用してください。
コンソール設定の詳細については、コンソールガイドを参照してください。
高度な実装 (iOS)¶
actions
と categories
の値を hive_push_actions.json ファイルに定義します。定義した後、hive_push_actions.json ファイルをターゲットに含めてアプリをビルドします。アプリが実行されると、Hive SDK が自動的にファイルを解析し、通知センターにアクションとカテゴリを登録します。
以下に*hive_push_actions.json*ファイルの例を示します。
hive_push_actions.json の例
{
"actions": {
"ACCEPT_ALL_ID": { ... },
"ACCEPT_ID": { ... },
"ACCEPT_NOW_ID": { ... },
"CANCEL_ID": { ... },
"CLOSE_ID": { ... },
"CONFIRM_ID": { ... },
"DECLINE_ID": { ... },
"EXECUTE_ID": { ... },
"HOLDING_ID": { ... },
"PURCHASE_ID": { ... },
"REJECT_ID": { ... },
"SALE_ID": { ... }
},
"categories": {
"INFO_CATEGORY": ["CONFIRM_ID"],
"CLOSE_CATEGORY": ["CLOSE_ID"],
"CONFIRM_CATEGORY": ["CONFIRM_ID", "CLOSE_ID"],
"EXECUTE_CATEGORY": ["EXECUTE_ID", "CANCEL_ID"],
"ACCEPT_ALL_CATEGORY": ["ACCEPT_ALL_ID", "CLOSE_ID"],
"ACCEPT_NOW_CATEGORY": ["ACCEPT_NOW_ID", "CLOSE_ID"],
"PURCHASE_CATEGORY": ["PURCHASE_ID", "DECLINE_ID"],
"SALE_CATEGORY": ["SALE_ID", "DECLINE_ID"]
}
}
ファイルを書くためのノート:
- カテゴリ(セット)ごとの最大ボタン数は**3**です。
- 上記の例はデフォルトのボタンセットを定義しています。カスタムアクションボタンの場合、重複した識別子を使用しないでください; 一意で区別可能な文字列を使用してください。
- 多言語サポートは**ゲーム言語**に従い、Hive SDKがサポートする最大16言語を入力できます。英語(
"en"
)は多言語文字列のデフォルト値として必須です。
Note
Unity PostProcessはサポートされています。Unityプロジェクト内の*hive_config.xml*と同じパスに*hive_push_actions.json*ファイルを追加すると、Xcodeプロジェクトをビルドする際にアプリターゲットに自動的に追加されます。
Warning
ファイルを書き込んだ後、ファイルの「categories」フィールドからのキーをNotification Content ExtensionのInfo.plistのUNNotificationExtensionCategory
に追加します。
Unityでは、これはファイルを分析することによって自動的に行われます。