Tag: 推送通知

iOS推送通知背景下载神秘化

在实施推送通知时,我发现许多有关后台下载如何工作的不完整和不准确的信息。 我必须通过实验弄清楚其中的一些内容,以防万一它可以帮助其他人,这就是我所学到的。 (请注意,我将不介绍设置Apple Push Notifications的详细信息-这是一个完全不同的主题)。 期望的行为 至少对于我的应用程序而言,期望的行为是到达推送通知以触发后台下载,以便在用户下次打开该应用程序时(通过点击通知或正常打开该应用程序),该数据已经在那里。 此外,如果用户点击通知本身,则该应用应打开并显示该通知引用的特定视图/数据。 为了更具体一点,在紧急电子邮件和任务管理应用程序中,有关新电子邮件的通知应触发该应用程序从服务器下载该消息的内容,然后点击通知应打开该应用程序并显示该特定线程。 一个明显的问题是为什么您不能仅随通知一起直接发送所需的内容。 问题在于,Apple将通知有效载荷限制为2 KB,不足以包含大多数电子邮件的内容和元数据。 配置项目以进行通知背景下载 首先,您需要为您的应用设置适当的功能。 我假设您已经在目标设置的“功能”部分中启用了“推送通知”。 对于后台获取,您还需要在“后台模式”下启用“后台获取”和“远程通知”。 所有重要内容可用标志 其次,不要忘记在服务器发出的实际通知中将content-available设置为1,以触发后台下载。 如果您未能在通知中包含此标志,则通知到达时,您的应用将不会收到任何协议方法调用。 了解相关的App Delegate协议方法 乍一看,这似乎很简单。 UIApplicationDelegateProtocol提供了application:didReceiveRemoteNotification:fetchCompletionHandler:方法,该方法在通知到达电话时被调用。 并发症有两个方面: 当用户点击通知以启动应用程序时,也会使用完全相同的参数调用完全相同的didReceiveRemoteNotification方法。 如果通知到达时(或用户点击通知时)应用尚未运行,则通知信息将作为启动选项传递给didFinishLaunchingWithOptions,然后调用didReceiveRemoteNotification *。 同样,没有区分通知到达与用户点击通知。 因此,您需要处理四种情况: 通知到达,应用程序在后台运行。 通知到达,应用未在后台运行。 用户点击通知,应用程序在后台运行。 用户点击通知,应用未在后台运行。 案例1和3仅在案例2和4在didFinishLaunchingWithOptions的启动选项中提供通知详细信息时才调用didReceiveRemoteNotification,然后调用didReceiveRemoteNotification。 更为复杂的是,如果用户通过将其从内存中刷出而手动杀死了您的应用程序,则不会发生情况2。 也就是说,您的应用程序永远不会在后台启动以获取数据,直到用户选择再次启动它。 从用户点击通知中区分通知到达 除了一个例外,您可以通过检查应用程序状态来区分通知到达和用户在didReceiveRemoteNotification(或didFinishLaunchingWithOptions)中点击通知的情况。 如果应用程序在后台运行(UIApplicationStateBackground),则应执行后台下载。 相反,如果应用程序是“非活动的”(UIApplicationStateInactive),则表示它是响应于用户点击通知而从后台移动到活动的。 如果该应用程序已经处于活动状态(UIApplicationStateActive),则通常不需要执行任何操作。 但是,有一个重要的例子。 如果应用程序已暂停(在快速应用程序切换模式下,双击主页按钮后),并且通知到达,则应用程序的状态将为UIApplicationStateInactive而不是UIApplicationStateBackground。 但是,这并不意味着用户点击了通知。 因此,您需要其他逻辑来检测这种情况。 您可以将applicationWillEnterForeground用作其他信息。 当应用程序从后台转换为非活动状态时,始终会调用该方法,因此您可以依靠它在用户点击通知且应用程序实际上正在启动时(而不是通知到达时)被调用,而用户尚未交互。 您可以保留一个标志来跟踪该应用程序是否真正启动。 这是AppDelegate中的基本代码: -(void)applicationWillResignActive:(UIApplication *)application { self.appIsStarting =否; } […]

Swift 3.0 —用户通知

