プッシュ通知チュートリアル:Getting Started

アップデート注意:Chuck KrutsingerはこのチュートリアルをXcode11とSwift5用に更新しました。 Jack Wuはオリジナルのチュートリアルを書き、Keegan Rushは以前のアップデートを書きました。

iOSの開発者は、常に彼らの素晴らしいアプリを使用して人々を想像するのが大好きです。 しかし、もちろん、ユーザーはアプリを閉じて他の活動を実行する必要があることがあります。 洗濯物は自分自身を折ることはありません、あなたが知っています! 幸いにも、プッシュ通知は、開発者がユーザーに到達し、小さなタスクを実行することができます—ユーザーが積極的にアプリを使用していない場合でも! このチュートリアルでは、次の方法を学習します。

  • プッシュ通知を受信するようにアプリを設定します。
  • それらをユーザーに表示するか、他のタスクを実行します。

はじめに

プッシュ通知とは何ですか? これらは、アプリが実行されていない場合や電話がスリープ状態になっている場合でも、Apple Push Notification service(APNs)を介してアプリに送信されるメッセージです。 あなたは何のためにプッシュ通知を使用することができますか?

  • アラートと呼ばれる短いテキストメッセージを表示し、アプリの新しいものに注意を喚起します。
  • 通知音を再生します。
  • 新しいアイテムがあることをユーザーに知らせるために、アプリのアイコンにバッジ番号を設定します。
  • ユーザーがアプリを開かずに実行できるアクションを提供します。
  • メディアの添付ファイルを表示します。
  • アプリがバックグラウンドでタスクを実行できるように、サイレントになります。
  • 通知をスレッドにグループ化します。
  • 配信された通知を編集または削除します。
  • 通知を表示する前に、通知を変更するコードを実行します。
  • 通知用のカスタムの対話型UIを表示します。
  • そして、おそらくより多くの。

このチュートリアルでは、アプリでプッシュ通知の作成を開始するのに役立つこれらの使用法の多くを説明します。 このチュートリアルを完了するには、次のものが必要です。

  • Xcode11.4以降。 以前のバージョンのXcodeでは、simulatorを使用したプッシュ通知はサポートされていません。
  • プッシュ通知エンタイトルメントでアプリをコンパイルできるようにするには、Appleの開発者プログラムのメンバシップ。
注:チュートリアルの後半では、実際のデバイスに送信する際に実際のデバイスにプッシュ通知を送信する方法を学びます。プッシュ通知を送受信するには、次の3つの主なタスクを実行する必要があります。

  1. アプリを設定してApnに登録します。

プッシュ通知を送受信するには、次の3つの主なタスクを実行する必要があります。

  1. Apnを介してサーバーから特定のデバイスにプッシュ通知を送信します。 あなたはXcodeでそれをシミュレートします。
  2. プッシュ通知を受信して処理するには、アプリ内のコールバックを使用します。

プッシュ通知の送信は、アプリのサーバーコンポーネントの責任です。 多くのアプリは、プッシュ通知を送信するために第三者を使用しています。 他の人は、カスタムソリューションや人気のあるライブラリ(Houstonなど)を使用します。 あなただけのこのチュートリアルでは、プッシュメッセージの送信に触れるので、ここからどこに行くかをチェックしてくださ プッシュ通知のあなたの知識の上に構築するためのセクション。

開始するには、このチュートリアルの上部または下部にある材料のダウンロードボタンを使用してWenderCast starterプロジェクトをダウンロードします。 WenderCastは皆のgo-toの源のためのであるraywenderlich.com ポッドキャストやニュース速報。

スターターフォルダで、WenderCastを開きます。xcodeproj。 プロジェクトナビゲーターで「WenderCast」を選択し、「WenderCast」ターゲットを選択します。 一般的な&機能タブで、開発チームを選択します。 シミュレータでビルドして実行します。/p>

スタータープロジェクトをビルドして実行します

WenderCastはのリストを表示しますraywenderlich.com ポッドキャストとユーザーがそれらを再生することができます。 しかし、それは新しいポッドキャストが利用可能であり、ニュースタブが空であるときにユーザーに知らせることはできません! あなたはすぐにプッシュ通知の力でこれらの問題を修正します。

