🚧 PushNotificationIOS
非推奨。代わりにコミュニティパッケージを使用してください。
スケジューリングや権限など、アプリの通知を処理します。
はじめに
プッシュ通知を有効にするには、Appleとサーバーサイドシステムで通知を設定します。
次に、プロジェクトでリモート通知を有効にします。これにより、必要な設定が自動的に有効になります。
register
イベントのサポートを有効にする
AppDelegate.m
に以下を追加します。
#import <React/RCTPushNotificationManager.h>
次に、リモート通知登録イベントを処理するために以下を実装します。
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
// This will trigger 'register' events on PushNotificationIOS
[RCTPushNotificationManager didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
// This will trigger 'registrationError' events on PushNotificationIOS
[RCTPushNotificationManager didFailToRegisterForRemoteNotificationsWithError:error];
}
通知を処理する
AppDelegate
でUNUserNotificationCenterDelegate
を実装する必要があります。
#import <UserNotifications/UserNotifications.h>
@interface YourAppDelegate () <UNUserNotificationCenterDelegate>
@end
アプリ起動時にデリゲートを設定する
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
return YES;
}
フォアグラウンド通知
アプリがフォアグラウンドにあるときに届く通知を処理するには、userNotificationCenter:willPresentNotification:withCompletionHandler:
を実装します。completionHandlerを使用して、通知をユーザーに表示するかどうかを決定し、それに応じてRCTPushNotificationManager
に通知します。
// Called when a notification is delivered to a foreground app.
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
willPresentNotification:(UNNotification *)notification
withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler
{
// This will trigger 'notification' and 'localNotification' events on PushNotificationIOS
[RCTPushNotificationManager didReceiveNotification:notification];
// Decide if and how the notification will be shown to the user
completionHandler(UNNotificationPresentationOptionNone);
}
バックグラウンド通知
通知がタップされたときに処理するには、userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:
を実装します。これは通常、ユーザーがアプリを開くためにタップするバックグラウンド通知に対して呼び出されます。ただし、userNotificationCenter:willPresentNotification:withCompletionHandler:
でフォアグラウンド通知を表示するように設定していた場合、このメソッドもタップされたフォアグラウンド通知に対して呼び出されます。この場合、これらのコールバックのいずれかでRCTPushNotificationManager
にのみ通知する必要があります。
タップされた通知によってアプリが起動した場合、setInitialNotification:
を呼び出します。通知が以前にuserNotificationCenter:willPresentNotification:withCompletionHandler:
によって処理されていなかった場合、didReceiveNotification:
も呼び出します。
- (void) userNotificationCenter:(UNUserNotificationCenter *)center
didReceiveNotificationResponse:(UNNotificationResponse *)response
withCompletionHandler:(void (^)(void))completionHandler
{
// This condition passes if the notification was tapped to launch the app
if ([response.actionIdentifier isEqualToString:UNNotificationDefaultActionIdentifier]) {
// Allow the notification to be retrieved on the JS side using getInitialNotification()
[RCTPushNotificationManager setInitialNotification:response.notification];
}
// This will trigger 'notification' and 'localNotification' events on PushNotificationIOS
[RCTPushNotificationManager didReceiveNotification:response.notification];
completionHandler();
}
リファレンス
メソッド
presentLocalNotification()
static presentLocalNotification(details: PresentLocalNotificationDetails);
すぐに表示するためのローカル通知をスケジュールします。
パラメータ
名前 | 型 | 必須 | 説明 |
---|---|---|---|
詳細 | オブジェクト | はい | 以下を参照してください。 |
details
は以下の情報を含むオブジェクトです
alertTitle
:通知アラートのタイトルとして表示されるテキスト。alertBody
:通知アラートに表示されるメッセージ。userInfo
:追加の通知データを含むオブジェクト(オプション)。category
:アクション可能な通知に必要なこの通知のカテゴリ(オプション)。例:返信やいいねなどの追加アクションがある通知。applicationIconBadgeNumber
:アプリのアイコンバッジとして表示される数値。このプロパティのデフォルト値は0で、バッジが表示されないことを意味します(オプション)。isSilent
:trueの場合、通知は音なしで表示されます(オプション)。soundName
:通知が発火したときに再生される音(オプション)。alertAction
:非推奨。これはiOSのレガシーなUILocalNotificationに使用されていました。
scheduleLocalNotification()
static scheduleLocalNotification(details: ScheduleLocalNotificationDetails);
将来表示するためのローカル通知をスケジュールします。
パラメータ
名前 | 型 | 必須 | 説明 |
---|---|---|---|
詳細 | オブジェクト | はい | 以下を参照してください。 |
details
は以下の情報を含むオブジェクトです
alertTitle
:通知アラートのタイトルとして表示されるテキスト。alertBody
:通知アラートに表示されるメッセージ。fireDate
:通知が発火する日時。通知はfireDate
またはfireIntervalSeconds
のいずれかを使用してスケジュールし、fireDate
が優先されます。fireIntervalSeconds
:現在から通知を表示するまでの秒数。userInfo
:追加の通知データを含むオブジェクト(オプション)。category
:アクション可能な通知に必要なこの通知のカテゴリ(オプション)。例:返信やいいねなどの追加アクションがある通知。applicationIconBadgeNumber
:アプリのアイコンバッジとして表示される数値。このプロパティのデフォルト値は0で、バッジが表示されないことを意味します(オプション)。isSilent
:trueの場合、通知は音なしで表示されます(オプション)。soundName
:通知が発火したときに再生される音(オプション)。alertAction
:非推奨。これはiOSのレガシーなUILocalNotificationに使用されていました。repeatInterval
:非推奨。代わりにfireDate
またはfireIntervalSeconds
を使用してください。
cancelAllLocalNotifications()
static cancelAllLocalNotifications();
スケジュールされているすべてのローカル通知をキャンセルします。
removeAllDeliveredNotifications()
static removeAllDeliveredNotifications();
通知センターから配信済みのすべての通知を削除します。
getDeliveredNotifications()
static getDeliveredNotifications(callback: (notifications: Object[]) => void);
現在通知センターに表示されているアプリの通知リストを提供します。
パラメータ
名前 | 型 | 必須 | 説明 |
---|---|---|---|
コールバック | 関数 | はい | 配信された通知の配列を受け取る関数。 |
配信された通知は以下の情報を含むオブジェクトです
identifier
:この通知の識別子。title
:この通知のタイトル。body
:この通知の本文。category
:この通知のカテゴリ(オプション)。userInfo
:追加の通知データを含むオブジェクト(オプション)。thread-id
:この通知のスレッド識別子(存在する場合)。
removeDeliveredNotifications()
static removeDeliveredNotifications(identifiers: string[]);
指定された通知を通知センターから削除します。
パラメータ
名前 | 型 | 必須 | 説明 |
---|---|---|---|
識別子 | 配列 | はい | 通知識別子の配列。 |
setApplicationIconBadgeNumber()
static setApplicationIconBadgeNumber(num: number);
ホーム画面のアプリアイコンのバッジ数を設定します。
パラメータ
名前 | 型 | 必須 | 説明 |
---|---|---|---|
番号 | 番号 | はい | アプリアイコンのバッジ番号。 |
getApplicationIconBadgeNumber()
static getApplicationIconBadgeNumber(callback: (num: number) => void);
ホーム画面のアプリアイコンの現在のバッジ数を取得します。
パラメータ
名前 | 型 | 必須 | 説明 |
---|---|---|---|
コールバック | 関数 | はい | 現在のバッジ番号を処理する関数。 |
cancelLocalNotifications()
static cancelLocalNotifications(userInfo: Object);
提供されたuserInfo
のフィールドに一致するスケジュール済みのローカル通知をすべてキャンセルします。
パラメータ
名前 | 型 | 必須 | 説明 |
---|---|---|---|
ユーザー情報 | オブジェクト | いいえ |
getScheduledLocalNotifications()
static getScheduledLocalNotifications(
callback: (notifications: ScheduleLocalNotificationDetails[]) => void,
);
現在スケジュールされているローカル通知のリストを取得します。
パラメータ
名前 | 型 | 必須 | 説明 |
---|---|---|---|
コールバック | 関数 | はい | ローカル通知を記述するオブジェクトの配列を処理する関数。 |
addEventListener()
static addEventListener(
type: PushNotificationEventName,
handler:
| ((notification: PushNotification) => void)
| ((deviceToken: string) => void)
| ((error: {message: string; code: number; details: any}) => void),
);
ローカル通知、リモート通知、および通知登録結果を含む通知イベントにリスナーをアタッチします。
パラメータ
名前 | 型 | 必須 | 説明 |
---|---|---|---|
タイプ | 文字列 | はい | リッスンするイベントタイプ。以下を参照してください。 |
ハンドラ | 関数 | はい | リスナー。 |
有効なイベントタイプは以下の通りです
notification
:リモート通知を受信したときに発火します。ハンドラーはPushNotificationIOS
のインスタンスで呼び出されます。これは、フォアグラウンドで届いた通知、またはバックグラウンドからアプリを開くためにタップされた通知を処理します。localNotification
:ローカル通知を受信したときに発火します。ハンドラーはPushNotificationIOS
のインスタンスで呼び出されます。これは、フォアグラウンドで届いた通知、またはバックグラウンドからアプリを開くためにタップされた通知を処理します。register
:ユーザーがリモート通知に正常に登録したときに発火します。ハンドラーは、deviceTokenを表す16進数文字列で呼び出されます。registrationError
:ユーザーがリモート通知の登録に失敗したときに発火します。通常、APNSの問題またはデバイスがシミュレーターである場合に発生します。ハンドラーは{message: string, code: number, details: any}
で呼び出されます。
removeEventListener()
static removeEventListener(
type: PushNotificationEventName,
);
イベントリスナーを削除します。メモリリークを防ぐため、componentWillUnmount
でこれを行ってください。
パラメータ
名前 | 型 | 必須 | 説明 |
---|---|---|---|
タイプ | 文字列 | はい | イベントタイプ。オプションについてはaddEventListener() を参照してください。 |
requestPermissions()
static requestPermissions(permissions?: PushNotificationPermissions[]);
iOSに通知権限を要求し、ダイアログボックスでユーザーにプロンプトを表示します。デフォルトでは、すべての通知権限を要求しますが、要求する権限をオプションで指定できます。以下の権限がサポートされています。
アラート
バッジ
音
メソッドにマップが提供された場合、真の値を持つ権限のみが要求されます。
このメソッドは、ユーザーがリクエストを承認または拒否したとき、または権限が以前に拒否されたときに解決するプロミスを返します。プロミスは、リクエストが完了した後の権限の状態に解決されます。
パラメータ
名前 | 型 | 必須 | 説明 |
---|---|---|---|
権限 | 配列 | いいえ | アラート、バッジ、またはサウンド |
abandonPermissions()
static abandonPermissions();
Apple Push Notification service経由で受信したすべてのリモート通知の登録を解除します。
このメソッドは、アプリの新しいバージョンがすべての種類のリモート通知のサポートを削除した場合など、まれな状況でのみ呼び出す必要があります。ユーザーは、設定アプリを通じて一時的にアプリがリモート通知を受信できないようにすることができます。このメソッドを通じて登録解除されたアプリは、いつでも再登録できます。
checkPermissions()
static checkPermissions(
callback: (permissions: PushNotificationPermissions) => void,
);
現在有効になっているプッシュ通知の権限を確認します。
パラメータ
名前 | 型 | 必須 | 説明 |
---|---|---|---|
コールバック | 関数 | はい | 以下を参照してください。 |
callback
はpermissions
オブジェクトで呼び出されます。
アラート:ブール値
バッジ:ブール値
サウンド:ブール値
getInitialNotification()
static getInitialNotification(): Promise<PushNotification | null>;
このメソッドはプロミスを返します。アプリがプッシュ通知によって起動された場合、このプロミスはタップされた通知のPushNotificationIOS
型のオブジェクトに解決されます。それ以外の場合、null
に解決されます。
getAuthorizationStatus()
static getAuthorizationStatus(): Promise<number>;
このメソッドは、現在の通知認証ステータスに解決されるプロミスを返します。可能な値についてはUNAuthorizationStatusを参照してください。
finish()
finish(result: string);
このメソッドは、application:didReceiveRemoteNotification:fetchCompletionHandler:
を介して受信したリモート通知に対して利用可能です。ただし、これはUNUserNotificationCenterDelegate
によって置き換えられており、application:didReceiveRemoteNotification:fetchCompletionHandler:
とUNUserNotificationCenterDelegate
の新しいハンドラーの両方が実装されている場合、呼び出されなくなります。
何らかの理由でまだapplication:didReceiveRemoteNotification:fetchCompletionHandler:
に依存している場合、iOS側でイベント処理を設定する必要があります。
- (void) application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler
{
[RCTPushNotificationManager didReceiveRemoteNotification:userInfo fetchCompletionHandler:handler];
}
JS側で通知の処理が完了したら、finish()
を呼び出してネイティブの完了ハンドラーを実行します。このブロックを呼び出すときは、操作の結果を最もよく表すフェッチ結果値を渡します。可能な値のリストについては、PushNotificationIOS.FetchResult
を参照してください。
application:didReceiveRemoteNotification:fetchCompletionHandler:
を使用している場合、このハンドラーを必ず呼び出し、できるだけ早く行う必要があります。詳細については公式ドキュメントを参照してください。
getMessage()
getMessage(): string | Object;
通知のメインメッセージ文字列を取得するためのgetAlert
のエイリアスです。
getSound()
getSound(): string;
aps
オブジェクトからサウンド文字列を取得します。これはローカル通知の場合はnull
になります。
getCategory()
getCategory(): string;
aps
オブジェクトからカテゴリ文字列を取得します。
getAlert()
getAlert(): string | Object;
aps
オブジェクトから通知のメインメッセージを取得します。エイリアスであるgetMessage()
も参照してください。
getContentAvailable()
getContentAvailable(): number;
aps
オブジェクトからcontent-available番号を取得します。
getBadgeCount()
getBadgeCount(): number;
aps
オブジェクトからバッジカウント番号を取得します。
getData()
getData(): Object;
通知のデータオブジェクトを取得します。
getThreadID()
getThreadID();
通知のスレッドIDを取得します。