iOS
Send Push Notifications
Отправка push уведомлений в iOS с помощью Cloud Code и Swift
27 мин
отправка push уведомлений с использованием облачного кода на swift введение в этом разделе объясняется, как вы можете отправлять push уведомления с помощью облачного кода через back4app вот как это будет выглядеть в любое время вы можете получить доступ к полному проекту, созданному с помощью этого руководства, в нашем репозитории github чтобы завершить этот быстрый старт, вам нужно xcode приложение, созданное на back4app следуйте за учебником по созданию нового приложения parse чтобы узнать, как создать приложение parse на back4app ios приложение, подключенное к back4app примечание следуйте за учебником по установке parse sdk (swift) чтобы создать проект xcode, подключенный к back4app ios приложение, настроенное через учебник по push уведомлениям back4app через панель управления устройство ios, iphone или ipad, работающие на ios 10 или новее платная учетная запись разработчика apple 1 настройте ваше ios приложение для получения push уведомлений каждое приложение parse, установленное на устройстве, зарегистрированном для получения push уведомлений, имеет связанный объект установки объект установки объект установки объект установки это место, где вы храните все данные, необходимые для нацеливания push уведомлений например, в вашем приложении вы можете хранить, какие команды интересуют одного из ваших пользователей, чтобы отправлять обновления о их производительности сохранение объект установки объект установки также необходимо для отслеживания событий открытия приложения, связанных с push самый простой способ начать отправку уведомлений использовать каналы это позволяет использовать модель издатель подписчик для отправки пуш уведомлений устройства начинают с подписки на один или несколько каналов, и уведомления могут быть позже отправлены этим подписчикам каналы, на которые подписан данный установка установка хранятся в поле каналы каналы объекта установка установка после этого мы рассмотрим отправку целевых пуш уведомлений одному пользователю или группе пользователей на основе запроса в дальнейшем мы будем предполагать, что вы завершили все шаги учебника по push уведомлениям back4app через панель управления , даже если вы используете проект ios, созданный с помощью этого учебника, который доступен в нашем репозитории github у вас должны работать базовые push уведомления, а также вы должны иметь возможность отправлять уведомления через консоль администратора 2 подпишите ваше устройство на канал новостей сначала мы добавим канал к вашему объекту установки мы сделаем это, изменив метод createinstallationonparse createinstallationonparse в файле app delegate откройте файл 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”)’ которая установит массив каналов объекта установки, чтобы он содержал один канал под названием ‘news’ это позволит нам отправлять сообщения всем, кто подписан на канал под названием news news через облачный код 2\ протестируйте его, запустив ваше приложение на физическом устройстве вы не можете запустить это на симуляторе вам нужен фактический токен для отправки уведомлений, чтобы обновить запись вашей установки, поэтому физическое устройство обязательно 3\ после успешного запуска вы должны увидеть что то похожее на изображение ниже в разделе установка установка вашего панели управления вы можете проверить это, перейдя на панель управления вашего приложения на сайте back4app и затем проверив таблицу установок в столбце каналов вы должны увидеть новости новости , что показывает, что вы теперь подписаны на новости новости канал уведомлений 3 создайте свой облачный код чтобы узнать больше о том, как начать работу с cloud code посмотрите на учебник по cloud code для ios создайте js js файл, чтобы поместить в него ваш cloud code вы должны назвать его main js main js для того, чтобы back4app знал, что это место, где вы храните ваш облачный код определите облачную функцию, используя parse cloud define parse cloud define , чтобы вызвать push уведомление внутри функции мы вызовем parse push send parse push send для отправки уведомлений в канал ‘ news news ’ необходимо использовать master key в этой операции следующий код выполняет эти шаги 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 загрузка в cloud code перейдите в ваше приложение на сайт back4app и нажмите на панель управления панель управления найдите cloud code cloud code и нажмите на функции и веб хостинг функции и веб хостинг это выглядит так 3\ загрузите или создайте новый файл (вы также можете редактировать текущий main js main js файл прямо в браузере) затем нажмите на развернуть развернуть как показано здесь 5 вызов облачного кода из вашего ios приложения теперь мы собираемся написать код для вызова этой облачной функции из вашего приложения вам понадобятся как симулятор, так и физическое устройство для выполнения этой задачи вы вызовете облачную функцию из вашего приложения, работающего в симуляторе, и увидите уведомление на вашем физическом устройстве ваше физическое устройство должно быть заблокировано с включенным экраном блокировки, чтобы увидеть уведомление уведомление не появится на экране, если вы находитесь в приложении, которое его отправляет, когда вы получаете уведомление 2\ откройте файл вашего проекта viewcontroller swift viewcontroller swift нам нужно включить parse в контроллер представления, добавив следующий код ‘import 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\ запустите ваше приложение в симуляторе, и когда появится оповещение с просьбой отправить пуш, нажмите “ок” на вашем физическом устройстве вы должны увидеть пуш на экране блокировки, как это 6 вызов cloud code из rest api rest api предоставляет быстрый и простой способ проверить, работает ли ваша cloud функция просто используйте код ниже в вашем терминале или командной строке нажмите, чтобы узнать больше о том, как начать работу с командной строкой в linux , macos или windows чтобы протестировать push уведомления, просто используйте rest код, пока устройство закрыто 7 отправка целевых push уведомлений с использованием объекта пользователя в дальнейшем мы будем использовать другой проект ios, в котором уже реализованы базовые функции регистрации и входа мы собираемся использовать этот проект ios, чтобы показать вам, как определить, вошел ли пользователь в систему, и если да, сохранить их установку с ссылкой на их идентификатор объекта для запроса в облачном коде вы можете скачать полный проект ios, созданный с помощью учебника этого раздела, в нашем репозитории github , но вам все равно придется выполнить всю настройку из предыдущего учебника, который объясняет, как отправлять push уведомления из панели управления back4app вы можете скачать полный проект ios, созданный с помощью учебника этого раздела, в нашем репозитории github , но вам все равно придется выполнить всю настройку из предыдущего учебника, который объясняет, как отправлять push уведомления из панели управления 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 разделов один для входа в ваше приложение и один раздел, когда вы не вошли в ваше приложение следующее большое изменение это функция ‘createinstallationonparse’ в файле appdelegate swift мы добавили 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\ поскольку мы теперь храним идентификатор объекта пользователя как часть объекта установки, мы не хотим запрашивать новый токен push, пока пользователь не войдет в систему мы не хотим запрашивать токен напрямую из функции ‘application didfinishlaunchingwithoptions’ файла appdelegate swift, вместо этого мы хотим вызвать его из функции ‘viewdidappear’ контроллера loggedinviewcontroller в ‘viewdidappear’ мы вызываем функцию в appdelegate, чтобы запросить доступ к токену push уведомлений от apple поскольку вы можете просмотреть этот раздел только после входа в систему, мы можем предположить, что пользователь вошел в систему, когда мы создаем объект установки, но для безопасности мы использовали оператор ‘if let’ для извлечения объекта parse currentuser() и получения идентификатора объекта 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 добавьте целевые методы push в облачный код откройте ваш main js main js файл, который вы создали ранее, и добавьте следующие функции для целевой установки по идентификатору пользователя необходимо использовать мастер ключ в этой операции 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 загрузка в cloud code перейдите в ваше приложение на сайте back4app и нажмите на панель управления панель управления найдите cloud code cloud code и нажмите на функции и веб хостинг функции и веб хостинг это выглядит так 3\ загрузите или создайте новый файл (вы также можете редактировать текущий main js main js файл прямо в браузере) затем нажмите на развернуть развернуть как показано здесь 10 проверьте, что вы можете отправлять целевые push уведомления себе откройте свое приложение в симуляторе, оставив ваше физическое устройство закрытым с включенным экраном блокировки вы можете проверить, что обе функции push работают, нажав кнопку «отправить push себе» и кнопку «отправить push группе людей» вы должны увидеть, как push уведомления появляются на экране блокировки вашего устройства заключительные мысли теперь вы должны твердо понимать, как отправлять push уведомления на основе канала пользователя или идентификатора объекта пользователя или любого другого запроса, который включает получение идентификатора объекта пользователя помните, что для хранения идентификатора объекта пользователя вы должны добавить его в установку push и запрашивать токен push только тогда, когда пользователь вошел в систему при отправке push через запрос имейте в виду, что по умолчанию это ограничено 100 результатами, и у некоторых пользователей может быть более одного объекта установки также не рекомендуется отправлять push уведомления массиву объектов установки, которые превышают 100 результатов это может привести к тому, что некоторые push уведомления не будут отправлены если вы имеете дело с большими группами людей, лучше использовать каналы или отправлять push уведомления в повторных запросах готово! на этом этапе вы можете отправлять push уведомления, используя cloud code через back4app! поздравляем!