プッシュ通知の送受信

アプリの設定

プッシュ通知にとってセキュリティは非常に重要です。 アプリを介して他のユーザーにプッシュ通知を送信することは望ましくありません。 プッシュ通知を安全に受信するようにアプリを構成するには、いくつかのタスクを実行する必要があります。

プッシュ通知サービスの有効化

まず、バンドル識別子を変更する必要があります。 Xcodeで、プロジェクトナビゲーターでWenderCastを強調表示し、WenderCastターゲットを選択します。 [一般]を選択し、[バンドル識別子]を一意のものに変更して、Appleのプッシュ通知サーバーがこのアプリにプッシュを指示できるようにします。p>

バンドル識別子を変更します

次に、開発者アカウントでアプリIDを作成し、プッシュ通知エンタイトルメントを有効に Xcodeにはこれを行う簡単な方法があります:WenderCastターゲットを選択したまま、Signing&Capabilitiesタブをクリックし、+Capabilityボタンをクリックします。 フィルタフィールドに”push”と入力し、Enterキーを押します。

プッシュ通知機能を追加

プッシュ通知エンタイトルメントを追加した後、プロジェクトは次のようになります:p>

プッシュ通知エンタイトルメントを持つプロジェクト

注:問題が発生した場合は、Apple Developer Centerにアクセスしてください。 Appleが更新するのが大好きな新しい開発者ライセンスに同意し、再試行する必要がある場合があります。舞台裏では、これによりアプリIDが作成され、プッシュ通知の資格が追加されます。 これを確認するには、Apple Developer Centerにログインします。

プッシュ通知のエンタイトルメントを示すApp ID設定

今のところ設定する必要があるのはこれだけです。 あなたは、アプリの強化を開始する準備が整いました。

ユーザー通知の許可を求める

プッシュ通知を登録するには、二つのステップがあります。 まず、通知を表示するためのユーザーの権限を取得する必要があります。 その後、リモート(プッシュ)通知を受信するようにデバイスを登録できます。 すべてがうまくいけば、システムはあなたにこのデバイスへの「アドレス」と考えることができるデバイストークンをあなたに提供します。

WenderCastでは、アプリの起動直後にプッシュ通知を登録します。 最初にユーザー権限を要求します。

Appdelegateを開きます。swiftとファイルの先頭に次のものを追加します:次に、AppDelegateの最後に次のメソッドを追加します。

