Tag: 推送通知

推送通知用户界面测试

如果您曾经尝试过手动测试推送通知,则知道它们会很痛苦。 首先,您必须将应用程序加载到设备(而不是模拟器)上,通过应用程序流程,确保已关闭/打开应用程序,等等。能够自动执行这种测试不是很好吗? 确保您的应用一般设置为推送通知(已启用权利,从开发人员门户生成的推送证书) 确保在运行UI测试时将您的应用配置为指向localhost:8080作为其域 您应用的info.plist必须在App Transport Security Settings NSAllowsLocalNetworking的App Transport Security Settings NSAllowsLocalNetworking 。 没有此设置,您的应用将无法连接到localhost域。 模拟服务器 这里有几个Swift服务器库。 有一些用于生产就绪的Web服务器(例如Perfect,Vapor等框架),但是我们想要的是轻便的东西。 我一直在使用Swifter(https://github.com/httpswift/swifter),但是您也可以尝试使用Embassy(https://github.com/envoy/Embassy)。 本文中的示例使用Swifter。 在我的UI测试目标中,我为模拟服务器添加了以下类: 如果将它分解成小块,这很简单。 它只有3种方法:1)启动方法2)清理方法,以及3)设置设备令牌端点的方法(在此示例中为/pushEndpoint ) 现在,确保将设备令牌发送到模拟服务器 设置应用 在您的代码中,几乎可以肯定,您有一个将设备令牌发送到远程服务器的功能。 您必须做的是确保在运行UI测试时,将此URL请求的主机设置为localhost:8080 。 实际上,您应该做的是1)运行UI测试时通过启动选项发送一个标志,或者2)设置一个表明您正在运行要切换到的UI测试的编译器标志。 为了简洁起见,我只是在下面的AppDelegate类中对/pushEndpoint的请求进行硬编码localhost:8080 : 我们设置的最后一步是设置一种方法,以从测试运行程序发送推送通知。 从测试运行器发送推送通知 以下是我用于从UI测试运行程序发送推送的代码(将此代码放入UI测试目标中): 如您在上面看到的,我们要做的第一件事是将为推送通知生成的证书加载到内存中(确保它是沙箱版本!)。 您应该将此文件添加到项目中,并确保它是UI测试目标的一部分。 之后,剩下要做的就是通过NWPusher库发送您的推送通知。 请确保您的通知格式正确。 样本推送通知有效负载可能如下所示: {“ aps”:{“ alert”:“测试消息”,“徽章”:1}} 当然,通知会比这复杂得多,但这只是一个示例。 运行测试 现在终于可以进行测试了! 这是一个示例测试: 您会在上面的测试中注意到,我们同时利用了之前创建的模拟服务器和triggerPushNotification(withPayload:)函数。 如果一切顺利,您的测试应启动该应用程序,然后将其放在后台,然后将推送通知发送到您的设备,然后在UI测试上点击它! 而且我们完成了! 设置所有这些有点麻烦,但是我认为这是值得的。 测试推送通知始终是一件繁琐的事情,我觉得很多开发人员可能做得还不够。 有了像我们在这里介绍的那样的测试框架,在修改应用程序中的推送通知逻辑时,您可以更加放心。 一旦您的第一个测试启动并开始运行,别忘了测试应用程序的状态,例如被暂停,应用程序完全关闭并对不同的应用程序状态/视图做出反应。 但我会将其留给读者作为练习。 […]

服务器端Swift:制作机盖(5/6)

上次我谈到了部署和维护Linux服务器。 这次我们正在谈论如何与APNs通信门户进行通信。 什么是天篷? Canopy具有适用于macOS和iOS的应用程序,可在此处使用。 APN 苹果推送通知服务。 为什么“ s”是小写的? 没人知道。 该服务是Internet上的黑匣子。 您的服务器安全地连接到该服务器,并发送小型JSON负载,每个负载均用于特定设备。 苹果然后将其发送到设备。 如果设备没有通电,它们将“保持”一会儿,如果有电,它将立即到达。 该连接是一个持久的HTTP2连接,HTTP2仍然是一个很新的东西,并且没有多少Internet使用它。 URLSession严格支持它,但它不会保持连接打开。 尽管有些人确实将URLSession用于APN,但您应注意:Apple承诺他们(连续打开和关闭许多连接)将其视为文字攻击,并会禁止您这样做。 实施APN 首先,请转到Apple供应门户,并获取一个APNs密钥。 它作为文件提供,将其传输到您的服务器。 确保它不以某种方式暴露在网络上,如果有人收到了,他们可以将用户通知作为您的应用发送给您,这可能会让您感到尴尬。 其次,您需要向服务器发送Apple为其客户端应用程序用户提供的设备令牌。 您之前已经看过此代码,现在您可以更好地了解其用途。 但是,除非计划将相同的通知发送给每个人,否则还需要某种方式将该令牌与您在服务器上使用的用户ID系统相关联。 因此也发送此信息。 不要忘记,您可以在两端使用相同的Codable结构! (请参阅第1部分) 完美的通知 Perfect提供了Perfect-Notifications,因此首先我使用了它。 易于设置和使用: 导入PerfectNotifications 让configurationName =“ configurationName” 让apnsKeyIdentifier =“ AB90CD56XY” //来自供应门户 让apnsTeamIdentifier =“ YX65DC09BA” //来自供应门户 让apnsPrivateKeyFilePath =“ ./APNsAuthKey_AB90CD56XY.p8” NotificationPusher.addConfigurationAPNS( 名称:configurationName, production:false,//上线时设置为“ true”! keyId:apnsKeyIdentifier, teamId:apnsTeamIdentifier, privateKeyPath:apnsPrivateKeyFilePath) 然后,您可以发送通知: NotificationPusher(apnsTopic:“ your.bundle.id”)。pushAPNS( configurationName:配置名称, […]

[iOS]带Firebase教程的远程通知

我将向您展示如何使用Firebase在iOS中设置远程通知。 对于iOS而言,这不是新话题,而且API或新库总是有新变化。 如果您是初级开发人员,本教程可能会对您有所帮助。 如果您是高级学生,那么回顾一下也很不错。 我们走吧。 Environment: iOS 10 & 9, Swift 3.1, Xcode 8.3.3 安装Firebase 我希望使用CocoaPods安装Firebase PodFile: 源’https://github.com/CocoaPods/Specs.git’use_frameworks!platform:ios,’9.3’def base_pods pod“ Firebase / Core” pod“ Firebase /消息传递” pod“ Firebase / Crash” 最终目标“ RemoteNotificationDemo”做 base_pods 结束 pod install并运行您的Xcode工作区 准备证书 要为您的iOS应用启用推送通知: 在目标->常规中设置您的团队,资料和证书 或简单地使用Xcode 自动管理签名 调整目标中的推送通知 ->功能 您应该看到两个刻度: ps有时Xcode可能无法管理您的应用程序。 然后,您需要转到Apple Developer Console(https://developer.apple.com/)来打开应用程序的“推送通知”: 在密钥中创建APNs身份验证密钥 建议使用身份验证密钥进行配置,因为它们是将通知发送到iOS的最新方法。 验证码的优点: 无需每年重新生成推送证书 一个身份验证密钥可用于您的所有应用 但是您仍然可以使用旧方法:创建开发和生产SSL证书 ps。 […]

播放推送通知有效负载的“徽章”

iOS 12기준。 1.아이콘에지배가’13’로표시된다。 이1이표시된다。 {“ aps”:{“ alert”:“ Testing ..(1)”,“徽章”:13,“ sound”:“ default”}} 2.배지배가’13’에서’7’으로변경된다。 1月2日。 {“ aps”:{“ alert”:“ Testing ..(2)”,“徽章”:7,“ sound”:“ default”}} 3.배지넘버가표시되지않는다。 노티들이1,2(1,2)은사라지고,현재3은다。 {“ aps”:{“ alert”:“ Testing ..(3)”,“徽章”:0,“ sound”:“ default”}} 4.배지넘버가표시되지않는다。 노티이전3이남아있고,남아있고4노티다。 {“ aps”:{“ alert”:“ Testing ..(4)”,“徽章”:0,“ sound”:“ default”}} 5.배지넘버가’8’로표시된다。 노티3,4,5가표시된다。 {“ aps”:{“ alert”:“ Testing ..(5)”,“徽章”:8,“ sound”:“ default”}} 6.배지넘버가’8’로유지된다。 노티3,4,5,6이표시된다。 {“ aps”:{“ alert”:“ Testing ..(6)”,“ sound”:“ […]

远程通知样本

要模拟远程通知,您需要配置iOS应用和提供商服务器。 如果您还不了解通知,则需要阅读我撰写的有关本地通知样本的文章。 以下是我在阅读有关通知的所有Apple文档之后并结合NodeJS的基本知识后制作的视频: 在应用程序上配置远程通知 要为您的iOS应用配置远程通知,您需要按顺序阅读以下Apple文章。 它描述了您需要的所有东西,除了服务器端特定编程语言的代码。 向APN注册您的应用 与APN进行通信,并接收可标识您的应用程序的唯一设备令牌。 注意 :要获取设备令牌,您还需要在设备上运行应用程序以及用户权限以显示通知(通过使用UNUserNotificationCenter对象的requestAuthorization(options:completionHandler:)方法)。 设置远程通知服务器 设置服务器以生成通知并将其推送到用户设备。 生成远程通知 使用JSON负载将通知发送到用户的设备。 向APN发送通知请求 将您的远程通知有效负载和设备令牌信息发送到APN。 建立与APN的基于证书的连接 通过在提供商服务器上安装证书来保护与APN的通信安全。 建立与APN的基于令牌的连接 使用无状态身份验证令牌,通过APN保护您的通信。 静默地将更新推送到您的应用程序 传递静默通知,并在用户设备的后台唤醒您的应用程序。 如果您停留在上述任何步骤,都可以在此处下载完整的iOS应用项目。 在服务器上配置远程通知 首先,您需要下载在NodeJS环境上运行的示例服务器项目。 该项目使用基于证书的连接,与基于令牌的连接相比,它部署起来更简单。 打开provider-server.js文件,您将看到以下内容: 您需要为该服务器的操作提供3件事: cert.pem文件的路径 key.pem文件的路径 设备令牌 要获取cert.pem和key.pem文件,您需要阅读本文。 我还使用node-apn节点包来支持发送通知。 你可以在这里读到它。

在iOS中使用Firebase推送通知

应用注册窗口将显示以下步骤 将GoogleService-Info.plist文件下载并移动到您的项目中,然后将firebase / core pod文件安装到您的项目中 添加GoogleService-Info.plist之后,请转到appDelegate.swift。 在didFinishLaunchingWithOptions中添加FirebaseApp.configure() 。 在appDelegate中添加以下代码以从firebase获取通知, 在appDelegate.swift中添加UserNotification功能后,返回Firebase控制台→打开项目→单击Cloud Messaging →发送您的第一条消息

带媒体附件的iOS丰富推送通知

与旧操作系统版本相比,iOS 10为我们带来了具有新功能的推送通知。 改进包括在通知中立即查看照片,视频或Gif。 通过使用新的Notification Service Extension ,可以将这些媒体附件作为通知的一部分。 您还可以使用新的Notification Content Extension来在通知的媒体附件视图中拥有更丰富的View Controller级别的内容。 我们将在下面浏览一些代码。 确保您具有: Xcode 8.0+ OS X El Capitan 10.11 将UserNotifications.framework导入到您的项目中。 苹果推送通知服务将您的应用程序的远程通知发送到每个用户的设备。 将向APNS服务器发送通知和设备令牌。 依次,他们处理该通知到正确的用户设备的路由。 届时,iOS将接管并确保将通知发送到您的应用程序。 推送通知的最大有效负载大小为4KB,它们支持开发和生产环境。 为了使您可以执行Notification Extension代码,必须对推送通知有效负载进行一些修改(例如,与iOS 9相比)。 { “aps”: { “alert”: { “body”: “Push notification body”, “title”: “Push notification title” }, “mutable-content”: 1, category: “rich-apns” }, “media-url”: ” https://i.imgur.com/t4WGJQx.jpg ” } ” } […]

使用Urban Airship的iOS推送通知设置

推送通知允许将对客户有用的信息从服务器传送到用户的屏幕,无论该屏幕是在智能手机,平板电脑,计算机还是可穿戴设备上。 在与客户互动方面,使用推送通知有很多好处。 但是,有必要以使客户保持联系而不是烦恼的方式使用推送通知。 在跟踪用户,构建地理围栏等方面,构建我们自己的推送通知服务非常复杂,并且还需要大量时间和精力。 特别是当我们没有对推送通知的后端支持时,我们需要研究市场上已经可用的推送通知服务。 Urban Airship是顶级推送通知服务提供商之一。 它提供了很多选项,包括推送通知,应用程序消息传递,消息中心等。 好吧,让我们看看如何使用Urban Airship将推送通知发送到我们的应用程序。 如何在仪表板中创建城市飞艇项目 步骤1:注册/登录 根据您的要求选择一个计划,并注册Urban Airship帐户。 如果满足您的要求,您也可以从免费的入门计划开始。 如果您已经注册了该帐户,请登录该帐户。 步骤2:新专案 单击新建项目按钮 在右上角。 输入项目名称,图标(可选),类型(实时/测试)和行业类型。 单击创建项目。 步骤3:为您的应用程序设置推送服务 我们需要为我们的应用程序进行APNS设置。 这意味着我们必须获取启用了推送通知服务的证书。 步骤4:专案设定 在仪表板中单击您的项目 单击频道指南,然后选择要从该项目向其发送推送通知的平台以及所有平台。 单击选择文件,然后选择在步骤3中生成的证书。请注意,对于开发项目,我们应该上载开发证书,对于生产项目,我们应该上载生产证书。 单击保存证书。 步骤1:安装Urbal飞艇SDK 我们可以使用CocoaPods,Carthage或手动安装Urban Airship SDK。 使用 CocoaPods 确定已安装可可豆荚后,将“ UrbanAirship-iOS-SDK”添加到豆荚文件中,然后运行“ pod install”命令。 use_frameworks! 目标“您的应用名称” pod’UrbanAirship-iOS-SDK’ 结束 使用 迦太基 安装迦太基。 在包含.xcodeproj或.xcworkspace目录中创建一个.xcworkspace 。 github“ urbanairship / ios-library” 手动安装市区飞艇框架 下载最新版本的Urban Airship […]

HTTP / 2 ・认证令牌的方式のSwift制プッシュ通知送信ライブラリを作りました

mono0926 / apns 通过在GitHub上创建一个帐户为apns开发做出贡献。 github.com 昨日プッシュ通知ライブラリリりたいと呟いてましたが,早くも作ってしまいました(・‿・`)脳内イメージ通りのがそのまま形になった感じで,けっこう自信作です(・‿・ `) baseいうFirebaseのようなサービスを使えば楽ではありますが,自分で处理を书く场合,HTTP / 2リクエスト时にセットする认证トークンの生成・検证处理がけっこう难しいです。また,その难しさゆえか比较的新しい(2015年12月から使えるようになった)という理由からか,この方式を使えるライブラリが少なめです。 くで语语语语语JS JS iOS iOS iOS iOS iOS iOS iOS iOS iOS iOS强い型で通知内容を组みたい,とも思います。 节点-apn /节点-apn node-apn –:调用:用于Node.js的Apple Push Notification模块 github.com Swift版では,VaporAPNSは良いなと思って使っていましたが,出したPRが却下されたり放置されてたりで,PR活动で自分の理想的な形に近づけるのは难しく感じ,一から作ってみました。 matthijs2704 / vapor-apns vapor-apns –用于蒸汽的简单APNS库(快速) github.com (あと,VaporAPNSは认证密钥ファイルを加工して,そのオリジナルファイルをしれっと上书きする处理が入っていたり(カットしても动いたので谜🤔)と,よく见たら気になる点がちょくちょく…。) 使い方 READMEがまだちゃんと书けておらず,テストコードをコピペして载せただけになっていますそれ,それ见るだけで大​​体の使い方が分かると思います。基本的に,通知に必要な要素をそのままStructに通知内容はコードで书くこともできますし,指定したjsonファイルを読んでセットするdともできます(Codable最高😎)。 にのライブラリリを元に,GUIアプリとと作作りたいなとも思っていますが,今はそこまで时间取れなさそうなので,先になりそうです。 CLIツールくらいは用意しようかなと思いましたが,色々な引数を文字列でセットするより,このライブララリのテストコード弄って所望のプッシュ通知打った方が手っ取り早いかなと思ったりしています🤔 というわけで,とりあえず今の段阶では,目的に応じてどちらかで活用してみてください。 APNSライブラリのテストコードをいじって実行 実行形式のSwiftPMプロジェクトを作って,APNS(https://github.com/mono0926/apns.git)への依存を追加してimport APNS (ただし现状ではmacOSでしか动かないので注意) 単体テストはほとんど书いていない件について dライブラリ系は大体単体テスト书いてましたが,今回は気付いたらほとんど书かずでした。Codable活用したせいか,书いてもコスパ悪い(念のため确认,程度になってしまう)かなと感じてまたとが多かったり,でした。また,実际にプッシュ通知シュ届くかをたまに确认すれば,あとはSwiftの型の强さで安心できる感じでした。 とはいえ,本当は书くべきかなというところをサboった感もあるので,今后リファクタリングついでに,多少テスト追加していこかなとも思っています(・‿・`) ちなみに今,プッシュ通知の本を书いていて(秋くらいに书き上げたい…),そのために细かいプッシュ通知を色々検证中なのですが,VaporAPNSでその细かいところが动いていないところがあって,PR出したりしていた势いでつい一から自作しちゃった感じです(・‿・`) iOSプッシュ通知プログラミンミ完全グイド iOS 11までのプッシュ通知シュログラグンミ完全网罗した本になる予定です。2017年9月公开目标で,新しいiOSリリースなどにも合わせて顺次アップデートしていく予定です。 leanpub.com また,もし今バグがあっても,そうやってこの本を书きながら使っていく中で皆溃せるかな,と目论んでいます(・‿・`)

使用pu.sh从命令行发送iOS推送通知

我一段时间以来一直在大多数应用程序中使用推送通知。 在iOS上,它们是远程通知功能的核心。 它们快速,安全并减少了开发人员为有效地向其应用程序和用户传播信息所需的工作量。 此外,这些天您可以在其中显示丰富而全面的内容。 我在这里写了一篇有关该文章的文章,您会发现它对您自己的应用程序开发很有用,您可能会喜欢阅读。 因此,尽管我对这项技术感到满意,但在某个领域中,我一直发现自己想要并且正在测试它们。 通过这种方式,我的意思是能够多次将它们发送到安装有我的应用程序的特定设备上,并且可以重复多次进行,以便我可以测试,调整和重写其文本和有效负载。 在iOS上测试推送通知 通常,您可能有自己的服务器设置,或者可能使用了许多现有的推送通知服务之一。 所有这些都需要大量时间和精力来启动和运行。 理想情况下,您可能想开始仅使用Mac,iOS设备和零现金(当然不包括为Mac和设备支付的钱)发送通知。 如果您在线上进行了一些研究,您可能会遇到NWPusher,它虽然效果很好,但仅适用于直接从钥匙串读取的证书和密钥的基于证书的身份验证。 它还作为您需要安装的Mac应用程序分发,因此它只能在该平台上运行。 您还需要每年自己生成这些证书,并且每次都是一个多步骤过程。 Shell脚本解决方案 我使用基于令牌的通知,而不是基于证书的通知,它更易于设置和管理。 另外,我没有创建一个用于发送通知的图形应用程序,而是编写了一个bash shell脚本来发送通知。 它称为pu.sh ,位于GitHub上,此处也有完整记录。 同时,您也可以在下面与我联系,以获取更全面的演练。 我还要指出的是,使用Shell脚本解决方案可以确保透明度。 您已经预先确切知道该脚本对您提供的信息有什么作用,即该脚本仅将有效负载发送到APNs服务器。 收集所有先决条件 以下两节是此处官方文档中信息的精简版本。 对于我们的解决方案,我们将使用基于令牌的推送通知,而不是基于证书的推送通知。 基于令牌的APN连接 基于令牌的身份验证比基于证书的通信速度更快,因为它不需要APN来查找与服务器相关的证书。 您可以将同一令牌用于多个提供商服务器,并且您所有公司的应用程序都可以使用一个令牌。 请记住,您必须每小时至少使用签名密钥更新一次令牌。 我们将尽快介绍如何更新您的令牌。 令牌还可以持续任意长的时间。 直到您将其吊销为止,否则每年都必须重新发行和重新分发证书。 获取加密密钥和密钥ID 您需要一个APNs身份验证令牌签名密钥来生成服务器使用的令牌,以便发送推送通知。 您可以从开发人员帐户developer.apple.com上的“ 密钥 ➙ 所有”部分中请求此密钥,如下所示。 继续下一步之后,您将获得: 密钥ID为的10个字符的字符串 。 随时准备使用它。 如果您忘记了它,它仍然可以在开发人员门户中使用。 .p8 文本文件的 签名密钥 。 将此放置在安全的地方。 例如,不要将其保存在源代码存储库中。 如果丢失,它将永远消失,您将不得不撤销它并重新生成它。 如果此密钥以任何方式受到破坏,则可以将其用于向应用程序发送推送通知-因此,如果您怀疑发生了这种情况,请将其撤消并请求一个新密钥。 您已经知道此过程比创建密钥,证书等要简单得多。 获取设备令牌 以下是您的应用程序应用程序委托的方法,带有一些简短的解释性注释,您需要获取设备令牌。 […]