iOSプッシュ通知の設定
新着メッセージや着信などのイベント着信時、ユーザーはプッシュ通知の受信を期待することが多い、 アプリがアクティブでない場合
In-App Voiceでは、VoIPプッシュ通知をアプリに統合することができます。 プッシュキット そして コールキット.私たちのブログの特徴は チュートリアル どのように VoIPプッシュ通知を統合する 完成サンプルプロジェクト.
チャットの場合、以下のように統合できます。 ユーザー通知 あなたの アプリでユーザーに表示する前に、Vonageから受け取るプッシュを 通知サービスアプリ拡張.
プッシュ証明書の作成
Appleプッシュ通知サービス(APNs)は、APNs間の接続を保護するために証明書ベースの認証を使用します、 Vonageサーバーとエンドデバイス間の接続を保護するために証明書ベースの認証を使用します。証明書を作成し、Vonageサーバーにアップロードする必要があります。
プッシュ通知機能の追加
プッシュ通知を使用するには、Xcodeプロジェクトにプッシュ通知機能を追加する必要があります。これを行うには ターゲットを選択し 署名と能力:

次にケイパビリティの追加を選択し プッシュ通知 そして 背景モード の能力がある:

バックグラウンドモード機能で ボイスオーバーIP そして バックグラウンド処理.Xcode が自動的にアプリの署名を管理している場合、バンドル識別子にリンクされたプロビジョニングプロファイルが更新され、機能が含まれるようになります。
次にケイパビリティの追加を選択し プッシュ通知 能力だ:

プッシュ証明書の生成
プッシュ証明書を生成するには、Appleのデベロッパーアカウントにログインし、以下のページにアクセスする必要があります。 証明書、識別子、プロファイル ページで新しい証明書を追加する:

選択する Appleプッシュ通知サービスのSSL化(サンドボックスと本番環境) と続ける。

Appleプッシュ通知サービスオプションが利用できない場合は、Appleデベロッパーアカウントの管理者に依頼する必要があります。 デベロッパーアカウントの管理者に依頼してください。
プッシュ通知を追加したいアプリのApp IDを選択し、次に進みます。もし アプリがリストにない場合は、アプリIDを作成する必要があります。Xcodeが自動的にあなたのアプリの署名を管理する場合は、あなたのためにこれを行うことができます。 で新しいApp IDを作成することができます。 証明書、識別子、プロファイル の下にある Identifiers*の下にあります。その際、必ずプッシュ通知機能を選択してください。
証明書署名要求(CSR)をアップロードするよう促されます。以下の手順に従ってください。
アップルのヘルプサイト
をクリックし、Mac上でCSRを作成してください。CSRがアップロードされると、証明書をダウンロードできるようになります。証明書をダブルクリックして
.cer ファイルを作成してKeychain Accessにインストールする。
プッシュ証明書をVonageサーバーで必要な形式で取得するには、それをエクスポートする必要があります。キーチェーンアクセスで
Apple Push Notificationサービス証明書をKeychain Accessで見つけ、右クリックしてエクスポートします。エクスポートの名前
applecert を選択する。 .p12 をフォーマットとして使用する:

APNへの接続の詳細については、以下を参照してください。 アップルの公式文書.
証明書のアップロード
API Dashboardを使用して証明書をVonageにアップロードします。アプリケーションを ダッシュボード次に、"プッシュ通知を有効にする "タブを開きます:

証明書をアップロードする .p12 フォーマットで入力し、必要に応じてパスワードを追加する。
ターミナルの使用
端末から証明書をアップロードすることもできます。ターミナルを使用してアップロードするには、Vonage Application ID が必要です。 ターミナルを使用してアップロードするには、Vonage管理JWTを生成する必要もあります。
Vonage admin JWTを生成するには、以下のVonage CLIコマンドを実行してください。を置き換えることを忘れないでください。 APPLICATION_ID ID付き
VonageアプリケーションのIDと PRIVATE_KEY を秘密鍵ファイルの名前に置き換えてください:
# A command with parameters
vonage jwt create `
--app-id='00000000-0000-0000-0000-000000000000' `
--private-key=./private.key
# Will produce a token
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MzYyODE5NDYsImp0aSI6IjBmZjcwZDNmLTAzN2EtNGY4MC04ODZjLWI3MmM3MmQyMWNmMiIsImlhdCI6MTczNjI4MTA0NiwiYXBwbGljYXRpb25faWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAifQ.gA7jClpqaZ2OoS0iri-zGCbda4jO7C0M8mka0EnSyjlds1EeY8fNoBEx3FTXHfkkzzrj0TskrWc_dcs1wuM8Kx55c5rLQ7taVpDAYopKSc_CeeOaad8S6aWnRkTUTNeduO4aIn-0CbyRTluBYsH1RBqYBQvobuQIDEwbFw8xBgx0UfREMMN6DAWknR57eiVXN9x_oD6CGQJ1yV3025nGboeMsP9YgX4Nwc-rE2r8c1ZGwCLO81x8i19Qil3Nwu5q1nzouyavQjIw00B_TZkushnI1ufdi_GNqk-h5q2HvGkg7Pj9bVkZHFdVTO8im03JYNyJmcV83vnpjOLuCFRzxQ
REM A command with parameters
vonage jwt create ^
--app-id='00000000-0000-0000-0000-000000000000' ^
--private-key=./private.key
REM Will produce a token
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MzYyODE5NDYsImp0aSI6IjBmZjcwZDNmLTAzN2EtNGY4MC04ODZjLWI3MmM3MmQyMWNmMiIsImlhdCI6MTczNjI4MTA0NiwiYXBwbGljYXRpb25faWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAifQ.gA7jClpqaZ2OoS0iri-zGCbda4jO7C0M8mka0EnSyjlds1EeY8fNoBEx3FTXHfkkzzrj0TskrWc_dcs1wuM8Kx55c5rLQ7taVpDAYopKSc_CeeOaad8S6aWnRkTUTNeduO4aIn-0CbyRTluBYsH1RBqYBQvobuQIDEwbFw8xBgx0UfREMMN6DAWknR57eiVXN9x_oD6CGQJ1yV3025nGboeMsP9YgX4Nwc-rE2r8c1ZGwCLO81x8i19Qil3Nwu5q1nzouyavQjIw00B_TZkushnI1ufdi_GNqk-h5q2HvGkg7Pj9bVkZHFdVTO8im03JYNyJmcV83vnpjOLuCFRzxQ
注 管理JWTは、サブクレームのないJWTである。JWTの生成方法の詳細は 認証ガイド.
次に、以下のCurlコマンドを実行します。 jwt, applecert.p12, app_id あなたの価値観で:
証明書をエクスポートする際にパスワードを使用した場合は、リクエストの本文にパスワードを次のように追加してください:
-d "{\"password\":\"$PASSWORD\"}" \
既存のトークンを更新する場合は、まず既存のトークンを削除します。 DELETE リクエストを同じ
リクエストを、同じ認証で同じエンドポイントに送る。
注: このエンドポイントでの検証はない。この 200 リターン・コードは、Vonageがデータを取得して保存したが、値が有効かどうかをチェックしていないことを意味する。
されたが、値が有効であることをチェックしていないことを意味する。
アプリケーションにプッシュ通知を統合する
証明書をVonageにアップロードしたら、以下の手順でアプリにVoIPプッシュを統合します:
1.リンク CallKit フレームワーク
VoIPプッシュ通知を使用する場合は、CallKitフレームワークを使用する必要があります。これをプロジェクトにリンクするには フレームワーク、ライブラリ、組み込みコンテンツ 一般的な

