SDK: Swift / Obj-C
前提条件
SDKをアプリに統合する前に、次の要件を満たす必要があります。
開発およびテストに使用するiOS 11以降のデバイス(iPhone、iPad、またはiPod Touch)、または以下の要件を満たすシミュレータ シミュレータでのテスト.
XCode 14以降(Swiftを使用する場合はSwift 5.7)がインストールされたMac OSデバイス。
iOS P12プッシュ証明書またはP8キー。まだお持ちでない場合は、以下に従ってください ドキュメント これらを生成してください。
次の機能が有効な、バンドルID用に登録されたApp ID
プッシュ通知およびApp Groups。詳細は以下を参照してください App IDを登録する.SDKキー:Pushlyプラットフォームの以下から取得します
ドメイン設定ページの概要>詳細>ドメイン情報セクション。
ステップ1:PushSDKフレームワークをインポートする
PushSDKフレームワークはSwiftとObjective-Cの両方に対応しています。
ルートプロジェクトを選択し、次にメインのアプリケーションターゲットを選択します >
一般クリック
+>その他を追加>パッケージの依存関係を追加以下のフレームワーク、ライブラリ、および埋め込みコンテンツ次のパッケージURLで検索します: https://github.com/pushly/push-sdk-ios
依存関係ルールを次のように設定します:
バージョン範囲および1.0.0<2.0.0クリック
パッケージを追加

以下を確認してください
Pushlyオプションがチェックされていることを確認し、クリックしますパッケージを追加

最後に、以下を追加します
Pushlyライブラリをメインアプリケーションターゲットに追加します

PushSDKフレームワークはSwiftとObjective-Cの両方に対応しています。
CocoaPodsリンク: https://cocoapods.org/pods/Pushly
Podfileに以下を追加します:
次に、以下を実行します pod install ターミナル内、またはCocoaPods.appから実行します。
ステップ2:通知サービス拡張機能を追加する
画像やカスタムアクションをサポートするリッチ通知を有効にするには、通知サービス拡張機能が必要です。
アプリのXCodeプロジェクト内で以下を選択します File > New > Target。以下を選択します Notification Service Extension iOSテンプレートタブ内で選択し、クリックします 次へ.

以下に「NotificationServiceExtension」と入力します 製品名 およびアプリ拡張機能のその他の設定詳細を入力してから、クリックします 完了 ただし アクティベートをクリックしないでください 後続のダイアログで。

クリック キャンセル サービス拡張機能をアクティベートするよう求めるダイアログでクリックし、モーダルを閉じた後でデプロイメントターゲットを設定できるようにします。

デプロイメントターゲットを以下に設定してください メインアプリケーションターゲットと同じ。特別な理由がない限り、以下を設定する必要があります デプロイメントターゲット をiOS 11にします。これはPushSDKフレームワークおよび最新のXCodeリリースでサポートされる最も古いiOSバージョンです。
次に、以下を追加します Pushly ライブラリを通知サービス拡張機能に追加します:
クリック + 以下の フレームワークとライブラリ を選択し、すでにインポート済みの以下を選択します Pushly ライブラリ。

次に、新しく作成した通知サービス拡張機能を開き、コードを以下に置き換えます:
次のような依存関係エラーは無視できます Module Pushly not found。これらは次回のビルド時に解決されます。
ステップ3:メインアプリケーションターゲットに機能を追加する
プッシュ通知機能は以下にのみ追加してください メインアプリケーションターゲット.
ルートプロジェクトを選択し、次にメインのアプリケーションターゲットを選択します > 署名と機能

以下をクリックします + 機能 を追加します プッシュ通知.
以下をクリックします + 機能 を追加します バックグラウンドモード.
以下を追加した後 バックグラウンドモード 機能を追加したら、以下を確認してください リモート通知 が有効になっていることを確認してください。

