2017-10-05 5 views
0

プッシュ通知バナーを表示する準備ができたときにこの関数が呼び出されていることがわかりました。プログラムによるプッシュ通知コンテンツの変更

-(void)userNotificationCenter:(UNUserNotificationCenter*)center 
willPresentNotification:(UNNotification*)notification 
withCompletionHandler:(void (^)(UNNotificationPresentationOptions 
options))completionHandler{ 


} 

この機能には、バナーに表示される予定の情報を含むクラス(UNNotification)の通知があります。 問題は、アプリケーション内のプッシュ通知の内容を変更できることです。 私はこの方法ですべてのコンテンツを保存できます。

NSString *title=notification.request.content.title; 
NSString *subTitle=notification.request.content.subTitle; 

などとなる。 しかし、これらのプロパティ(title、subTite)は読み込み専用です。 この補完ハンドラ内のコンテンツまたは他の方法でコンテンツを変更する方法はありますか?

+1

なぜプッシュ通知のペイロードをバックエンドから変更しないのですか。 apsはバナーで表示されますが、ペイロード辞書にさらに情報を追加することができます –

+0

はい、それは解決策ですが、私は今バックエンドにアクセスできない。いくつかの理由から私はアプリケーション内でこれを行う必要があります。 –

答えて

4

NotificationServiceエクステンションを作成します。ペイロード内のapsの中にmutable-content flagを1として送信すると、iOSシステムはあなたのエクステンションを起動し、通知コンテンツを変更する機会を与えます。これはあなたのアプリが殺された状態であっても機能します。欠点は、これがiOS 10以上でのみ利用可能であることです。

+1

古いiOSバージョンのフォールバックは、ローカルのプッシュ通知をスケジュールすることになります。この動作は私たちにとってうまくいきました:) – Lepidopteron

+2

@Lepidopteron:ローカル通知をスケジュールすると、サイレントプッシュを送信してローカル通知をスケジュールすることになります。しかし、その場合、ユーザーがアプリを終了した場合、silet pushは配信されません。 –

+0

実際に良いソウルティションがありますが、今はバックエンドへのアクセス権がありません。現在、バックエンドから新しいP12ファイル(拡張子ファイル)を更新できる人はいません。 –

関連する問題