通知是对象可以携带信息,用户信息字典并广播给多个接收者。 新的UserNotifications框架(由Apple在iOS 10上发布)支持传递和处理本地和远程通知。 通知类型: 本地通知是一个对象,即使您的应用程序处于后台或未运行,您也可以计划在特定时间将其发送到您的应用程序。 通过本地通知,您正在唤醒您的应用程序。 本地通知对用户可见,用户可以对其进行操作。 同时,用户不必参与采取行动。 通知可以在您的应用程序内发送到您的应用程序的特定竞赛。 推送通知 (也称为远程通知 ) 是通过服务器发送的。 Apple推送通知服务(APN)可以将远程通知传输到您的应用程序,并将其路由到您的提供商到每个用户设备的路径。 提供程序将通知和设备令牌发送到APS,APS将通知推送到用户设备,然后操作系统处理将通知发送到应用程序。 用户可以得到通知: 屏幕上的警报或横幅 应用程序图标上的徽章 警报,横幅或标志伴随的声音 SDK“ iOS 10.0”(Xcode 8)引入了UserNotification.framework 。 它独立于UIKit,后者支持根据特定条件(例如位置,时间间隔,日历或位置)传递和处理本地和远程通知。 UserNotificationsUI.framework允许您自定义本地通知和远程通知在本地设备上出现时的外观。 注意:旧版API也可以与SDK“ iOS 10.0”(Xcode 8)配合使用。 您必须在需要通知的每个文件中导入UserNotifications框架。 注册本地和远程通知的通知。 通知变得独立于UIKit。 UNNotificationRequest对象用于安排本地通知并管理已传递通知的内容。 通知请求对象包含:带通知内容的UNNotificationContent对象和指定触发通知传递的条件的UNNotificationTrigger对象。 触发器分为三种: 时间间隔-可以设置您要多久运行一次通知,或设置多长时间的延迟。 日历-可以设置触发的确切时间。 位置-在您输入或离开某个位置时安排通知发送。 让我们创建本地通知:

Golang:将推送通知发送到iOS设备

假设: 您的计算机中已安装Go语言 支持APNs的iOS示例应用程序用于测试 步骤1:生成证书PEM文件。 本文将帮助您生成PEM https://www.raywenderlich.com/123862/push-notifications-tutorial 步骤2:为APN安装Go库 去获取github.com/anachronistic/apns 步骤3:在main.go中编写以下函数。 将证书PEM文件放置在config文件夹中。 您可以根据需要更改推送URL。 func SendPushToClient(pushText string,pushToken string){ fmt.Println(“ SendPushToClient”) 有效负载:= apns.NewPayload() 有效负载。警报= pushText pn:= apns.NewPushNotification() pn.DeviceToken = pushToken pn.AddPayload(有效载荷) 客户端:= apns.NewClient(“ gateway.sandbox.push.apple.com:2195”,“ ./config/pushcert.pem”,“ ./config/pushcert.pem”) 响应:= client.Send(pn) 警报,_:= pn.PayloadString() fmt.Println(“ Alert:”,alert) fmt.Println(“ Success:”,分别为成功) fmt.Println(“错误:”,分别为错误) } 步骤4:从主函数调用“ SendPushToClient”函数。 在以下代码中替换客户端令牌 func main(){ SendPushToClient(“您好,来自APN”,“ ”) } 步骤5:编译并运行 去跑主 完整源代码main.go 包主 导入( […]

如何以.p12文件的形式获取Apple Push Notification Service证书,以便将其转换为.pem文件