追加する プッシュ通知 により、以下が書き込まれます aps-environment エンタイトルメントがターゲットのエンタイトルメントファイルに書き込まれます — 開発 はデバッグビルド用、そして 本番 はリリース、TestFlight、App Storeビルド用です。Xcodeがこの値を管理するため、手動で設定しないでください。
エンタイトルメントがない場合、アプリはAPNsに登録できず、起動時に次のエラーで登録に失敗します:
このエラーは、以下のいずれかを意味します プッシュ通知 このターゲットに機能が存在しないか、プロビジョニングプロファイルがApp IDで機能を有効にする前のものです。機能がリストされていることを確認してから、Xcodeにプロファイルを再生成させてください。
ステップ4:共有App Groupを設定する
アプリとその通知サービス拡張機能は、以下として実行されます 2つの別個のプロセス。共有App Groupコンテナは両方がアクセスできる唯一のストレージであり、PushSDKは一方のプロセスで始まり他方で完了するすべての処理でこれに依存しています。
同じApp Groupを以下に宣言する必要があります 両方の ターゲット。一方にしか設定されていない場合、各プロセスは暗黙的にそれぞれのプライベートストレージにフォールバックし、共有は行われません。障害発生時にエラーは表示されません。
命名
SDKは設定から読み取るのではなくアプリのバンドルIDから識別子を導出するため、2つのターゲットで使用するコンテナについて不一致が生じることはありません。正確に次の形式にする必要があります:
バンドルIDが以下のアプリの場合 com.pushly.example、App Groupは以下になります group.com.pushly.example.push。通知サービス拡張機能では以下を使用します アプリの バンドルIDであり、拡張機能自身のものではありません。
メインアプリケーションターゲットに追加する
以下でメインアプリケーションターゲットを選択した状態で 署名と機能、以下をクリックします + 機能 を追加します App Groups.
以下をクリックします + 内にあるシンボル App Groups セクションで新しい名前付きコンテナを追加し、上記の名前を付けます。

