iOS
Send Push Notifications
Cloud CodeとSwiftでiOSプッシュ通知を設定する方法
24 分
swiftを使用したクラウドコードによるプッシュ通知の送信 はじめに このセクションでは、back4appを通じてcloud codeを使用してプッシュ通知を送信する方法を説明します。 これがどのように見えるかです いつでも、このチュートリアルで構築された完全なプロジェクトにアクセスできます。 githubリポジトリ です。 このクイックスタートを完了するには、次のものが必要です: xcode back4appで作成されたアプリ。 「 新しいparseアプリのチュートリアル 」に従って、back4appでparseアプリを作成する方法を学びます。 back4appに接続されたiosアプリ。 注意: 「 parse sdk (swift)のインストールチュートリアル 」に従って、back4appに接続されたxcodeプロジェクトを作成します。 「 back4appのダッシュボードを通じたプッシュ通知のチュートリアル 」を介して設定されたiosアプリ。 ios 10以降を実行しているiosデバイス、iphoneまたはipad。 有料のapple開発者アカウント。 1 プッシュを受信するためにiosアプリを設定する プッシュ通知に登録されたデバイスにインストールされたすべてのparseアプリケーションには、関連付けられた インストール インストール オブジェクトがあります。 インストール インストール オブジェクトは、プッシュ通知をターゲットにするために必要なすべてのデータを保存する場所です。たとえば、アプリ内で、ユーザーの一人が興味を持っているチームを保存して、そのパフォーマンスに関する更新を送信することができます。 インストール インストール オブジェクトを保存することは、プッシュ関連のアプリオープンイベントを追跡するためにも必要です。 通知を送信する最も簡単な方法は、チャネルを使用することです。これにより、プッシュ通知を送信するためのパブリッシャー サブスクライバーモデルを使用できます。デバイスは1つ以上のチャネルにサブスクライブすることから始まり、その後、これらのサブスクライバーに通知を送信できます。特定の インストール インストール がサブスクライブしているチャネルは、 チャネル チャネル のフィールドに保存されます。 インストール インストール オブジェクトの。 その後、クエリに基づいて特定のユーザーまたはユーザーグループにターゲットを絞ったプッシュ通知を送信する方法について説明します。 今後、すべてのステップを完了したと仮定します。 back4app push notifications via dashboard チュートリアル , このチュートリアルで構築された ios プロジェクトを使用している場合でも、私たちの github リポジトリ 基本的なプッシュ通知が機能しているはずで、管理コンソールを介してプッシュを送信できる必要があります。 2 デバイスをニュースチャンネルに登録する まず、インストールオブジェクトにチャンネルを追加します。これは、私たちのアプリデリゲートファイルのメソッドを変更することで行います。 createinstallationonparse createinstallationonparse を開きます。プロジェクトの appdelegate m ファイル appdelegate m ファイル , そして、あなたの createinstallationonparse createinstallationonparse のバージョンが以下のコードと同じであることを確認してください。 appdelegate swift 1 func createinstallationonparse(devicetokendata\ data){ 2 if let installation = pfinstallation current(){ 3 installation setdevicetokenfrom(devicetokendata) 4 installation setobject(\["news"], forkey "channels") 5 installation saveinbackground { 6 (success bool, error error?) in 7 if (success) { 8 print("you have successfully saved your push installation to back4app!") 9 } else { 10 if let myerror = error{ 11 print("error saving parse installation \\(myerror localizeddescription)") 12 }else{ 13 print("uknown error") 14 } 15 } 16 } 17 } 18 } 新しいコード行を追加しています ‘installation setobject(\[“news”], forkey “channels”)’ これはインストールオブジェクトのチャンネル配列を「ニュース」と呼ばれる1つのチャンネルを含むように設定します。 これにより、クラウドコードを介して「 ニュース ニュース 」というチャンネルに登録しているすべての人にメッセージを送信できるようになります。 2\ 実際のデバイスでアプリを実行してテストします シミュレーターでは実行できません。 インストール記録を更新するには実際のプッシュトークンが必要なので、物理デバイスが必須です。 3\ 正常に実行された後、ダッシュボードの インストール インストール セクションに以下の画像に似たものが表示されるはずです。 back4appのウェブサイト にアクセスして、インストールテーブルを確認することができます。 チャンネル列の下に ニュース ニュース , あなたが ニュース ニュース プッシュチャンネルに登録されていることを示しています。 3 クラウドコードを作成する 始める方法について詳しく知るには、 cloud code を見てください。 ios向けcloud codeチュートリアル cloud codeを入れるための js js ファイルを作成します。back4appがあなたのクラウドコードを保存する場所を知るために、 main js main js と呼ぶ必要があります。 cloud関数を定義し、 parse cloud define parse cloud define を使用してプッシュ通知を呼び出します。関数内で、 parse push send parse push send を呼び出して、‘ news news ’チャンネルにプッシュを送信します。 この操作では、 マスターキー を使用する必要があります。 以下のコードはこれらのステップを実行します parse server 3 x // main js 1 parse cloud define("pushsample", (request) => { 2 3 return parse push send({ 4 channels \["news"], 5 data { 6 title "hello from the cloud code", 7 alert "back4app rocks!", 8 } 9 }, { usemasterkey true }); 10 }); parse server 2 x //main js 1 parse cloud define("pushsample", function (request, response) { 2 parse push send({ 3 channels \["news"], 4 data { 5 title "hello from the cloud code", 6 alert "back4app rocks!", 7 } 8 }, { 9 success function () { 10 // push was successful 11 response success("push sent"); 12 console log("success push sent"); 13 }, 14 error function (error) { 15 // push was unsucessful 16 response error("error with push " + error); 17 console log("error " + error); 18 }, 19 usemasterkey true 20 }); 21 }) 4 クラウドコードにアップロード アプリに移動して back4app ウェブサイト をクリックします ダッシュボード ダッシュボード 「 クラウドコード クラウドコード 」を見つけて、 関数とウェブホスティング 関数とウェブホスティング をクリックします。次のようになります 3\ 新しいファイルをアップロードまたは作成します(現在の main js main js ファイルをブラウザ上で直接編集することもできます)。次に、 デプロイ デプロイ をクリックします。次のように 5 iosアプリからcloud codeを呼び出す 今、アプリからこのクラウド関数を呼び出すためのコードを書きます。 このタスクを完了するには、シミュレーターと物理デバイスの両方が必要です。 シミュレーターで実行されているアプリからクラウド関数を呼び出し、物理デバイスにプッシュが表示されるのを確認します。 物理デバイスは、プッシュを確認するためにロック画面が表示された状態で閉じておく必要があります。 プッシュを受信したときに、プッシュを送信しているアプリの中にいると、画面にプッシュは表示されません。 2\ プロジェクトの viewcontroller swift viewcontroller swift ファイルを開きます。ファイルの先頭に「import parse」と追加して、ビューコントローラーにparseを含める必要があります。 viewcontroller swift 3\ 次に、 viewcontroller swift viewcontroller swift ファイルで、viewdidappearメソッドからアラート関数を呼び出します。このアラートは、デバイスにプッシュを送信するcloud codeをトリガーすることを可能にします。次のコードブロックを 後 に含めることを忘れないでください。 viewdidload viewdidload 関数の。 viewcontroller swift viewcontroller swift 1 override func viewdidappear( animated bool) { 2 asktosendpushnotifications() 3 } 4 5 func asktosendpushnotifications() { 6 let alertview = uialertcontroller(title "send a push to the news channel", message nil, preferredstyle alert) 7 let okaction = uialertaction(title "ok", style default) { (action\ uialertaction) in 8 self sendpushnotifications() 9 } 10 alertview\ addaction(okaction) 11 let cancelaction = uialertaction(title "cancel", style cancel) { (action\ uialertaction) in 12 } 13 alertview\ addaction(cancelaction) 14 if let presenter = alertview\ popoverpresentationcontroller { 15 presenter sourceview = self view 16 presenter sourcerect = self view\ bounds 17 } 18 self present(alertview, animated true, completion\ nil) 19 } 20 21 func sendpushnotifications() { 22 let cloudparams \[anyhashable\ string] = \[ ] 23 pfcloud callfunction(inbackground "pushsample", withparameters cloudparams, block { 24 (result any?, error error?) > void in 25 if error != nil { 26 if let descrip = error? localizeddescription{ 27 print(descrip) 28 } 29 }else{ 30 print(result as! string) 31 } 32 }) 33 } 4\ シミュレーターでアプリを実行し、アラートがプッシュを送信するように求めるときに、「ok」を押します。物理デバイスのロック画面にプッシュが表示されるはずです。 6 rest apiからcloud codeを呼び出す rest apiは、cloud関数が動作しているかどうかをテストするための迅速かつ簡単な方法を提供します。 以下のコードをターミナルまたはコマンドプロンプトで使用してください コマンドラインの使い方を知るには、以下をクリックしてください linux , macos または windows プッシュ通知をテストするには、デバイスが閉じている間にrestコードを使用してください。 7 ユーザーオブジェクトを使用してターゲットプッシュ通知を送信する 今後は、基本的なサインアップとサインイン機能がすでに構築された別のiosプロジェクトを使用します。このiosプロジェクトを使用して、ユーザーがログインしているかどうかを検出し、ログインしている場合は、クエリ用のオブジェクトidへのリンクとともにインストールを保存する方法をお見せします。このセクションのチュートリアルで構築された完全なiosプロジェクトは、私たちの githubリポジトリ からダウンロードできますが、back4appダッシュボードからプッシュを送信する方法を説明した前のチュートリアルのすべてのセットアップを行う必要があります。 このセクションのチュートリアルで構築された完全なiosプロジェクトは、私たちの githubリポジトリ からダウンロードできますが、back4appダッシュボードからプッシュを送信する方法を説明した前のチュートリアルのすべてのセットアップを行う必要があります。 新しいバージョンのアプリをセットアップし、アプリにサインアップまたはログインします。まず、私たちの githubリポジトリ から動作するテンプレートをダウンロードしてください。このアプリのすべての構築手順を説明するのではなく、クラウドコードの設定とその動作理由に焦点を当てます。この新しいアプリを開いたら、必ず自分のアプリの資格情報をappdelegate swiftファイルに入力してください。 appdelegate swift 1 func application( application uiapplication, didfinishlaunchingwithoptions launchoptions \[uiapplicationlaunchoptionskey any]?) > bool { 2 let configuration = parseclientconfiguration { 3 $0 applicationid = "paste your application id here" 4 $0 clientkey = "paste your client id here" 5 $0 server = "https //parseapi back4app com" 6 } 7 parse initialize(with configuration) 8 return true 9 } 2\ このアプリは前のアプリといくつかの大きな違いがあります。ログインしているアプリ用のセクションと、ログインしていないアプリ用のセクションの2つのセクションがあります。次の大きな変更は、appdelegate swiftファイルの関数「createinstallationonparse」です。ユーザーのオブジェクトidをインストールオブジェクトの一部として保存する1行を追加しました。これにより、どのユーザーがどのインストールオブジェクトに関連付けられているかを知ることができ、プッシュ通知のターゲットを個別に設定できます。 appdelegate swift 1 func createinstallationonparse(devicetokendata\ data){ 2 if let installation = pfinstallation current(){ 3 installation setdevicetokenfrom(devicetokendata) 4 installation setobject(\["news"], forkey "channels") 5 if let userid = pfuser current()? objectid { 6 installation setobject(userid, forkey "userid") 7 } 8 installation saveinbackground { 9 (success bool, error error?) in 10 if (success) { 11 print("you have successfully saved your push installation to back4app!") 12 } else { 13 if let myerror = error{ 14 print("error saving parse installation \\(myerror localizeddescription)") 15 }else{ 16 print("uknown error") 17 } 18 } 19 } 20 } 21 } 3\ 現在、ユーザーのオブジェクトidをインストールオブジェクトの一部として保存しているため、ユーザーがログインするまで新しいプッシュトークンを要求したくありません。appdelegate swiftファイルの関数「application didfinishlaunchingwithoptions」から直接トークンを要求したくはなく、代わりにloggedinviewcontrollerの関数「viewdidappear」から呼び出したいと考えています。「viewdidappear」では、appdelegateの関数を呼び出してappleからプッシュ通知トークンへのアクセスを要求します。このセクションはログインしているときにのみ表示できるため、インストールオブジェクトを作成するときにユーザーがログインしていると仮定できますが、安全のために「if let文」を使用してparse currentuser()オブジェクトをアンラップし、オブジェクトidを取得しました。 loggedinviewcontroller swift 1 override func viewdidappear( animated bool) { 2 appdelegate? startpushnotifications() 3 } appdelegate swift 1 if let userid = pfuser current()? objectid { 2 installation setobject(userid, forkey "userid") 3 } 4\ さて、サインアップまたはログインします。あなたの物理デバイス (iphoneまたはipad) でアプリを起動します。以下の画像が表示されるはずです。新しいユーザーを作成するにはサインアップするか、すでにアプリでユーザーを作成している場合はサインインしてください。 このように見えます 現在、loggedinviewcontrollerが表示されているはずです。このように見えるはずです。 自分にプッシュを送ろうとすると、まだ機能しません。なぜなら、これらのメソッドをクラウドコードに追加していないからです。次にそれを行います。 8 ターゲットプッシュメソッドをクラウドコードに追加する 以前に作成した main js main js ファイルを開き、ユーザーidでインストールをターゲットにするための以下の関数を追加します。 この操作には マスターキー を使用する必要があります。 parse server 3 x // main js 1 parse cloud define('sendpushtoyourself', (request) => { 2 let userid = request user id; 3 4 let query = new parse query(parse installation); 5 query equalto("userid", userid); 6 query descending("updatedat"); 7 return parse push send({ 8 where query, 9 data { 10 title "hello from the cloud code", 11 alert "back4app rocks! single message!", 12 } 13 }, { usemasterkey true }); 14 }); 15 16 parse cloud define('sendpushtoallusers', (request) => { 17 let currentuser = request user; 18 let userids = \[currentuser id]; 19 20 let query = new parse query(parse installation); 21 query containedin('userid', userids); 22 return parse push send({ 23 where query, 24 data { 25 title "hello from the cloud code", 26 alert "back4app rocks! group message!", 27 } 28 }, { usemasterkey true }); 29 }); parse server 2 x //main js 1 parse cloud define('sendpushtoyourself', function (request, response) { 2 var currentuser = request user; 3 var userid = currentuser id; 4 5 var query = new parse query("installation"); 6 query equalto("userid", userid); 7 query descending("updatedat"); 8 parse push send({ 9 where query, 10 data { 11 title "hello from the cloud code", 12 alert "back4app rocks! single message!", 13 } 14 }, { 15 usemasterkey true, 16 success function () { 17 response success("success sending a single push!"); 18 }, 19 error function (error) { 20 response error(error code + " " + error description); 21 } 22 }); 23 }); 24 25 parse cloud define('sendpushtoallusers', function (request, response) { 26 var currentuser = request user; 27 var userids = \[currentuser id]; 28 29 var query = new parse query(parse installation); 30 query containedin('userid', userids); 31 parse push send({ 32 where query, 33 data { 34 title "hello from the cloud code", 35 alert "back4app rocks! group message!", 36 } 37 }, { 38 usemasterkey true, 39 success function () { 40 response success('success sending a group push!'); 41 }, 42 error function (message) { 43 response error(error code + " " + error description); 44 } 45 }); 46 }); 9 クラウドコードにアップロード アプリに移動して back4appのウェブサイト をクリックします ダッシュボード ダッシュボード 「 クラウドコード クラウドコード 」を見つけて、 関数とウェブホスティング 関数とウェブホスティング をクリックします。これは次のようになります 3\ 新しいファイルをアップロードまたは作成します(現在の main js main js ファイルをブラウザ上で直接編集することもできます)。次に、 デプロイ デプロイ をクリックします。これは次のようになります 10 自分にターゲットプッシュ通知を送信できることをテストする 物理デバイスのロック画面をオンにしたまま、シミュレーターからアプリを開いてください。 ‘自分にプッシュを送信’ボタンと‘グループの人々にプッシュを送信’ボタンを押すことで、両方のプッシュ機能が動作していることをテストできます。デバイスのロック画面にプッシュが表示されるはずです。 最終的な考え これで、ユーザーのチャンネルやユーザーのオブジェクトid、またはユーザーのオブジェクトidを取得することに関わる他のクエリに基づいてプッシュを送信する方法をしっかり理解できたはずです。 ユーザーのオブジェクトidを保存するには、それをプッシュインストールに追加し、ユーザーがログインしているときのみプッシュトークンを要求する必要があることを忘れないでください。クエリを介してプッシュを送信する際は、デフォルトで100件の結果に制限されており、一部のユーザーは複数のインストールオブジェクトを持っている可能性があることに注意してください。 また、100件を超えるインストールオブジェクトの配列にプッシュを送信することは推奨されません。そうすると、一部のプッシュが送信されない可能性があります。大規模なグループの人々を扱う場合は、チャンネルを使用するか、繰り返しリクエストでプッシュを送信する方が良いです。 完了! この段階で、back4appを通じてcloud codeを使用してプッシュ通知を送信できます!おめでとうございます!