如果有任何编写地狱的经验会使我烦恼和写作,那么我想这将是一个荒唐的过程,并且会产生大量无益的Google结果……例如为我的Rails以正确的文件类型创建Apple Push Notification Service证书+ iOS项目。 (此过程需要macOS。) TL; DR:使用macOS的钥匙串访问权限创建证书签名请求,将其上传到Apple,下载生成的.cer,将其添加到钥匙串,将.cer从钥匙串中导出为.p12,然后使用Terminal转换.p12到一个.pem文件中。 *哇!* 创建证书签名请求 打开“钥匙串访问”,然后在菜单栏中选择“钥匙串访问”>“证书助手”>“从证书颁发机构请求证书”。 选择此选项将弹出“证书助手”窗口。 输入与您的Apple Developer帐户关联的Apple ID,您的姓名,并将最终选项更改为“ Saved to disk”。 单击“继续”将允许您命名证书申请并选择想要保存证书的文件夹。 单击“保存”后,您应该在选定的目标文件夹中找到一个名为CertificateSigningRequest.certSigningRequest的文件。 下一步,我们将其上传到Apple。 下载您的.cer 登录到Apple Developer帐户后,系统会显示帐户概述。 幸运的是,正确的选择是放在最前面和最中心:单击“证书,标识符和配置文件”。 这将带您到将要管理iOS证书的区域。 您会在屏幕左侧找到相关的菜单选项。 此菜单包括一个UX陷阱,使我花了数小时徒劳无果。 在“证书”类别下,您会找到“ APNs身份验证密钥”。单词“ certificate”和“ APNS”可能会导致您得出以下结论:您应该单击“ APNs身份验证密钥”按钮才能创建APNS证书。 ,但是您会错的。 可怕的,可怕的错误。 并且拥有一个无用的(无论出于我们的目的,无论如何).p8文件。 取而代之的是,您将忽略您的直觉,转到下一个类别“标识符”,然后单击“应用程序ID”。这将向您显示与帐户相关联的所有应用程序包ID的列表。 选择将用于APNS的应用程序,然后将展开“应用程序服务”列表。 向下滚动并单击“编辑”。 这将带您进入一个页面,该页面允许您设置和配置应用程序服务。 向下滚动,直到看到标有“推送通知”的服务。 我已经启用了推送通知并创建了两个证书,所以您的屏幕可能看起来有些不同。 单击复选框以启用“推送通知”(如果尚未启用),然后(取决于您要创建开发证书还是生产证书),单击“创建证书”。 然后,您将进入一个页面,解释如何创建证书签名请求(我们已经在上面完成了)。 单击“继续”,上传您的CSR,然后下载生成的.cer文件。 已经累了吗? 我也是。 我们到了一半! 将您的.cer转换为.p12 通过双击或将其拖动到“钥匙串”窗口中,使用“钥匙串访问”打开.cer。 然后使用左侧面板导航到“我的证书”并找到您刚刚添加的证书。 (它也可以添加到“证书”中。) 选择/突出显示/单击您的证书,然后右键单击并选择“导出”,或者在菜单栏中选择“文件”>“导出项目”。 在出现的弹出窗口中,命名您的证书,选择它的目的地,然后选择.p12文件类型。 系统会要求您使用密码来保护此证书(可能是个好主意),但您可以根据需要将其保留为空白。 […]

Apple推送通知证书(iOS推送通知-第一部分)

2.生成证书签名请求。 您可以从Mac上的钥匙串访问应用程序生成此文件。 按照下面给出的快照: 3.注册您的Apple设备 在Apple开发人员控制台上,单击设备→全部,然后按照下面给出的快照进行操作:

适用于iOS的Firebase的ReactNative推送通知

什么是推送通知? 推送通知是在移动设备上弹出的消息。 应用发布者可以随时发送它们; 用户无需进入应用程序或使用其设备即可接收它们。 他们可以做很多事情; 例如,他们可以显示最新的体育比分,让用户采取行动(例如下载优惠券)或让用户知道某个事件(例如快速销售)。 推送通知看起来像SMS短信和移动警报,但它们仅覆盖已安装您的应用程序的用户。 每个移动平台都支持推送通知-iOS,Android,Fire OS,Windows和BlackBerry都有自己的服务。 下面,我将展示如何为iOS平台集成ReactNative推送通知。 请参阅此文章,以获取有关推送通知的更多信息: https : //www.urbanairship.com/push-notifications-explained 集成到iOS平台的ReactNative Push Notifications中的步骤 首先,创建一个React Native新项目,我们将配置推送通知。 反应本地初始化反应推送通知 现在,当您安装React Native时,需要考虑的几件事才能使它们正常工作而没有任何错误。 您应该使用XCode 10(当前最新),React Native 0.55(当前最稳定)。 接下来,我们为React Native https://github.com/evollu/react-native-fcm安装Firebase Cloud Messaging软件包 react-native链接react-native-fcm 安装Firebase Cloud Messaging Package之后,我们需要使用CocaPods安装FCM框架。 要安装它,我们首先在刚刚创建的“ react-push-notifications”项目上的“ ios”目录中导航,然后运行以下命令: cd ios && pod初始化 所以,我的PodFile看起来像这样 #取消注释下一行以定义项目的全局平台 平台:ios,“ 9.0” 目标“反应推送通知” #如果您使用的是Swift或想使用动态框架,请取消注释下一行 #use_frameworks! #pods for react-push-notifications pod“ Firebase […]

