メインコンテンツへスキップ

🚧 PushNotificationIOS

非推奨。代わりにコミュニティパッケージを使用してください。

スケジューリングや権限など、アプリの通知を処理します。


はじめに

プッシュ通知を有効にするには、Appleとサーバーサイドシステムで通知を設定します

次に、プロジェクトでリモート通知を有効にします。これにより、必要な設定が自動的に有効になります。

registerイベントのサポートを有効にする

AppDelegate.mに以下を追加します。

objectivec
#import <React/RCTPushNotificationManager.h>

次に、リモート通知登録イベントを処理するために以下を実装します。

objectivec
- (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];
}

通知を処理する

AppDelegateUNUserNotificationCenterDelegateを実装する必要があります。

objectivec
#import <UserNotifications/UserNotifications.h>

@interface YourAppDelegate () <UNUserNotificationCenterDelegate>
@end

アプリ起動時にデリゲートを設定する

objectivec
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;

return YES;
}

フォアグラウンド通知

アプリがフォアグラウンドにあるときに届く通知を処理するには、userNotificationCenter:willPresentNotification:withCompletionHandler:を実装します。completionHandlerを使用して、通知をユーザーに表示するかどうかを決定し、それに応じてRCTPushNotificationManagerに通知します。

objectivec
// 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:も呼び出します。