2.セットアップ PushKit
あなたの AppDelegateを追加する。 voipRegistry 財産である:
let voipRegistry = PKPushRegistry(queue: nil)
そしてそれをセットアップする:
func registerForVoIPPushes() {
self.voipRegistry.delegate = self
self.voipRegistry.desiredPushTypes = [PKPushType.voIP]
}
上記の関数を didFinishLaunchingWithOptions AppDelegate 関数である。
3.VoIPプッシュ通知に登録する
を実施する。 PKPushRegistryDelegate didUpdate デリゲート関数を使用する。 PKPushCredentials オブジェクトが含まれます。このオブジェクトには、このデバイスを登録するために必要なトークンが含まれています。
注: トークンを登録する前に、まずセッションの作成に成功していることを確認してください。
電話 registerDevicePushToken にある。 VGVoiceClient セッションを作成した後、プッシュ認証トークンを渡します:
var isSandbox = false
#if DEBUG
isSandbox = true
#endif
client.registerVoipToken(token, isSandbox: isSandbox) { error, deviceId in
if error == nil {
// Push token registered
} else {
// Push token registration error
}
}
これにより、トークンはこのデバイスとセッションを作成したユーザーにバインドされます。例えば、ユーザー Aliceの着信があるたびに、次のようなメッセージが表示される。 Alice Vonageは以下のデバイストークンを検索します。 Alice. 'isSandbox' を使用すると、Appleサンドボックスのプッシュ通知サーバーを使用するかどうかを制御できます。あなたは deviceId をクリックして、プッシュ用デバイスの登録を解除する。
4.VoIP プッシュ通知の着信を処理する
デバイスがVoIPプッシュ通知の着信を受信すると PKPushRegistryDelegate デリゲート関数 didReceiveIncomingPushWith が呼び出されます。ここで、このプッシュがVonageからのものかどうかをチェックし、処理する必要がある:
func isVonagePush(with userInfo: [AnyHashable : Any]) -> Bool {
VGVoiceClient.vonagePushType(userInfo) == .unknown ? false : true
}
func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType, completion: @escaping () -> Void) {
if isVonagePush(with: payload.dictionaryPayload) {
if let invite = client.processCallInvitePushData(payload) {
// Report new call to CallKit
} else {
// Report failed call to CallKit
}
}
}
着信プッシュを処理するには、着信先のアクティブなセッションが必要です。同時に新しいセッションを作成し、次のように呼び出すことを推奨する。 processCallInvitePushData ただし、ユーザーが通話中でない場合に限る。
いつ processCallInvitePushData が正常に完了すると、次のような電話がかかってきます。 didReceiveInviteForCall デリゲート関数です。ここでは以下のことができる。 通報する をCallKitに追加しました。
func voiceClient(_ client: VGVoiceClient, didReceiveInviteForCall callId: String, from caller: String, withChannelType type: String) {
let activeCall = UUID(uuidString: callID)
let update = CXCallUpdate()
update.localizedCallerName = caller
// provider is an instance of CXProvider
provider.reportNewIncomingCall(with: activeCall!, update: update) { error in
if error == nil {
completion()
}
}
}
注: 電話する前に answer または reject コールインビテーションのために、以前に作成したセッションが正常に作成されていることを確認してください。
証明書をVonageにアップロードしたら、以下の手順でアプリにプッシュを統合します:
- プッシュ通知の許可を求める
func registerForPushNotificationsIfNeeded() {
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { [weak self] granted, _ in
print("Permission granted: \(granted)")
if granted {
self?.getNotificationSettings()
}
}
}
func getNotificationSettings() {
UNUserNotificationCenter.current().getNotificationSettings { settings in
print("Notification settings: \(settings)")
guard settings.authorizationStatus == .authorized else { return }
Task { @MainActor in
UIApplication.shared.registerForRemoteNotifications()
}
}
}
に電話する。 registerForPushNotificationsIfNeeded 関数の didFinishLaunchingWithOptions AppDelegate 関数である。
- プッシュ通知の登録
を追加する。 didRegisterForRemoteNotificationsWithDeviceToken 関数をあなたの AppDelegate クラスを呼び出します。これは、デバイス・トークンを与えるためにシステムから呼び出されます。呼び出し registerDeviceToken にある。 VGChatClient セッションを作成した後、デバイストークンを渡す:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
var isSandbox = false
#if DEBUG
isSandbox = true
#endif
client.registerDeviceToken(deviceToken, isSandbox: isSandbox) { error, deviceId in
...
}
}
これにより、トークンはこのデバイスとセッションを作成したユーザーにバインドされます。例えば、ユーザー Aliceに対する着信メッセージがあるたびに Alice Vonageは以下のデバイストークンを検索します。 Alice. 'isSandbox' を使用すると、Appleサンドボックスのプッシュ通知サーバーを使用するかどうかを制御できます。あなたは deviceId をクリックして、プッシュ用デバイスの登録を解除する。
結論
このガイドでは、プッシュ通知を設定する方法を見てきました。
声だ:
- CallKitの詳細については、以下をご覧ください。 developer.apple.com.
- チュートリアルについては VoIPプッシュ通知ブログ.
- を見る 完成サンプルプロジェクト をGitHubで公開している。
チャットだ:
- ユーザー通知についての詳細は developer.apple.com.