带CallKit的系统调用屏幕

集成Amazon SNS和CallKit 苹果宣布在WWDC16上开放API,以将iOS上的本机呼叫屏幕与VoIP(IP语音)应用程序配合使用。 我们曾经发送推播通知来通知用户电话。 在iOS10中,第三方应用程序还可以使用CallKit通过本机呼叫屏幕通知用户。 我将总结我对CallKit经验。 抽象 设置Amazon SNS 使用PKPushRegistry在应用程序上进行初始设置以接收VoIP推送通知。 从Amazon SNS发送VoIP推送通知 使用CallKit显示系统调用屏幕 从Amazon SNS接收VoIP推送通知 设置Amazon SNS 应用程序必须在后台才能显示系统调用屏幕。 VoIP推送通知使我们可以唤醒后台应用程序。 当收到VoIP推送通知时,确保应用程序在后台运行。 这使我们可以启动VoIP呼叫。 我没有注意到与常规推送通知和本地通知有这种区别,最终花费了大量时间。 但是,由于在我从事此工作的那一刻(2016年8月),Parse和Firebase不支持VoIP推送通知,因此我决定使用亚马逊的推送通知服务SNS。 在SNS上设置VoIP推送通知的过程与常规推送通知的过程几乎相同。 首先要做的是设置证书。 您可以像常规推送通知一样,从Apple Developer网站创建VoIP推送证书。 选择“ VoIP服务证书”,下载证书,然后导出P12文件。 其次,您需要在SNS上创建一个应用程序。 从AWS仪表板中选择SNS。 然后,选择应用程序>创建平台应用程序。 然后在配置中输入所需的信息。 应用名称:您选择的应用名称 推送通知平台:Apple开发或Apple生产 推送证书类型:VoIP推送证书 选择P12文件:选择使用来自Apple Developer网站的证书创建的VoIP推送通知P12文件。 输入密码:输入创建p12文件时指定的密码 这就是SNS设置所需的全部。 当然,您需要将此连接到服务器以进行生产。 服务器应提供一个简单的API来连接两者。 在应用程序中进行配置以接收VoIP推送通知 下一步是配置iOS项目。 选择项目文件,然后为要允许其推送通知的目标启用“功能中的后台”。 选择“ IP语音和后台提取”,以便您可以接收VoIP推送通知并在后台处理必要的步骤。 现在,我们将使用PKPushRegistry获得设备令牌。 如下所示,我们将PKPushTypeVoIP设置为PKPushRegistry实例。 您指定为代理的实例将接收与VoIP推送通知相关的回调。 在设备令牌注册视图中,您还可以添加用户数据。 您可以添加用户ID等以支持向特定设备发送推送通知。 让我们向设备发送VoIP推送通知。 选择您要发送通知的设备。 单击“ […]

本地和远程通知的概述(iOS)

Apple提供两种通知服务,以便在有新数据可用于应用程序时通知用户,即使应用程序不在前台。 例如,健身应用可能会让用户知道用户何时达到每天5000步伐,而日历应用可能会通知用户即将进行的约会。 下面列出了这两个通知: 位置通知 远程通知(即推送通知) 本地通知和远程通知之间的区别很简单。 使用本地通知,应用程序在本地配置通知详细信息,并将这些详细信息传递给系统,然后系统会在您的应用程序不在前台时处理通知的传递。 iOS,tvOS和watch OS支持本地通知。 对于远程通知,我们应该使用公司的服务器之一通过Apple推送通知服务将数据推送给用户。 iOS,tvOS,watchOS和macOS支持远程通知。 本地通知和远程通知都需要您添加代码以支持在我们的应用程序中安排和处理通知。 对于远程通知,我们应该提供一种服务器环境,该环境应能够从用户设备接收数据并将通知相关数据发送到APN(Apple推送通知服务),这是Apple提供的服务,用于处理向用户设备的远程通知传递。 在图1中,解释了远程通知的体系结构概述 图1:APNS的架构概述 本地和远程通知外观 在设备上显示本地和远程通知之间没有区别。 两种类型的通知都有默认外观,由系统提供。 我们可以选择以下选项之一来传递通知。 屏幕上的警报或横幅的 横幅 ->在使用设备时出现在屏幕顶部几秒钟,然后消失。 警报 ->在使用设备时显示在屏幕顶部,并停留在该位置,直到手动将其关闭。 应用图标上的徽章。 如图2所示 图2:带有徽章编号的应用程序图标 警报,横幅或标志伴随的声音。 处理通知的行为 每个通知都包含应用程序名称,一个小应用程序图标和一条消息。 通知中还可能伴有声音,并可能导致徽章在相应应用程序的图标上显示或更新。 通知的行为是按应用逐个设置进行管理的。 对于支持通知的应用,您可以完全启用或禁用该功能。 您可以完全启用或禁用该功能。 您还可以在“通知中心”中启用可见性,并在锁定屏幕上启用应用程序图标标记。 可用的通知框架 用户通知 通知中心框架 用户通知UI框架