objectivec
- (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()

tsx
static presentLocalNotification(details: PresentLocalNotificationDetails);

すぐに表示するためのローカル通知をスケジュールします。

パラメータ

名前必須説明
詳細オブジェクトはい以下を参照してください。

detailsは以下の情報を含むオブジェクトです

  • alertTitle:通知アラートのタイトルとして表示されるテキスト。
  • alertBody:通知アラートに表示されるメッセージ。
  • userInfo:追加の通知データを含むオブジェクト(オプション)。
  • category:アクション可能な通知に必要なこの通知のカテゴリ(オプション)。例:返信やいいねなどの追加アクションがある通知。
  • applicationIconBadgeNumber:アプリのアイコンバッジとして表示される数値。このプロパティのデフォルト値は0で、バッジが表示されないことを意味します(オプション)。
  • isSilent:trueの場合、通知は音なしで表示されます(オプション)。
  • soundName:通知が発火したときに再生される音(オプション)。
  • alertAction:非推奨。これはiOSのレガシーなUILocalNotificationに使用されていました。

scheduleLocalNotification()

tsx
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()

tsx
static cancelAllLocalNotifications();

スケジュールされているすべてのローカル通知をキャンセルします。


removeAllDeliveredNotifications()

tsx
static removeAllDeliveredNotifications();

通知センターから配信済みのすべての通知を削除します。


getDeliveredNotifications()

tsx
static getDeliveredNotifications(callback: (notifications: Object[]) => void);

現在通知センターに表示されているアプリの通知リストを提供します。

パラメータ

名前必須説明
コールバック関数はい配信された通知の配列を受け取る関数。

配信された通知は以下の情報を含むオブジェクトです

  • identifier:この通知の識別子。
  • title:この通知のタイトル。
  • body:この通知の本文。
  • category:この通知のカテゴリ(オプション)。
  • userInfo:追加の通知データを含むオブジェクト(オプション)。
  • thread-id:この通知のスレッド識別子(存在する場合)。

removeDeliveredNotifications()

tsx
static removeDeliveredNotifications(identifiers: string[]);

指定された通知を通知センターから削除します。

パラメータ

名前必須説明
識別子配列はい通知識別子の配列。

setApplicationIconBadgeNumber()

tsx
static setApplicationIconBadgeNumber(num: number);

ホーム画面のアプリアイコンのバッジ数を設定します。

パラメータ

名前必須説明
番号番号はいアプリアイコンのバッジ番号。

getApplicationIconBadgeNumber()

tsx
static getApplicationIconBadgeNumber(callback: (num: number) => void);

ホーム画面のアプリアイコンの現在のバッジ数を取得します。

パラメータ

名前必須説明
コールバック関数はい現在のバッジ番号を処理する関数。

cancelLocalNotifications()

tsx
static cancelLocalNotifications(userInfo: Object);

提供されたuserInfoのフィールドに一致するスケジュール済みのローカル通知をすべてキャンセルします。

パラメータ

名前必須説明
ユーザー情報オブジェクトいいえ

getScheduledLocalNotifications()

tsx
static getScheduledLocalNotifications(
callback: (notifications: ScheduleLocalNotificationDetails[]) => void,
);

現在スケジュールされているローカル通知のリストを取得します。

パラメータ

名前必須説明
コールバック関数はいローカル通知を記述するオブジェクトの配列を処理する関数。

addEventListener()

tsx
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()

tsx
static removeEventListener(
type: PushNotificationEventName,
);

イベントリスナーを削除します。メモリリークを防ぐため、componentWillUnmountでこれを行ってください。

パラメータ

名前必須説明
タイプ文字列はいイベントタイプ。オプションについてはaddEventListener()を参照してください。

requestPermissions()

tsx
static requestPermissions(permissions?: PushNotificationPermissions[]);

iOSに通知権限を要求し、ダイアログボックスでユーザーにプロンプトを表示します。デフォルトでは、すべての通知権限を要求しますが、要求する権限をオプションで指定できます。以下の権限がサポートされています。

  • アラート
  • バッジ

メソッドにマップが提供された場合、真の値を持つ権限のみが要求されます。

このメソッドは、ユーザーがリクエストを承認または拒否したとき、または権限が以前に拒否されたときに解決するプロミスを返します。プロミスは、リクエストが完了した後の権限の状態に解決されます。

パラメータ

名前必須説明
権限配列いいえアラート、バッジ、またはサウンド

abandonPermissions()

tsx
static abandonPermissions();

Apple Push Notification service経由で受信したすべてのリモート通知の登録を解除します。

このメソッドは、アプリの新しいバージョンがすべての種類のリモート通知のサポートを削除した場合など、まれな状況でのみ呼び出す必要があります。ユーザーは、設定アプリを通じて一時的にアプリがリモート通知を受信できないようにすることができます。このメソッドを通じて登録解除されたアプリは、いつでも再登録できます。


checkPermissions()

tsx
static checkPermissions(
callback: (permissions: PushNotificationPermissions) => void,
);

現在有効になっているプッシュ通知の権限を確認します。

パラメータ

名前必須説明
コールバック関数はい以下を参照してください。

callbackpermissionsオブジェクトで呼び出されます。

  • アラート:ブール値
  • バッジ:ブール値
  • サウンド:ブール値

getInitialNotification()

tsx
static getInitialNotification(): Promise<PushNotification | null>;

このメソッドはプロミスを返します。アプリがプッシュ通知によって起動された場合、このプロミスはタップされた通知のPushNotificationIOS型のオブジェクトに解決されます。それ以外の場合、nullに解決されます。


getAuthorizationStatus()

tsx
static getAuthorizationStatus(): Promise<number>;

このメソッドは、現在の通知認証ステータスに解決されるプロミスを返します。可能な値についてはUNAuthorizationStatusを参照してください。


finish()

tsx
finish(result: string);

このメソッドは、application:didReceiveRemoteNotification:fetchCompletionHandler:を介して受信したリモート通知に対して利用可能です。ただし、これはUNUserNotificationCenterDelegateによって置き換えられており、application:didReceiveRemoteNotification:fetchCompletionHandler:UNUserNotificationCenterDelegateの新しいハンドラーの両方が実装されている場合、呼び出されなくなります。

何らかの理由でまだapplication:didReceiveRemoteNotification:fetchCompletionHandler:に依存している場合、iOS側でイベント処理を設定する必要があります。

objectivec
- (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()

tsx
getMessage(): string | Object;

通知のメインメッセージ文字列を取得するためのgetAlertのエイリアスです。


getSound()

tsx
getSound(): string;

apsオブジェクトからサウンド文字列を取得します。これはローカル通知の場合はnullになります。


getCategory()

tsx
getCategory(): string;

apsオブジェクトからカテゴリ文字列を取得します。


getAlert()

tsx
getAlert(): string | Object;

apsオブジェクトから通知のメインメッセージを取得します。エイリアスであるgetMessage()も参照してください。


getContentAvailable()

tsx
getContentAvailable(): number;

apsオブジェクトからcontent-available番号を取得します。


getBadgeCount()

tsx
getBadgeCount(): number;

apsオブジェクトからバッジカウント番号を取得します。


getData()

tsx
getData(): Object;

通知のデータオブジェクトを取得します。


getThreadID()

tsx
getThreadID();

通知のスレッドIDを取得します。