メインアプリケーションターゲットで、新しく作成したApp Groupの横にあるチェックボックスをオンにします。
通知サービス拡張機能に追加する
ルートプロジェクトを選択し、次に以下を選択します NotificationServiceExtension > Signing & Capabilities
以下をクリックします + 機能 を追加します App Groups.
以下の横にあるチェックボックスをオンにします 同じ 次のApp Groupを NotificationServiceExtension.
機能を追加すると、以下が書き込まれます com.apple.security.application-groups が各ターゲットのエンタイトルメントファイルにグループ識別子とともに書き込まれます。両方のファイルに記載されている必要があります。
以下が 署名を自動的に管理 有効な場合、XcodeはApp Group識別子を作成し、以下を有効化します App Groups App IDの機能を有効にし、両方のターゲットのプロビジョニングプロファイルを再生成します。Xcodeが新しいApp Groupについてエラーを表示する場合、通常はまだプロビジョニング中です。完了後にリストを更新してください。
署名を手動で管理する場合、識別子を作成するだけでは不十分です。以下を有効にしてください App Groups をApp IDでも有効にしてから、両方のプロファイルを再生成してダウンロードしてください。
これがない場合に壊れるもの
SDK自体は動作し続けますが、プロセス間状態に依存する機能は動作しなくなります:
通知インプレッション — 拡張機能によって記録され、アプリによって完了されるため、コンテナが切断されるとそのすべてが失われます。
バッジ数 — 共有カウントが両方のプロセスから見えなくなります。
サービス拡張機能のアトリビューション — 拡張機能で処理された通知が正しく帰属されなくなります。
インストールごとのイベントシーケンスカウンターも、コンテナ内にあるプロセス間ロックによって保護されています。コンテナがない場合、SDKは最善の試みによるプロセス内インクリメントにフォールバックします。そのためイベントにはシーケンス値が引き続き含まれますが、2つのプロセス間で調整されなくなります。
設定の確認
SDKは起動ごとに1回、共有コンテナの状態を報告します。存在しない場合は、次のように表示されます:
正しく設定されている場合、同じチェックにより解決された識別子がデバッグレベルで報告されます:
ステップ5:SDKの初期化
まず以下をインポートします Pushly AppDelegate内のライブラリ
以下のコードをAppDelegateの次の箇所に追加します didFinishLaunchingWithOptions アプリケーションのメソッド。
以下を置き換えます REPLACE_WITH_SDK_KEY 以下の setConfiguration メソッド内を、プラットフォーム設定ページのSDKキーに置き換えます。
SwiftUIアプリ。 アプリが以下を使用してデリゲートを提供する場合 @UIApplicationDelegateAdaptor、以下を配置します setConfiguration 呼び出しをそのデリゲートの didFinishLaunchingWithOptions 上記とまったく同じ場所に配置してください。統合は通常どおり機能します。
デバッグ時には、SwiftUIが独自の以下をインストールすることに注意してください SwiftUI.AppDelegate を以下としてインストールします UIApplication.shared.delegate として設定し、コールバックを適応されたクラスに転送します。以下を確認しても UIApplication.shared.delegate そのため独自のデリゲート型は表示されません。これは想定どおりであり、統合が壊れていることを示すものではありません。
ステップ6:実装をテストする
物理iOSデバイス、または以下の要件を満たすシミュレータでアプリを実行します シミュレータでのテスト。正しくビルドされることを確認してください。
前のステップで追加したコードにより、アプリを開いた際にプッシュ許可ダイアログが表示されます。これは以下を使用してカスタマイズできます SDKメソッド を使用して、ダイアログを表示するタイミングを制御します。
ダイアログを承認したら、プラットフォームにログインして以下に移動します 通知 > 通知を作成 最初の通知を送信し、以下をターゲットにします ネイティブ:iOS チャネルで、デバイスに送信します。
シミュレータでのテスト
シミュレータはAPNsに登録して実際のリモート通知を受信できるため、サブスクリプションとエンドツーエンドの配信をテストできます。これには以下の すべて が必要です:
AppleシリコンまたはT2チップを搭載したMac
macOS 13以降
iOS 16以降のシミュレータ
Xcode 14以降
これらの条件を満たす場合、アプリは通常どおり登録され、iOSは正規のデバイストークンを発行します。物理デバイスとは次の2点が異なります:
トークンはサンドボックス専用です。 通知はAPNsサンドボックス環境経由で送信する必要があります。デバッグビルドには以下が含まれます
aps-environment: development。これにより送信がサンドボックスにルーティングされるため、自動的に処理されます。トークンはそのMac上のそのシミュレータに紐付けられます。 シミュレータと、それが実行されるMacハードウェアの組み合わせに固有のため、移植できません。また、シミュレータを消去すると新しいトークンが発行されます。
上記の要件のいずれかを満たさない場合(T2チップ非搭載のIntel Mac、macOS 12以前、またはiOS 16未満のシミュレータ)、登録はAPNsエラーで失敗します 3010 そしてSDKは以下をログに記録します:
これらの環境では、トークン登録は物理デバイスでテストする必要があります。
APNsを使用せずに通知を配信する
xcrun simctl push はAPNsの設定を一切行わずに、起動済みのシミュレータへ直接通知を配信します。上記の要件にかかわらず、どのシミュレータでも動作します。通知の次の項目を確認する最も簡単な方法です 表示とタップ処理.
ペイロードを以下の名前で保存します payload.apns:
次に、バンドルIDを自身のものに置き換えて、起動済みのシミュレータに配信します:
SDKがペイロードをPushly通知として認識して処理するには、ペイロードに以下すべてが含まれている必要があります:
aps.alert以下の形式の 辞書 — 単純な文字列のアラートは認識されませんpiid— 文字列notification_id— 整数landing_url— 文字列
これらのいずれかが欠けているか型が正しくない場合でも、iOSは通知を表示しますが、SDKはそれを無視し、SDKコールバックやイベントは発生しません。
以下で配信された通知 simctl push はAPNsやPushlyを通過しないため、プラットフォームで配信、インプレッション、クリックのレポートは生成されません。表示とタップ処理の確認にのみ使用してください。
次のステップ
SDKが正常に動作していることを確認したら、次のような追加のオプション機能を追加できます:
最終更新