iOS中带有推送通知的多种方案

这是我的有关使用推送通知的注意事项,已针对iOS 9更新 如何注册 注册以接收推送通知 在iOS 8+中不推荐使用registerForRemoteNotificationTypes 从这往哪儿走 希望本文对您有所帮助。 iOS的变化很快,因此我提到的某些内容在您阅读时可能已过时,如果是的话,请告诉我。 这是一些更有趣的链接 计划,注册和处理通知 到达iOS应用程序时处理推送通知 如果应用程序已经在后台运行,如何响应推送通知视图 在后台时didReceiveRemoteNotification 如何在启用后台模式的情况下处理远程通知 两次调用远程通知方法

将通知分为中断,提醒和积压

我进行了超过一年的实验。 我将所有iOS设备都设置为永久“请勿打扰”模式。 这是一次很棒的经历,但是我觉得我应该让少量的推送通知通过。 我设置永久“请勿打扰”的初衷是为了避免在1:1时分心。 我可以看到其他人在1:1时如何看他们的手机。 有时是推送通知。 有时他们只是不注意我。 我想避免这样做,所以我将iPhone置于DND模式。 我的Apple Watch可以镜像,因此也没有发出声音或振动。 我使用永久性DND的经验很好。 当手机震动时,我再也不会无意识地看着手机了。 我不需要收起电话,因为它的运行方式是直到我主动查看之前,它从未收到过这些推送通知。 有一个小问题:有时我错过了那些非常重要的推送通知,然后错过了会议或对时间敏感的消息。 因为我对几乎所有通知的静音感到非常满意,所以我不想更改它。 我只想要一个小补丁就能让其中的一些通过。 这促使我思考理想的推送通知模型是什么。 我的结论是,推送通知应分为3类: 中断 :中断应该中断我正在进行的任何事务,并让我立即处理它。 这应该是非常罕见的,当它发生时我不要错过。 提醒 :理想的提醒应该使我联想起处于完美环境中的事物,通常意味着正确的时间(在交易之间)和正确的位置。 待办事项 :这就像一封电子邮件在我的Gmail中未打开多年。 如果我想看看,我可以。 否则,不要来找我。 不应积压积压。 它应该被拉。 这些是理想的类别,但是iOS不允许这样的精确设置。 我必须进行一些调整,使其在iOS中实现。 存在以下约束: 首先,iOS推送通知设置基于每个应用程序。 由于大多数应用程序都没有在推送通知控件上提供更精细的粒度,因此这意味着我必须为应用程序分配类别。 如果我将中断类别分配给某个应用程序,则该应用程序发出的所有推送通知都是一个中断。 其次,仅内置应用程序具有针对iOS和watchOS的复杂通知设置。 对于大多数应用程序,只有一种声音设置。 它是打开还是关闭。 振动与声音相关联,并且它们一起切换。 Apple Watch还有一个拨动开关。 全部或全无。 这意味着,如果iPhone启用了声音和振动功能,Apple Watch也启用了声音和振动功能。 还有一件事。 因为现有技术无法在完美的环境中提醒我,所以我必须允许应用程序在方便时提醒我,并使用贪睡功能让它等待完美的环境。 基于这些限制,这是我的设置: 中断 :中断类别中的应用可以使用声音/振动。 他们可以在Apple Watch上显示通知。 我在此类别中有某些消息收发应用程序。 它们不是我的主要消息收发应用程序。 提醒 :提醒类别中的应用程序也可以使用声音/振动。 […]