Tag: Apns

了解iOS应用的代码签名

如果您是iOS开发人员,则很可能必须处理代码签名。 而且,如果您是初级iOS开发人员,则开发人员门户网站“证书,标识符和配置文件”部分中的所有操作可能会让您有些不知所措。 本文的目的是帮助初级iOS开发人员更深入地了解代码签名。 这不会是有关如何对应用程序进行代码签名的分步教程。 理想情况下,阅读本文后,您无需进行任何教程即可对应用程序进行代码签名。 我不打算讨论更底层的细节,但我们将讨论一些有关非对称密码的问题。 非对称密码学 您需要了解的最低要求是,非对称加密使用公共密钥和私有密钥 。 用户必须保留自己的私钥,但可以共享公钥。 使用这些公钥和私钥,用户可以证明自己确实是他本人。 可以在此处找到有关非对称密码学的很好的高级说明。 如果您想了解实施细节或背后的数学知识,可以在线找到它们。 应用程式编号 应用程序ID是应用程序的唯一标识符。 它由Apple生成的团队ID(您对此没有任何控制权)和应用程序的包ID(例如com.youcompany.yourapp )组成。 还可以有通配符应用程序ID: com.yourcompany.* 。 这些将在多个捆绑ID上匹配。 通常,您将拥有一个明确的应用ID,而不是通配符。 证明书 您可能已经注意到,要在Apple开发人员门户中创建证书,您需要上传证书签名请求。 您可以从钥匙串生成此CSR,并且此CSR包含私钥。 然后,在开发人员门户上,您可以使用此CSR创建证书。 证书可以有多种类型。 最常见的是: 开发(iOS应用程序开发)—您需要那些应用程序才能在Xcode的设备上运行您的应用程序。 分发(App Store和Ad Hoc)—您需要那些人才能通过App Store或Ad Hoc分发您的应用 APNS(Apple推送通知服务)—您需要那些能够将推送通知发送到您的应用程序的服务。 与开发或分发证书不同,APNS证书与应用程序ID关联。 有两种类型的APNS证书,用于开发-Apple推送通知服务SSL(Sandbox)和用于生产-Apple Push Notification服务SSL(沙箱和生产)。 如果要使推送通知在调试和分发版本中均起作用,则需要创建它们两者。 设备 每个会员年度每个产品系列最多可以向您的帐户添加100台设备。 100部iPhone,100部iPad,100部iPod Touch,100部Apple Watch和100部Apple TV。 要将设备添加到您的帐户,您需要添加其唯一的设备ID。 您可以在Xcode或iTunes中(比较复杂)轻松找到它。 您可以在此处找到有关如何向您的帐户添加设备的详细指南。 供应配置文件 配给配置文件是将App ID与证书以及(为了进行开发或临时分发)与某些设备相关联的内容。 您可以在Apple开发人员门户上创建配置文件,然后将其下载到Xcode中。 用法 创建所有这些文件之后,您可以转到Xcode,添加证书,刷新配置文件,然后选择所需的配置文件。 […]

使用JSON Web令牌(JWT)构建有效的推送通知

Apple推送通知服务(APN)是Apple设备上所有远程通知的主要亮点。 使用APN,开发人员可以利用该服务来建立参与度并将信息传递给iOS平台上的用户,包括tvOS,macOS和watchOS等其他Apple设备。 使用Apple先前对推送通知服务的更新,您可以使用身份验证令牌安全地连接到APN,以通过HTTP / 2 API发送推送,从而免除了维护有效证书和其他相关任务的压力。 该协议使开发人员轻松构建强大的推送通知。 苹果公司新的基于APN的基于令牌的通信还提供了无状态且快速的通信,这比基于证书的通信要快,因为APN不必验证您的证书或任何其他信息。 此外,您不必总是为每个通知生成新的令牌。 此外,您可以将单个令牌与多个服务器一起使用,以向每个应用程序发送通知。 如果您是iOS开发人员,并且希望与APN实现基于令牌的通信,那么可以像以下几个快速步骤来熟练掌握JWT! 有3个步骤可实现此目的: 从会员中心生成签名密钥。 生成JSON身份验证令牌。 发送推送通知。 从会员中心生成签名密钥 您可以将该密钥用于多个应用程序,并且可以在生产和开发服务器上使用。 要创建签名密钥,请登录会员中心,然后单击“ Keys部分中的“ All ”。 单击右上角的+按钮,为您的密钥命名,然后在“密钥服务”部分中选择APN。 单击继续,将生成您的密钥。 记下Key ID然后从下载选项中下载签名密钥(扩展名为.p8)。 将这两条信息都存储在安全的地方。 您将需要它来生成用于身份验证的JSON令牌。 生成JSON身份验证令牌 APN需要JSON Web令牌才能遵循以下格式: 标头 { “ alg”:“ ES256”, “孩子”:“ ABC123DEFG” } 要求 { “ iss”:“ DEF123GHIJ”, “ iat”:1437179036 } alg (Algorithm):加密算法,当前APN仅支持ES256 kid (密钥ID):我们在上一步中生成的10位数字的密钥ID。 iss (发行人):这是一个10位数字的团队ID,可帮助您开发应用程序。 iat (Issed At):生成令牌时从UTC的纪元开始的秒数。 […]

