リッチプッシュ通知を受信する
このドキュメントは古いバージョンのiOS SDK v1について記載しています
iOS SDK v1は 2021/05/11でサポート終了となります。
SDK v1 からのアップグレードについては、まず SDK v1からv2のアップグレード方法 をご覧ください。
リッチプッシュ通知に対応することで、画像や動画などを添付したプッシュ通知を受信することが可能です(本機能は iOS10 以上でのみ利用可能です)
Extensionの作成
リッチプッシュ通知を受信するために、Notification Service Extension を作成する必要があります。
ターゲットを追加する
Xcodeのメニューの File
> New
> Target...
をクリックします。
テンプレートを選択する
iOS
> Notification Service Extension
を選択し、Next
をクリックします。
ターゲットのオプションを設定する
以下の項目を入力した上で、Finish
をクリックします。
- Product Name
- Organization Name
- Organization Identifier
Activate
をクリックします。
SDK のセットアップ
CocoaPods を利用してセットアップする
Podfile の編集
Podfile を任意のエディタで開き、App Extensions SDK の情報を追記します。
TARGET_NAME
部分は、Extension 作成時に指定した Product Name
に置き換えてください。
target 'TARGET_NAME' do
pod 'KarteTrackerAppExtensions'
end
SDK をインストール
以下のコマンドをターミナルで実行し、SDK をインストールします。
$ pod install
手動でセットアップする
SDK のダウンロード
こちら から最新の SDK をダウンロードしてください。
SDK のプロジェクトへの追加
ダウンロードしたファイルを展開すると、KarteTrackerAppExtensions.framework
というファイルがあるので、これをプロジェクトに追加します。
SDK をプロジェクトに追加する際、オプションの指定を求められます。
Copy items if needed
と Create groups
にチェックを入れた上で、適切なターゲットにチェックが入っていることを確認し、Finish
ボタンを押します。
依存フレームワークの追加
App Extensions SDK が依存するフレームワークを追加します。
Build Phases
> Link Binary With Libraries
に、以下のフレームワークを追加してください。
フレームワーク名 | オプション |
---|---|
MobileCoreService.framework | Required |
UserNotifications.framework | Optional |
ビルド設定の編集
ビルドに必要となる設定を追加します。
Build Settings
> Other Linker Flags
に -ObjC
を追加してください。
リッチプッシュ通知の受信に必要な実装を行う
Extension 作成時にテンプレートから自動的に作成されるソースコードを修正します。
デフォルトで作成される NotificationService
クラスを KarteNotificationServiceExtension
クラスを継承するようにし、デフォルトの実装も削除します。
このようにすることで、KARTE 経由で配信されたプッシュ通知を受信した際に KarteNotificationServiceExtension
が自動的に必要なリソース(画像等)をダウンロードし、通知へ反映します。
import KarteTrackerAppExtensions
class NotificationService: KarteNotificationServiceExtension {
}
// Header
#import <UserNotifications/UserNotifications.h>
#import <KarteTrackerAppExtensions/KarteNotificationServiceExtension.h>
@interface NotificationService : KarteNotificationServiceExtension
@end
// Implementation
#import "NotificationService.h"
@interface NotificationService ()
@end
@implementation NotificationService
@end
KARTE 経由のプッシュ通知であるか判定する方法
プッシュ通知が KARTE 経由で送信されたものであるか判定する必要がある場合は、KarteNotificationServiceExtension
の canHandleRemoteNotification
メソッドを呼び出します。
import KarteTrackerAppExtensions
class NotificationService: KarteNotificationServiceExtension {
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
// KARTE経由のプッシュ通知であるか判定
if super.canHandleRemoteNotification(request.content.userInfo) {
// KARTE経由のプッシュ通知 (スーパークラスに処理を移譲)
super.didReceive(request, withContentHandler: contentHandler)
} else {
// KARTE以外のシステムから送信されたプッシュ通知 (任意の処理を実装)
contentHandler(request.content)
}
}
}
#import "NotificationService.h"
@interface NotificationService ()
@end
@implementation NotificationService
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
// KARTE経由のプッシュ通知であるか判定
if ([super canHandleRemoteNotification:request.content.userInfo]) {
// KARTE経由のプッシュ通知 (スーパークラスに処理を移譲)
[super didReceiveNotificationRequest:request withContentHandler:contentHandler];
} else {
// KARTE以外のシステムから送信されたプッシュ通知 (任意の処理を実装)
contentHandler(request.content);
}
}
@end
Updated 10 months ago