iOS
Send Push Notifications
使用云代码与Objective-C在iOS项目中发送推送通知指南
22 分
使用云代码和objective c发送推送通知 介绍 本节解释了如何通过back4app使用云代码发送推送通知。 这将是它的样子 随时,您都可以在我们的 https //github com/templates back4app/ios install sdk 中访问本教程构建的完整项目。 要完成此快速入门,您需要: https //developer apple com/xcode/ 在 back4app 创建的应用程序。 请遵循 https //www back4app com/docs/get started/new parse app 以了解如何在 back4app 创建 parse 应用程序。 一个连接到 back4app 的 ios 应用程序。 注意: 请遵循 https //www back4app com/docs/ios/parse swift sdk 以创建一个连接到 back4app 的 xcode 项目。 通过 https //www back4app com/docs/ios/push notifications/best ios push notification service 设置的 ios 应用程序。 一台运行 ios 10 或更高版本的 ios 设备,iphone 或 ipad。 一个付费的 apple 开发者账户。 1 设置您的 ios 应用以接收推送 每个安装在注册了推送通知的设备上的 parse 应用都有一个关联的 安装 安装 对象。 安装 安装 对象是您存储所有需要的推送通知目标数据的地方。例如,在您的应用中,您可以存储您的用户感兴趣的团队,以便发送有关他们表现的更新。保存 安装 安装 对象也是跟踪与推送相关的应用打开事件所必需的。 开始发送通知的最简单方法是使用频道。这允许您使用发布 订阅模型来发送推送。设备首先订阅一个或多个频道,通知可以稍后发送给这些订阅者。给定的 安装 安装 订阅的频道存储在 频道 频道 字段的 安装 安装 对象中。 之后,我们将讨论如何根据查询向单个用户或一组用户发送定向推送通知。 接下来,我们将假设您已完成所有步骤的 https //www back4app com/docs/ios/push notifications/best ios push notification service , 即使您使用的是我们在 https //github com/mpc20001/ios objc push cloud code 您应该已经能够基本使用推送通知,并且能够通过管理控制台发送推送。 2 订阅您的设备到新闻频道 首先,我们将向您的安装对象添加一个频道。我们将通过修改 app delegate 文件中的 createinstallationonparse 方法来实现这一点。打开您项目的 appdelegate m 文件,并确保您版本的 didregisterforremotenotificationswithdevicetoken 与下面的代码相同。我们添加了一行新代码 ‘\[currentinstallation setobject @\[@”news1”] forkey @”channels”];’ 这将设置安装对象的频道数组,包含一个名为 ‘news’ 的频道。这将允许我们通过云代码向所有订阅名为 ‘news’ 的频道的用户发送消息。 appdelegate m \ (void)application (uiapplication )application didregisterforremotenotificationswithdevicetoken (nsdata )devicetoken { // 将 devicetoken 存储在当前安装中并保存到 parse pfinstallation currentinstallation = \[pfinstallation currentinstallation]; \[currentinstallation setdevicetokenfromdata\ devicetoken]; \[currentinstallation setobject @\[@"news1"] forkey @"channels"]; \[currentinstallation saveinbackgroundwithblock ^(bool succeeded, nserror error) { if (!error) { nslog(@"安装保存成功!!!"); }else{ nslog(@"安装保存失败 %@",error debugdescription); } }]; } 2\ 通过在物理设备上运行您的应用程序进行测试。您不能在模拟器上运行此程序。您需要一个实际的推送令牌来更新您的安装记录,因此必须使用物理设备。成功运行后,您应该在仪表板的安装部分看到这个。您可以通过访问 https //www back4app com/ 并点击您应用的仪表板,然后检查安装表。在频道列下,您应该看到‘news’,这表明您现在已订阅新闻推送频道。 3 创建您的云代码 要了解有关如何开始使用 云代码 的信息,请查看 https //www back4app com/docs 创建一个 js js 文件以放置您的云代码。您需要将其命名为 main js main js 以便 back4app 知道这是您存储云代码的地方。 定义一个云函数,使用 parse cloud define parse cloud define , 来调用推送通知。在函数内部,我们将调用 parse push send parse push send 来发送推送到‘新闻’频道。 在此操作中需要使用 主密钥 。 以下代码执行这些步骤: 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 上传到云代码 前往您的应用程序, https //www back4app com/ 并点击 仪表板 仪表板 找到 云代码 云代码 并点击 函数与网络托管 函数与网络托管 。它看起来像这样 3\ 上传或创建一个新文件(您也可以直接在浏览器中编辑当前的 main js main js 文件)。然后,点击 部署 部署 ,如图所示 5 从您的 ios 应用程序调用云代码 接下来,我们将编写一些代码,从您的应用程序调用这个云函数。您需要模拟器和一台物理设备来完成此任务。您将从在模拟器中运行的应用程序调用云函数,并且您将看到推送出现在您的物理设备上。您的物理设备实际上应该关闭并锁定屏幕,以便看到推送。如果您在接收推送时处于发送推送的应用程序中,则屏幕上不会出现推送。 打开您项目的 viewcontroller m 文件。我们需要通过在文件顶部添加以下代码 ‘#import \<parse/parse h>’ 来在视图控制器中包含 parse。 viewcontroller \#import "viewcontroller h" \#import \<parse/parse h> 3\ 接下来在 viewcontroller m 文件中,我们将在 viewdidappear 方法中调用一个警报函数。该警报将允许您触发云代码,从而向您的设备发送推送。确保在 viewdidload 函数之后包含以下代码块。 viewcontroller m https //github com/mpc20001/ios objc push cloud code/blob/master/addingparsesdkobjc/appdelegate m#l29 l62 \ (void)viewdidappear (bool)animated { \[self asktosendpushnotifications]; } \ (void)asktosendpushnotifications { uialertcontroller alert = \[uialertcontroller alertcontrollerwithtitle @"发送推送到新闻频道" message\ nil preferredstyle\ uialertcontrollerstylealert]; uipopoverpresentationcontroller poppresenter = \[alert popoverpresentationcontroller]; poppresenter sourceview = self view; uialertaction okbutton = \[uialertaction actionwithtitle @"确定" style\ uialertactionstyledefault handler ^(uialertaction action) { \[self sendpushnotifications]; }]; \[alert addaction\ okbutton]; uialertaction cancelbutton = \[uialertaction actionwithtitle @"取消" style\ uialertactionstylecancel handler ^(uialertaction action) { }]; \[alert addaction\ cancelbutton]; poppresenter sourcerect = self view\ frame; alert modalpresentationstyle = uimodalpresentationpopover; \[self presentviewcontroller\ alert animated\ yes completion\ nil]; } \ (void)sendpushnotifications { \[pfcloud callfunctioninbackground @"pushsample" withparameters @{} block ^(id object, nserror error) { if (!error) { nslog(@"推送已发送"); }else{ nslog(@"发送推送时出错 %@",error localizeddescription); } }]; } 4\ 在模拟器中运行您的应用程序,当询问是否发送推送的警报弹出时,点击“确定”。在您的物理设备上,您应该在锁屏上看到推送。 6 从rest api调用云代码 rest api 提供了一种快速简便的方法来测试您的云函数是否正常工作。 只需在终端或命令提示符中使用以下代码: 点击了解如何在 https //www digitalocean com/community/tutorials/an introduction to the linux terminal , https //blog teamtreehouse com/introduction to the mac os x command line 或 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链接的云代码中以进行查询。您可以在我们的 https //github com/mpc20001/ios objc targeted push cloud code 下载本节教程构建的完整ios项目,但您仍然需要完成之前教程中的所有设置,该教程解释了如何从back4app仪表板发送推送消息。 获取新版本的应用程序并注册或登录到应用程序。首先确保您从github下载了可用的模板,地址是 https //github com/mpc20001/ios objc targeted push cloud code 我们不会逐步讲解构建此应用程序的所有步骤,而是专注于设置云代码及其工作原理。一旦您打开这个新应用,请确保在appdelegate m文件中放入您自己应用的凭据。 appdelegate m \ (bool)application (uiapplication )application didfinishlaunchingwithoptions (nsdictionary )launchoptions { // 应用启动后的自定义覆盖点。 \[parse initializewithconfiguration \[parseclientconfiguration configurationwithblock ^(id\<parsemutableclientconfiguration> configuration) { configuration applicationid = @"在此粘贴您的应用程序id"; configuration clientkey = @"在此粘贴您的客户端id"; configuration server = @"https //parseapi back4app com/"; }]]; return yes; } 2\ 这个应用程序与之前的应用程序有一些重大区别。它有两个部分,一个是登录到您的应用程序的部分,另一个是未登录到您的应用程序的部分。下一个重大变化是appdelegate m文件中的函数‘didregisterforremotenotificationswithdevicetoken’。我们添加了一行代码,将用户的对象id存储为安装对象的一部分。这样我们就可以知道哪个用户与哪个安装对象相关联,并可以单独针对他们进行推送。 appdelegate m \ (void)application (uiapplication )application didregisterforremotenotificationswithdevicetoken (nsdata )devicetoken { // 将 devicetoken 存储在当前安装中并保存到 parse pfinstallation currentinstallation = \[pfinstallation currentinstallation]; \[currentinstallation setdevicetokenfromdata\ devicetoken]; \[currentinstallation setobject @\[@"news"] forkey @"channels"]; \[currentinstallation setobject\ pfuser currentuser objectid forkey @"userid"]; \[currentinstallation saveinbackgroundwithblock ^(bool succeeded, nserror error) { if (!error) { nslog(@"安装保存成功!!!"); }else{ nslog(@"安装保存失败 %@",error debugdescription); } }]; } 3\ 由于我们现在将用户的对象 id 存储为安装对象的一部分,因此在用户登录之前我们不想请求新的推送令牌。我们不想直接从 appdelegate m 文件的函数 ‘application didfinishlaunchingwithoptions’ 请求令牌,而是希望从 loggedinviewcontroller 的函数 ‘viewdidappear’ 中调用它。在 ‘viewdidappear’ 中,我们调用 appdelegate 上的一个函数以请求 apple 的推送通知令牌的访问权限。由于您只能在登录后查看此部分,因此我们可以假设在创建安装对象并检索对象 id 时用户已登录。 loggedinviewcontroller \ (void)viewdidappear (bool)animated { appdelegate delegate = (appdelegate )\[\[uiapplication sharedapplication] delegate]; \[delegate registerforremotenotifications]; } appdelegate m \[currentinstallation setobject\ pfuser currentuser objectid forkey @"userid"]; 4\ 好的,现在注册或登录。在你的物理设备上 (iphone 或 ipad)启动应用程序。你应该看到下面的图像。你应该注册以创建一个新用户,或者如果你已经在应用程序上创建了用户,则登录。 这看起来是这样的 你现在应该能够看到 loggedinviewcontroller。它应该是这样的。 如果你尝试向自己发送推送,它将无法工作,因为我们还没有将这些方法添加到云代码中。所以这就是我们接下来要做的。 8 将目标推送方法添加到云代码 打开你之前创建的 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 上传到云代码 前往您的应用程序, https //www back4app com/ ,然后点击 仪表板 仪表板 。 找到 云代码 云代码 ,然后点击 函数和网络托管 函数和网络托管 。它看起来像这样: 3\ 上传或创建一个新文件(您也可以直接在浏览器中编辑当前的 main js main js 文件)。然后,点击 部署 部署 如下所示: 10 测试您是否可以向自己发送定向推送通知 在模拟器中打开您的应用程序,同时保持您的物理设备关闭并锁定。您可以通过按下“向自己发送推送”按钮和“向一组人发送推送”按钮来测试这两个推送功能是否正常工作。您应该会在设备的锁屏上看到推送通知。 最后的想法 这结束了教程。您应该对如何根据用户的频道或用户的对象 id 或任何其他涉及获取用户对象 id 的查询发送推送有一个清晰的理解。请记住,为了存储用户的对象 id,您必须将其添加到推送安装中,并且仅在用户登录时请求推送令牌。通过查询发送推送时,请注意默认情况下限制为 100 个结果,并且某些用户可能有多个安装对象。此外,不建议向超过 100 个结果的安装对象数组发送推送。这可能导致某些推送未被发送。如果您处理的是大群体,最好使用频道或分批发送推送。 完成了! 在这个阶段,您可以通过 back4app 使用云代码发送推送通知!恭喜!