Cloud CodeとSwiftでiOSプッシュ通知を設定する方法
24 分
swiftを使用したクラウドコードによるプッシュ通知の送信 はじめに このセクションでは、back4appを通じてcloud codeを使用してプッシュ通知を送信する方法を説明します。 これがどのように見えるかです いつでも、このチュートリアルで構築された完全なプロジェクトにアクセスできます。 githubリポジトリ https //github com/templates back4app/ios install sdk です。 このクイックスタートを完了するには、次のものが必要です: xcode https //developer apple com/xcode/ back4appで作成されたアプリ。 「 新しいparseアプリのチュートリアル https //www back4app com/docs/get started/new parse app 」に従って、back4appでparseアプリを作成する方法を学びます。 back4appに接続されたiosアプリ。 注意: 「 parse sdk (swift)のインストールチュートリアル https //www back4app com/docs/ios/parse swift sdk 」に従って、back4appに接続されたxcodeプロジェクトを作成します。 「 back4appのダッシュボードを通じたプッシュ通知のチュートリアル https //www back4app com/docs/ios/push notifications/best ios push notification service 」を介して設定されたiosアプリ。 ios 10以降を実行しているiosデバイス、iphoneまたはipad。 有料のapple開発者アカウント。 1 プッシュを受信するためにiosアプリを設定する プッシュ通知に登録されたデバイスにインストールされたすべてのparseアプリケーションには、関連付けられた \<font color="#2166ae">インストール\</font> オブジェクトがあります。 \<font color="#2166ae">インストール\</font> オブジェクトは、プッシュ通知をターゲットにするために必要なすべてのデータを保存する場所です。たとえば、アプリ内で、ユーザーの一人が興味を持っているチームを保存して、そのパフォーマンスに関する更新を送信することができます。 \<font color="#2166ae">インストール\</font> オブジェクトを保存することは、プッシュ関連のアプリオープンイベントを追跡するためにも必要です。 通知を送信する最も簡単な方法は、チャネルを使用することです。これにより、プッシュ通知を送信するためのパブリッシャー サブスクライバーモデルを使用できます。デバイスは1つ以上のチャネルにサブスクライブすることから始まり、その後、これらのサブスクライバーに通知を送信できます。特定の \<font color="#2166ae">インストール\</font> がサブスクライブしているチャネルは、 \<font color="#2166ae">チャネル\</font> のフィールドに保存されます。 \<font color="#2166ae">インストール\</font> オブジェクトの。 その後、クエリに基づいて特定のユーザーまたはユーザーグループにターゲットを絞ったプッシュ通知を送信する方法について説明します。 今後、すべてのステップを完了したと仮定します。 back4app push notifications via dashboard チュートリアル https //www back4app com/docs/ios/push notifications/best ios push notification service , このチュートリアルで構築された ios プロジェクトを使用している場合でも、私たちの github リポジトリ https //github com/mpc20001/ios objc push cloud code 基本的なプッシュ通知が機能しているはずで、管理コンソールを介してプッシュを送信できる必要があります。 2 デバイスをニュースチャンネルに登録する まず、インストールオブジェクトにチャンネルを追加します。これは、私たちのアプリデリゲートファイルのメソッドを変更することで行います。 \<font color="#2166ae">createinstallationonparse\</font> を開きます。プロジェクトの \<font color="#2166ae">appdelegate m ファイル\</font> , そして、あなたの \<font color="#2166ae">createinstallationonparse\</font> のバージョンが以下のコードと同じであることを確認してください。 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つのチャンネルを含むように設定します。 これにより、クラウドコードを介して「 \<font color="#2166ae">ニュース\</font> 」というチャンネルに登録しているすべての人にメッセージを送信できるようになります。 2\ 実際のデバイスでアプリを実行してテストします シミュレーターでは実行できません。 インストール記録を更新するには実際のプッシュトークンが必要なので、物理デバイスが必須です。 3\ 正常に実行された後、ダッシュボードの \<font color="#2166ae">インストール\</font> セクションに以下の画像に似たものが表示されるはずです。 back4appのウェブサイト https //www back4app com/ にアクセスして、インストールテーブルを確認することができます。 チャンネル列の下に \<font color="#2166ae">ニュース\</font> , あなたが \<font color="#2166ae">ニュース\</font> プッシュチャンネルに登録されていることを示しています。 3 クラウドコードを作成する 始める方法について詳しく知るには、 cloud code を見てください。 ios向けcloud codeチュートリアル https //www back4app com/docs cloud codeを入れるための \<font color="#2166ae"> js\</font> ファイルを作成します。back4appがあなたのクラウドコードを保存する場所を知るために、 \<font color="#2166ae">main js\</font> と呼ぶ必要があります。 cloud関数を定義し、 \<font color="#2166ae">parse cloud define\</font> を使用してプッシュ通知を呼び出します。関数内で、 \<font color="#2166ae">parse push send\</font> を呼び出して、‘ \<font color="#2166ae">news\</font> ’チャンネルにプッシュを送信します。 この操作では、 マスターキー を使用する必要があります。 以下のコードはこれらのステップを実行します 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 ウェブサイト https //www back4app com/ をクリックします \<font color="#2166ae">ダッシュボード\</font> 「 \<font color="#2166ae">クラウドコード\</font> 」を見つけて、 \<font color="#2166ae">関数とウェブホスティング\</font> をクリックします。次のようになります 3\ 新しいファイルをアップロードまたは作成します(現在の \<font color="#2166ae">main js\</font> ファイルをブラウザ上で直接編集することもできます)。次に、 \<font color="#2166ae">デプロイ\</font> をクリックします。次のように 5 iosアプリからcloud codeを呼び出す 今、アプリからこのクラウド関数を呼び出すためのコードを書きます。 このタスクを完了するには、シミュレーターと物理デバイスの両方が必要です。 シミュレーターで実行されているアプリからクラウド関数を呼び出し、物理デバイスにプッシュが表示されるのを確認します。 物理デバイスは、プッシュを確認するためにロック画面が表示された状態で閉じておく必要があります。 プッシュを受信したときに、プッシュを送信しているアプリの中にいると、画面にプッシュは表示されません。 2\ プロジェクトの \<font color="#2166ae">viewcontroller swift\</font> ファイルを開きます。ファイルの先頭に「import parse」と追加して、ビューコントローラーにparseを含める必要があります。 viewcontroller swift https //github com/mpc20001/ios swift push cloud code/blob/master/addingparsesdk/viewcontroller swift#l10 1 import uikit 2 import parse 3\ 次に、 \<font color="#2166ae">viewcontroller swift\</font> ファイルで、viewdidappearメソッドからアラート関数を呼び出します。このアラートは、デバイスにプッシュを送信するcloud codeをトリガーすることを可能にします。次のコードブロックを 後 に含めることを忘れないでください。 \<font color="#2166ae">viewdidload\</font> 関数の。 \<font color="#2166ae">\</font> 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 https //www digitalocean com/community/tutorials/an introduction to the linux terminal , macos https //blog teamtreehouse com/introduction to the mac os x command line または windows https //www bleepingcomputer com/tutorials/windows command prompt introduction/ curl x post h "x parse application id your app id here" \\ h "x parse rest api key your rest api key here" \\ h "content type application/json" \\ d ‘{ // ここに関数のパラメータをjson形式で入れてください }’ \\ https //parseapi back4app com/functions/pushsample プッシュ通知をテストするには、デバイスが閉じている間にrestコードを使用してください。 7 ユーザーオブジェクトを使用してターゲットプッシュ通知を送信する 今後は、基本的なサインアップとサインイン機能がすでに構築された別のiosプロジェクトを使用します。このiosプロジェクトを使用して、ユーザーがログインしているかどうかを検出し、ログインしている場合は、クエリ用のオブジェクトidへのリンクとともにインストールを保存する方法をお見せします。このセクションのチュートリアルで構築された完全なiosプロジェクトは、私たちの githubリポジトリ https //github com/mpc20001/ios objc targeted push cloud code からダウンロードできますが、back4appダッシュボードからプッシュを送信する方法を説明した前のチュートリアルのすべてのセットアップを行う必要があります。 このセクションのチュートリアルで構築された完全なiosプロジェクトは、私たちの githubリポジトリ https //github com/mpc20001/ios swift targeted push cloud code からダウンロードできますが、back4appダッシュボードからプッシュを送信する方法を説明した前のチュートリアルのすべてのセットアップを行う必要があります。 新しいバージョンのアプリをセットアップし、アプリにサインアップまたはログインします。まず、私たちの githubリポジトリ https //github com/mpc20001/ios swift targeted push cloud code から動作するテンプレートをダウンロードしてください。このアプリのすべての構築手順を説明するのではなく、クラウドコードの設定とその動作理由に焦点を当てます。この新しいアプリを開いたら、必ず自分のアプリの資格情報を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 ターゲットプッシュメソッドをクラウドコードに追加する 以前に作成した \<font color="#2166ae">main js\</font> ファイルを開き、ユーザー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のウェブサイト https //www back4app com/ をクリックします \<font color="#2166ae">ダッシュボード\</font> 「 \<font color="#2166ae">クラウドコード\</font> 」を見つけて、 \<font color="#2166ae">関数とウェブホスティング\</font> をクリックします。これは次のようになります 3\ 新しいファイルをアップロードまたは作成します(現在の \<font color="#2166ae">main js\</font> ファイルをブラウザ上で直接編集することもできます)。次に、 \<font color="#2166ae">デプロイ\</font> をクリックします。これは次のようになります 10 自分にターゲットプッシュ通知を送信できることをテストする 物理デバイスのロック画面をオンにしたまま、シミュレーターからアプリを開いてください。 ‘自分にプッシュを送信’ボタンと‘グループの人々にプッシュを送信’ボタンを押すことで、両方のプッシュ機能が動作していることをテストできます。デバイスのロック画面にプッシュが表示されるはずです。 最終的な考え これで、ユーザーのチャンネルやユーザーのオブジェクトid、またはユーザーのオブジェクトidを取得することに関わる他のクエリに基づいてプッシュを送信する方法をしっかり理解できたはずです。 ユーザーのオブジェクトidを保存するには、それをプッシュインストールに追加し、ユーザーがログインしているときのみプッシュトークンを要求する必要があることを忘れないでください。クエリを介してプッシュを送信する際は、デフォルトで100件の結果に制限されており、一部のユーザーは複数のインストールオブジェクトを持っている可能性があることに注意してください。 また、100件を超えるインストールオブジェクトの配列にプッシュを送信することは推奨されません。そうすると、一部のプッシュが送信されない可能性があります。大規模なグループの人々を扱う場合は、チャンネルを使用するか、繰り返しリクエストでプッシュを送信する方が良いです。 完了! この段階で、back4appを通じてcloud codeを使用してプッシュ通知を送信できます!おめでとうございます!