iOS中的远程通知

由Apple推送通知服务(APN)管理的远程通知是一种有效的方式,即使应用程序(例如消息传递应用程序)处于非活动状态,也可以将任何数据更改传达给用户。 先决条件: 您需要注册Apple Developer Program才能使用此功能并拥有实际的设备。 推送通知在模拟器上不起作用。 在开发人员帐户中创建一个应用程序ID,并为其启用“推送通知”服务,例如com.notifications.sample。 使用与您的捆绑包标识符相同的应用程序ID。 接下来,您需要在Capabilities中启用推送通知。 要求授权和注册 始终要求用户允许显示通知,然后向APN注册您的应用。 在应用启动完成之前,导入UserNotifications框架并在“ application:didFinishLaunchingWithOptions:”中执行这些操作。 UNUserNotificationCenter是管理通知相关活动的中心对象。 用户可能不会授权通知,也可能随时更改应用程序的通知设置。 因此,在注册远程通知之前,请检查当前设置。 2. 设备令牌 注册成功后,您会在“ application:didRegisterForRemoteNotificationsWithDeviceToken:”中收到设备令牌;如果注册失败,则会在“ application:didFailToRegisterForRemoteNotificationsWithError:”中收到错误消息 。 因此,在AppDelegate中实现这两个委托方法。 APNs使用其唯一的设备令牌识别任何设备,并将通知路由到该设备。 因此,为了接收推送通知,请将设备令牌发送到提供程序服务器。 每当必须发送通知时,提供程序服务器还会将通知有效负载和设备令牌发送到APN。 注意:每次从系统询问设备令牌之前,都要先将其发送到服务器。 当用户从备份还原设备,重新安装操作系统或在新设备上安装应用程序时,APN会发布新的设备令牌,因此请勿缓存设备令牌。 3. 处理通知 您必须在应用完成启动之前将对象分配给委托,无论是在应用委托的application(_:willFinishLaunchingWithOptions 🙂还是application(_:didFinishLaunchingWithOptions 🙂中。 为了处理在应用程序在前台运行时到达的通知或处理通知上的用户操作,请在对象中实现UNUserNotificationCenterDelegate协议的方法,然后将该对象分配给共享UNUserNotificationCenter的委托属性。 通知到达时会触发这两个委托方法中的任何一个,具体取决于应用程序是在前台运行还是在后台运行。 当应用程序在前台运行时,不会显示通知。 因此,为了显示警报或播放声音或标记图标, 请在complementHandler ()中传递类型为UNNotificationPresentationOptions的任何属性。 相关话题: iOS中的本地通知 具有自定义操作的通知

服务器端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:配置名称, […]

使用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 文本文件的 签名密钥 。 将此放置在安全的地方。 例如,不要将其保存在源代码存储库中。 如果丢失,它将永远消失,您将不得不撤销它并重新生成它。 如果此密钥以任何方式受到破坏,则可以将其用于向应用程序发送推送通知-因此,如果您怀疑发生了这种情况,请将其撤消并请求一个新密钥。 您已经知道此过程比创建密钥,证书等要简单得多。 获取设备令牌 以下是您的应用程序应用程序委托的方法,带有一些简短的解释性注释,您需要获取设备令牌。 […]

测试APN

如何测试APN(苹果推送通知)? 问题 有时我们无法访问PN的仪表板,您需要在应用程序中测试PN,这很简单。 我收集了大多数桌面和Web应用程序,它们可以帮助您测试设备中的PN。 桌面应用 n(我更喜欢)❤️ 它具有自动令牌检测功能,无需在控制台中打印令牌 KnuffApp / Knuff Apple推送通知服务(APN)的调试应用程序。 – KnuffApp / Knuff github.com 简易APNs提供商 轻松的APNs提供商–推送通知服务测试工具 Easy APNs Provider是适合想要测试Apple Push Notification Service是否可在…上使用的Apple开发人员的工具… itunes.apple.com APN Tester免费 APN Tester免费 适用于Mac的APN Tester Free,免费和安全下载。 APN Tester Free最新版本:Xenia发行的Mac免费程序…… en.softonic.com PushMeBaby 矮人/ PushMeBaby iOS推送通知调试应用程序。 您可以在iOS Push Notification(开发或生产)期间使用此应用程序来推送… github.com NWPusher 面条/ NWPusher OS X和iOS应用程序和框架可与Apple推送通知服务(APN)一起使用–oodlewerk / NWPusher github.com