func registerForPushNotifications() { //1 UNUserNotificationCenter.current() //2 .requestAuthorization(options: ) { granted, _ in //3 print("Permission granted: \(granted)") }}

このコードは何をしていますか:

  1. UNUserNotificationCenterUNUserNotificationCenterAppDelegate

func registerForPushNotifications() { //1 UNUserNotificationCenter.current() //2 .requestAuthorization(options: ) { granted, _ in //3 print("Permission granted: \(granted)") }}

このコードは何をしていますか?

  1. UNUserNotificationCenterUNUserNotificationCenterUNUserNotificationCenterプッシュ通知を含む、アプリ内の通知関連のアクティビティ。
  2. あなたはrequestAuthorization(options:completionHandler:)optionsは、アプリで使用する通知の種類を示します。
  3. 完了ハンドラーは、承認が成功したかどうかを示すBoolを受け取ります。 この場合、結果を印刷するだけです。注:requestAuthorization(options:completionHandler:)UNAuthorizationOptions:
    • の任意の組み合わせを含めることができます。バッジ:アプリのアイコンの隅に数字を表示します。
    • 。サウンド:サウンドを再生します。
    • 。アラート:テキスト通知を表示します。
    • 。carPlay:CarPlayで通知を表示します。
    • 。仮:中断しない通知を投稿します。 このオプションのみを使用すると、ユーザーは許可の要求を取得しませんが、通知は通知センターにのみサイレントに表示されます。
    • 。p r o videsappnotificationsettings:アプリに通知設定用の独自のUIがあることを示します。
    • 。criticalAlert:ミュートスイッチを無視し、邪魔しないでください。 このオプションを使用するには、Appleからの特別な資格が必要です。

    application(_:didFinishLaunchingWithOptions:)return:P>

    registerForPushNotifications()

    registerForPushNotifications()ここで呼び出すと、アプリが起動されたときにいつでもプッシュ通知の登録を試みます。

    ビルドして実行します。 アプリが起動すると、通知を送信する許可を求めるプロンプトが表示されます。p>

    通知のプロンプト

    許可をタップし、poof! アプリは現在、通知を表示することができます。 すごい! しかし、ユーザーが権限を拒否した場合はどうなりますか? このメソッドをAppDelegate内に追加します。:p>

    func getNotificationSettings() { UNUserNotificationCenter.current().getNotificationSettings { settings in print("Notification settings: \(settings)") }}

    まず、必要な設定を指定しました。 このメソッドは、ユーザーが許可した設定を返します。 今のところ、あなたはそれらを印刷していますが、あなたはこれでより多くを行うためにすぐにここに戻って円

    registerForPushNotifications()requestAuthorization(options:completionHandler:)への呼び出しを次のように置き換えます。

    UNUserNotificationCenter.current() .requestAuthorization( options: ) { granted, _ in print("Permission granted: \(granted)") guard granted else { return } self?.getNotificationSettings() }

    完了ハンドラーにgetNotificationSettings()guardは、許可が付与されていない場合にこの呼び出しを回避します。

    APNsへの登録

    権限があるので、リモート通知に登録します!

    getNotificationSettings()printの下に次のものを追加します。

    guard settings.authorizationStatus == .authorized else { return }DispatchQueue.main.async { UIApplication.shared.registerForRemoteNotifications()}

    ここで、authorizationStatus.authorized.authorizedUIApplication.shared.registerForRemoteNotifications()を呼び出して、Appleプッシュ通知サービスへの登録を開始します。 あなたはメインスレッドでこれを呼び出す必要があります、またはあなたは実行時の警告を受け取るでしょう。このメソッドは、registerForRemoteNotifications()の呼び出しが成功するたびにiOSによって呼び出されます。 コードは不可解に見えるかもしれませんが、受信したdeviceTokenを取得して文字列に変換するだけです。 デバイストークンは、このプロセスの成果です。 これは、Apnによって提供され、一意にこの特定のデバイス上で、このアプリを識別しています。

    プッシュ通知を送信するとき、サーバーはトークンを”アドレス”として使用して正しいデバイスに配信します。 アプリでは、このトークンをサーバーに送信して保存し、後で通知を送信するために使用します。このメソッドは、registerForRemoteNotifications()が失敗した場合、iOSによって呼び出されます。 あなたは今のところエラーを印刷しています。

    これで終わりです! ビルドと実行。 シミュレータを使用しているため、Failed to registerエラーが表示されます。 あなたは今のところそれを無視することができます。 後で、実際のデバイスで実行すると、コンソール出力でトークンを受け取る必要があります。 ここに例があります:

    デバイストークンの例

    注:登録が失敗する理由はいくつかあります。 ほとんどの場合、アプリIDが適切に構成されていないためです。 エラーメッセージは、一般的に何が間違っているかのための良いヒントを提供します。

    シミュレートされたプッシュ通知の送信

    テキストエディタを使用して、firstという名前のファイルを作成します。Apnは、Xcodeのsimctlユーティリティに渡します。 次のJSONテキストを貼り付け、ファイルを保存します。

    { "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com" }}

    このJSONの構造については、次のセクションで説明します。 我慢しろバッタ

    シミュレータ上でアプリを再度ビルドして実行し、アプリを背景にするか、デバイスをロックします。 アプリは、フォアグラウンドでプッシュ通知を処理することはできません。

    simctlを使用するには、アプリを実行しているシミュレータのデバイス識別子を知る必要があります。 シミュレータで実行されているデバイスが1つしかない場合は、識別子の代わりにbootedを使用できます。 識別子を取得するには、XcodeでWindows▸Devices and Simulatorsを選択し、上部のSimulatorsタブを選択し、左側のリストから使用しているsimulatorを選択します。 あなたのマウスを使用して、識別子をコピーします。 ダイアログボックスを完全に表示するには、ダイアログボックスを広げる必要がある場合があります。

    Xcodeでデバイス識別子を見つける

    ターミナルアプリを開き、最初に保存したディレクトリに変更します。apn. 次に、bootまたはdevice_identifierの代わりにXcodeのデバイス識別子を使用して次のコマンドを入力します。xcrun simctl push device_identifier bundle_identifier first.apn。 Xcodeからコピーしたデバイス識別子にdevice_identifierbundle_identifierを最初にプロジェクトをセットアップしたときに使用したアプリ 例は次のとおりです。

    xcrun simctlを使用して端末からプッシュ通知を送信する

    コマンドを実行すると、プッシュ通知がシミュレータにp>

    プッシュ通知は、シミュレータに表示されます

    アプリを起動するには、通知をタップします。p>

    プッシュ通知から起動したアプリ

    それはクールではありませんか? :]

    基本的なプッシュ通知を見る

    プッシュ通知の処理に進む前に、送信した通知の本文を見てみましょう。

    { "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com" }}

    ペイロードは、辞書でもある少なくとも一つの項目、apsを含むJSON辞書です。 この例では、apsalertsoundlink_urlのフィールドが含まれています。 デバイスは、このプッシュ通知を受信すると、テキスト”ニュース速報!”と標準的な効果音を再生します。p>

    link_url実際にはカスタムフィールドです。 このようにペイロードにカスタムフィールドを追加すると、アプリケーションに配信されます。 あなたはまだアプリ内でそれを処理していないので、このキー/値のペアは現在何もしません。

    : 鋭い読者は、Appleのドキュメントでは、link_urlaps辞書エ あなたが内部に配置した場合、それはまだ動作しますが、我々は常にAppleのドキュメントに付着することをお勧めし、このチュートリアルに私たちの次の

    aps辞書に追加できる組み込みキーが8つあります(詳細については、公式のペイロードキーリファレンスを参照してください)。

    • alert: これは、前の例のように文字列、または辞書にすることができます。 辞書として、テキストをローカライズしたり、通知の他の側面を変更したりすることができます。
    • バッジ:これは、アプリアイコンの隅に表示される番号です。 バッジを削除するには、これを0に設定します。
    • sound:アプリ内にあるカスタム通知サウンドのファイルの名前。 これらは30秒より短くする必要があります。
    • thread-id:このキーを使用して通知をグループ化します。
    • カテゴリ:通知のカテゴリを定義し、通知のカスタムアクションを表示するために使用します。 あなたはすぐにこれを探索します。
    • content-available:このキーを1に設定すると、プッシュ通知がサイレントになります。 これについては、以下の”サイレントプッシュ通知”セクションで説明します。
    • mutable-content:このキーを1に設定すると、アプリは通知を表示する前に通知を変更できます。
    • target-content-id:これは、転送されたウィンドウの識別子です。これらの外では、ペイロードが4,096バイトを超えない限り、必要なだけカスタムデータを追加できます。

      これらのオプションを試して、あなたのシミュレータにプッシュ通知を送信するのに十分な楽しみを持っていたら、次のセクションに進みます!

      プッシュ通知の処理

      このセクションでは、アプリが通知を受信したとき、およびユーザーが通知をタップしたときにアクションを実行するプッシュ通知を受信したときに何が起こるかを理解する

      アプリがプッシュ通知を受信すると、iOSはUIApplicationDelegateのメソッドを呼び出します。

      通知が受信されたときのアプリの状態に応じて、通知を異なる方法で処理する必要があります。

      • アプリが実行されておらず、ユーザーがプッシュ通知をタップして起動した場合、iOSは通知をapplication(_:didFinishLaunchingWithOptions:)launchOptionsでアプリに渡します。
      • アプリがフォアグラウンドまたはバックグラウンドで実行されていた場合、システムはapplication(_:didReceiveRemoteNotification:fetchCompletionHandler:)を呼び出してアプリに通知します。 ユーザーがプッシュ通知をタップしてアプリを開くと、iOSはこのメソッドを再度呼び出す可能性があるため、UIを更新して関連情報を表示できます。

      最初のケースでは、wendercastはニュース項目を作成し、ニュースタブに直接開きます。 AppDelegateで。swiftは、returnステートメントの直前に、application(_:didFinishLaunchingWithOptions:)の最後に次のコードを追加します。

      // Check if launched from notificationlet notificationOption = launchOptions?// 1if let notification = notificationOption as? , let aps = notification as? { // 2 NewsItem.makeNewsItem(aps) // 3 (window?.rootViewController as? UITabBarController)?.selectedIndex = 1}

      これはあなたがやっていることです。

      1. UIApplication.LaunchOptionsKey.remoteNotificationlaunchOptionslaunchOptionslaunchOptions

        // Check if launched from notificationlet notificationOption = launchOptions?// 1if let notification = notificationOption as? , let aps = notification as? { // 2 NewsItem.makeNewsItem(aps) // 3 (window?.rootViewController as? UITabBarController)?.selectedIndex = 1}

        // Check if launched from notificationlet notificationOption = launchOptions?// 1if let notification = notificationOption as? , let aps = notification as? { // 2 NewsItem.makeNewsItem(aps) // 3 (window?.rootViewController as? UITabBarController)?.selectedIndex = 1}

        1. UIApplication.LaunchOptionsKey.remoteNotification. そうであれば、あなたのアプリは通知から起動されました。 これには、送信したプッシュ通知ペイロードが含まれます。
        2. apsNewsItemを作成します。
        3. タブコントローラの選択したタブをニュースセクションに変更します。これをテストするには、WenderCastのスキームを編集する必要があります。 まず、ビルドして実行して、シミュレータに最新のコードをインストールします。 次に、WenderCastスキームをクリックし、スキームの編集を選択します…:

          スキームを編集します

          サイドバーから実行を選択し、情報タブで実行可能ファイルが起動されるのを待つを選択します。

          実行可能ファイルが起動されるのを待つを選択します

          このオプションは、デバッガがインストール後に初めて起動されるのを待つようにします。

          ビルドして実行します。 インストールが完了したら、以前と同じようにxcrun simctlAppDelegate:

          func application( _ application: UIApplication, didReceiveRemoteNotification userInfo: , fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { guard let aps = userInfo as? else { completionHandler(.failed) return } NewsItem.makeNewsItem(aps)}

          これは、提供された

          func application( _ application: UIApplication, didReceiveRemoteNotification userInfo: , fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { guard let aps = userInfo as? else { completionHandler(.failed) return } NewsItem.makeNewsItem(aps)}

          これは、提供された

          func application( _ application: UIApplication, didReceiveRemoteNotification userInfo: , fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { guard let aps = userInfo as? else { completionHandler(.failed) return } NewsItem.makeNewsItem(aps)}

          これは、提供された

          func application( _ application: UIApplication, didReceiveRemoteNotification userInfo: , fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { guard let aps = userInfo as? else { completionHandler(.failed) return } NewsItem.makeNewsItem(aps)}

          これは、提供された

          func application( _ application: UIApplication, didReceiveRemoteNotification userInfo: , fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { guard let aps = userInfo as? else { completionHandler(.failed) return } NewsItem.makeNewsItem(aps)}

          これは、提供された

          func application( _ application: UIApplication, didReceiveRemoteNotification userInfo: , fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { guard let aps = userInfo as? else { completionHandler(.failed) return } NewsItem.makeNewsItem(aps)}

          これは、提供された

          func application( _ application: UIApplication, didReceiveRemoteNotification userInfo: , fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { guard let aps = userInfo as? else { completionHandler(.failed) return } NewsItem.makeNewsItem(aps)}

          userInfoオブジェクトを作成し、成功した場合は、そこから新しいNewsItemを作成します。iOSはアプリの実行中にこのメソッドを呼び出すため、スキームをアプリを自動的に起動するように変更してテストする必要があります。

          スキームエディタの”起動”で、”自動的に”を選択します。

          ビルドして実行します。 アプリをフォアグラウンドとニュースタブで実行したままにします。 別のニュースプッシュ通知を送信し、フィードに表示されるように見てください:

          ニュースタブに表示される第二のプッシュ通知

          それが起こるようにあなたのアプリは今魔法のようにニュース速報を受信することができます。 :]

          注:プッシュ通知が到着することは保証されていません。 ニュースの完全なリストを持つことは、このアプリのためにあまりにも重要ではないので、これは、WenderCastのためにOKです。 ただし、一般的には、コンテンツを配信する唯一の方法としてプッシュ通知を使用するべきではありません。 代わりに、プッシュ通知は、利用可能な新しいコンテンツがあることを通知し、アプリがソース(REST APIなど)からコンテンツをダウンロードできるようにす

          アクション可能な通知の操作

          アクション可能な通知を使用すると、通知自体にカスタムボタンを追加できます。 あなたはその場で”返信”または”お気に入り”を聞かせて電子メール通知やつぶやきにこれに気づいている可能性があります。

          カテゴリを使用して通知を登録するときに、アプリで実行可能な通知を定義できます。 通知の各カテゴリには、いくつかのプリセットカスタムアクションを持つことができます。

          登録すると、サーバーはプッシュ通知のカテゴリを設定できます。 対応するアクションは、受信したときにユーザーが利用できるようになります。

          WenderCastでは、Viewという名前のカスタムアクションを使用してニュースカテゴリを定義します。 このアクションを使用すると、ユーザーは選択した場合にアプリでニュース記事を表示できます。

          registerForPushNotifications()getNotificationSettings()

          // 1let viewAction = UNNotificationAction( identifier: Identifiers.viewAction, title: "View", options: )// 2let newsCategory = UNNotificationCategory( identifier: Identifiers.newsCategory, actions: , intentIdentifiers: , options: )// 3UNUserNotificationCenter.current().setNotificationCategories()

          これを:

          1. トリガーされたときにアプリをフォアグラウンドで開く、ボタンにタイトルビューを持つ新しい通知アクションを作成します。 アクションには一意の識別子があり、iOSは同じ通知に対する他のアクションを区別するために使用します。
          2. ビューアクションを含むニュースカテゴリを定義します。 これには、プッシュ通知がこのカテゴリに属していることを指定するためにペイロードに含める必要がある別個の識別子もあります。
          3. setNotificationCategoriesを呼び出して、新しいアクション可能な通知を登録します。

          アプリをビルドして実行し、新しい通知設定を登録します。

          アプリの背景と、xcrun simctlユーティリティを介して次のペイロードを送信します。

          { "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com", "category": "NEWS_CATEGORY" }}

          通知が表示されたら、ビューアクションを明らかにするためにそれをプルダウンします。

          ビューアクションを明らかにしたプッシュ通知

          ニース! ビューをタップするとWenderCastが起動しますが、まだエキサイティングなことは何もしません。 ニュース項目を表示するには、デリゲートでさらにイベント処理を行う必要があります。

          通知アクションの処理

          通知アクションがトリガーされるたびに、UNUserNotificationCenterそのデリゲートに通知します。 AppDelegateに戻ります。swift、ファイルの下部に次のクラス拡張子を追加します。

          // MARK: - UNUserNotificationCenterDelegateextension AppDelegate: UNUserNotificationCenterDelegate { func userNotificationCenter( _ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void ) { // 1 let userInfo = response.notification.request.content.userInfo // 2 if let aps = userInfo as? , let newsItem = NewsItem.makeNewsItem(aps) { (window?.rootViewController as? UITabBarController)?.selectedIndex = 1 // 3 if response.actionIdentifier == Identifiers.viewAction, let url = URL(string: newsItem.link) { let safari = SFSafariViewController(url: url) window?.rootViewController? .present(safari, animated: true, completion: nil) } } // 4 completionHandler() }}

          これは、カスタムアクションのためにアプリを開いたときに取得するコールバッ 多くのことが起こっているように見えるかもしれませんが、ここにはあまり新しいものはありません:

          1. GetuserInfo辞書。li>
          2. NewsItemapsNewsItemを作成し、ニュースタブに移動します。li>
          3. チェックactionIdentifier。 それが”View”アクションであり、リンクが有効なURLである場合、リンクはSFSafariViewControllerに表示されます。
          4. システムが渡す完了ハンドラを呼び出します。最後のビットが1つあります:デリゲートをUNUserNotificationCenterapplication(_:didFinishLaunchingWithOptions:):
            UNUserNotificationCenter.current().delegate = self

            ビルドして実行します。 アプリをもう一度閉じてから、次のペイロードで別のニュース通知を送信します。

            { "aps": { "alert": "New Posts!", "sound": "default", "link_url": "https://raywenderlich.com", "category": "NEWS_CATEGORY" }}

            通知をプルダウンしてビューアクションをタップすると、WendercastがSafari View controllerを起動した直後に表示されます。

            Safariビューで開かれた通知リンクURL

            おめでとう、実用的な通知を実装しました! さらにいくつかを送信し、それがどのように動作するかを確認するために、さまざまな方法で通知を開いてみてください。

            実際のデバイスへの送信

            実際のデバイスにプッシュ通知を送信したくない場合、またはまだサイレントプッシュ通知が必要ない場合は、こただし、実際のデバイスにプッシュ通知を送信してサイレントプッシュを試す方法を知りたい場合は、追加の設定を行う必要があります。 PushNotificationsユーティリティをダウンロードします。 このユーティリティアプリを使用して、実際のデバイスに通知を送信します。 インストールするには、”インストール方法”の指示に従ってください。 このユーティリティを実行するにはいくつかの設定を変更する必要があるため、アプリを開く方法に特に注意してください。

            Apple Developer Member Centerに移動し、ログインします。

            プッシュ通知を送信するには認証キーが必要です。 メンバーセンターで、証明書、識別子&プロファイルを選択し、左側のペインでキーを見つけます。 キーのタイトルの右側には+ボタンがあります。 新しいキーを作成するには、それをクリックします。

            キーにプッシュ通知キーなどの名前を付けます。 “キーサービス”で、”Apple Push Notifications service(APNs)”を選択します。

            プッシュ通知キーの例

            続行をクリックし、次の画面で登録して新しいキーを作成します。 「ダウンロード」をタップします。 ダウンロードしたファイルには、Authkey_4Svkwf966R.p8のような名前が付けられます。 このファイルを追跡する—あなたはあなたの通知を送信するためにそれが必要になります! ファイル名の4SVKWF966R部分はキー IDです。 これも必要になります。あなたが必要とする最後の部分はあなたのチームIDです。

            あなたが必要とする最後の部分はあなたのチームIDです。 会員センターの会員詳細ページに移動して検索します。あなたはそれをしました!

            あなたはそれをしました! あなたの新しいキーを使用すると、今あなたの最初のプッシュ通知を送信する準備が整いました! もう一つ必要なことがある

            実際のデバイスでアプリを実行し、デバッガーコンソールからデバイストークンをコピーして準備します。

            Pushnotificationsを起動し、次の手順を実行します。

            1. 認証で、トークンを選択します。
            2. P8を選択ボタンをクリックして、を選択します。前のセクションのp8ファイル。
            3. 関連するフィールドにキー IDとチームIDを入力します。
            4. 本文の下に、アプリのバンドルIDとデバイストークンを入力します。
            5. リクエスト本文を次のように変更します。
            { "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com" }}

            Pushnotificationsの送信ボタンをクリックします。

            プッシュ通知テスター

            プッシュ通知を受け取る必要があります。

            最初のプッシュ通知

            一般的な問題のトラブルシューテ同時に通知が、あなたはわずか数を受け取る、恐れることはありません! それは設計によるものです。 APNsは、各デバイスのQoS(Quality of Service)キューを維持します。 このキューのサイズは1であるため、複数の通知を送信すると、最後の通知が上書きされます。

          5. プッシュ通知サービスへの接続の問題:apnが使用するポートをブロックするファイアウォールがある可能性があります。 これらのポートのブロックを解除してください。

    サイレントプッシュ通知を使用する

    サイレントプッシュ通知は、バックグラウンドでいくつかのタスクを実行するために、アプリ WenderCastはこの機能を使用して、podcastリストを静かに更新できます。

    適切なサーバーコンポーネントを使用すると、これは非常に効率的です。 アプリは常にデータをポーリングする必要はありません。 新しいデータが利用可能なときはいつでも、サイレントプッシュ通知を送信できます。

    開始するには、WenderCastターゲットを再度選択します。 次に、署名&Capabilitiesタブをクリックし、バックグラウンドモード機能を追加します。 次に、リモート通知オプションをオンにします:

    バックグラウンドモード資格のリモート通知オプションを確認してください

    これらのプッシュ通知のいずれかを受信したときに、アプリはバックグラウンドでウェイクアップされます。AppDelegateで

    。swift、application(_:didReceiveRemoteNotification:fetchCompletionHandler:)NewsItem.makeNewsItem()への呼び出しを次のように置き換えます。

    // 1if aps as? Int == 1 { let podcastStore = PodcastStore.sharedStore // 2 podcastStore.refreshItems { didLoadNewItems in // 3 completionHandler(didLoadNewItems ? .newData : .noData) }} else { // 4 NewsItem.makeNewsItem(aps) completionHandler(.newData)}

    コードを調べます。

    1. content-availableが1に設定されているかどうかを確認します。 その場合、これはサイレント通知です。
    2. あなたは、非同期ネットワーク呼び出しであるポッドキャストリストを更新します。
    3. 更新が完了したら、完了ハンドラーを呼び出して、アプリが新しいデータをロードしたかどうかをシステムに知らせます。
    4. サイレント通知でない場合は、ニュースアイテムなので、ニュースアイテムを作成します。

    正直な結果で完了ハンドラを呼び出すようにしてください。 このシステムは、アプリがバックグラウンドで使用するバッテリーの消費量と時間を測定し、必要に応じてアプリを調整することができます。それがすべてです。

    それがすべてです。

    それがすべてです。

    それをテストするには、ビルドして実行し、アプリをフォアグラウンドにし、PushNotificationsユーティリティを介して次のペイロードをプッシュします:

    { "aps": { "content-available": 1 }}

    すべてがうまくいけば、新しいpodcastがリモートデータベースに追加されたばかりでない限り、何も起こらないはずです。 コードが期待どおりに実行されたことを確認するには、application(_:didReceiveRemoteNotification:fetchCompletionHandler:)にブレークポイントを設定し、通知が送信された後にステップスルーします。

    ここからどこに行くのですか?

    おめでとうございます! あなたは、このチュートリアルを完了し、WenderCastプッシュ通知で完全な機能を備えたアプリを作りました!

    完成したプロジェクトは、このチュートリアルの上部または下部にある材料のダウンロードボタンを使用してダウンロードできます。

    カスタムUiの構築や重要なアラートの送信など、プッシュ通知でできるすべてのことをより深く掘り下げたいですか? チュートリアルブックによって私たちのプッシュ通知はあなたにプッシュ通知の高度な機能をお教えします。

    別のリソースは、iOS用のプッシュ通知チュートリアルです:リッチプッシュ通知チュートリアル。

    プッシュ通知は、現代のアプリの重要な部分であるにもかかわらず、あなたが通知をやり過ぎた場合、ユーザーがあなたのアプリへの権限を拒否する しかし、思慮深いデザインで、プッシュ通知は、ユーザーが何度も何度もあなたのアプリに戻ってくる

    かわいい猫の通知ベル

    この猫は彼の夕食の準備ができていたことをプッシュ通知を受け取りました!私はあなたがこのプッシュ通知のチュートリアルを楽しんできた願っています。

    ご質問がある場合は、以下のディスカッションフォーラムにそれらを残すこと自由に感じます。h4>

    raywenderlich.com 週次

    このページは

    raywenderlich.com ニュースレターは、あなたがモバイル開発者として知っておく必要があるすべてのものに最新の滞在する最も簡単な方法です。

    私たちのチュートリアルやコースの毎週のダイジェストを取得し、ボーナスとして無料の詳細な電子メールコースを受け取ります!/div>

    平均評価

    4.9/5

    このコンテンツの評価を追加

    サインインして評価を追加

    17評価

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です