我在我的应用中设置了推送通知.我正在尝试确定我在application:didRegisterForRemoteNotificationsWithDeviceToken:方法中从APNS收到的设备令牌是来自沙箱还是开发环境.如果我可以区分哪个环境初始化了令牌,我将能够告诉我的服务器向哪个环境发送推送通知.
我已经尝试使用DEBUG宏来确定这一点,但我已经看到了一些奇怪的行为,并且不相信它是100%正确的.
#ifdef DEBUG
BOOL isProd = YES;
#else
BOOL isProd = NO;
#endif
Run Code Online (Sandbox Code Playgroud)
理想情况下,我可以aps-environment在代码中检查权利(值是开发或生产),但我不确定这是否可行.
确定您的应用是否正在与APNS沙箱或生产环境进行通信的正确方法是什么?我假设服务器首先需要知道这一点.如果假设不正确,请纠正我.
编辑:Apple关于提供商与APNS通信的文档详细说明了与沙箱进行通信和生产之间的区别.但是,文档未提供有关如何与注册令牌(来自iOS客户端应用程序)以及与服务器通信一致的信息.
我正在构建一个针对iOS7和iOS8的应用程序.我要求用户发送推送通知的权限.但出于某种原因,application:didFailToRegisterForRemoteNotificationsWithError如果我在被要求获得推送权限时单击"否" ,iOS7和iOS8都不会调用我的处理程序.
我的问题:我在iOS7和iOS8上如何知道用户何时驳回了推送通知的请求 - 我怎么知道他们是否拒绝了请求?
我已经查看了一堆StackOverflow答案,并已实现了他们的建议,但它没有按照记录的方式工作:
application:didRegisterForRemoteNotificationsWithDeviceToken:处理程序.所以我可以告诉他们批准了它.但是如果用户拒绝请求,那么我就不会收到回调application:didFailToRegisterForRemoteNotificationsWithError.这似乎是一个错误,我不能告诉用户拒绝了该请求.application:didRegisterUserNotificationSettings处理程序.我可以查看notificationSettings参数以查看用户是否批准或拒绝了我的请求,这样很方便.isRegisteredForRemoteNotifications()(例如,当应用程序稍后变为活动状态时),它始终返回true - 即使用户已拒绝该请求.所以我得到了误报.这似乎是一个错误,我看到其他人也注意到了这一点.let settings = UIApplication.sharedApplication().currentUserNotificationSettings(),我可以查看settings.types是否允许提醒.所以对于iOS8来说,看起来我已经完成了设置.我正在使用NSUserDefaults布尔值来跟踪我是否已经要求用户授予权限.
我正在使用硬件设备进行测试(带有iOS7的iPhone 4S和带有iOS8的iPhone 5),而不是模拟器.
我在每次测试后重置我的设备,以使其再次显示请求警报.
这是我如何注册推送通知.该if分支采用iOS8,else分支采用iOS7:
let application = UIApplication.sharedApplication()
if (application.respondsToSelector("registerUserNotificationSettings:")) {
let settings = UIUserNotificationSettings(forTypes: .Badge | .Alert | .Sound,
categories: nil )
application.registerUserNotificationSettings(settings)
} else { …Run Code Online (Sandbox Code Playgroud) 我已经创建了开发和生产pem文件.我已按照以下步骤操作:
1)developer.apple.com:AppIDs部分检查Bundle id支持开发SSL证书,如果没有则创建该证书(支持APNS)
2)打开钥匙链
3)右键单击我们的证书和出口证书.
4)你将从这里得到.p12文件:like:hope_APNS.p12
5)打开控制台(终端)并运行以下命令(在此处使用创建的.p12文件作为输入)openssl pkcs12 -in apns-dev-cert.p12 -out apns-dev-cert.pem -nodes -clcerts
6)你将获得相同的.pem文件.(如hope_APNS.pem)
开发pem文件工作正常.但是有一些生产pem文件.当我设置生产pem文件并从控制台发送推送通知.我不会推动我的设备.
我注意到APNS生产和开发环境之间的didReceiveRemoteNotification的不同行为.
在开发模式(使用开发配置文件构建)中,当用户点击通知时,将调用此方法.在背景和活动状态.
但是在生产模式(使用adhoc配置配置文件构建)中,当用户点击通知时,如果应用程序处于后台或未处于活动状态,但当应用程序处于活动状态时,此方法在接收通知时会立即调用,则会调用此方法.
任何人都可以帮我理解这种不同的行为吗?
我希望我的用户在点击通知(处于活动状态)时重定向到不同的屏幕,但由于这种行为,他会自动重定向到其他屏幕.
push-notification apple-push-notifications ios remote-notifications
我收到了来自 Apple 的这封邮件。
“在 2021 年 3 月 29 日,与 Apple 推送通知服务的基于令牌和证书的 HTTP/2 连接必须包含新的根证书 (AAACertificateServices 5/12/2020),它取代了旧的 GeoTrust Global CA 根证书。以确保无缝连接转换并避免推送通知传递失败,请在 3 月 29 日之前验证 HTTP/2 接口的新旧根证书都包含在每个通知服务器的信任存储中。
请注意,此时不需要更新 Apple 向您颁发的 Apple Push Notification 服务 SSL 提供商证书。”
我将 Firebase 配置为提供者服务器并使用 APNS 身份验证密钥。
步骤如下: 1.
我下载了AAA证书
2.在钥匙串中
打开 3.尝试将其导出为p12,因为它没有私钥,所以无法执行。4.因此无法将此证书导出到 Firebase 服务器。
我不知道我到底该怎么做。苹果网站或任何其他网站上都没有这方面的文档。
更具体地说,我应该从我的角度做任何事情还是应该由像 Firebase 这样的提供商服务器来处理?
我想知道为什么苹果没有明确提到这些说明?
在Apple文档中,您可以找到以下句子:
应用程序应在每次启动时进行注册,并为其提供者提供当前令牌.它调用registerForRemoteNotificationTypes:启动注册过程.
因此,当我在我的应用程序中实现推送通知时,我必须注册该设备,并且我按照他们在该文档中所说的做了:每次用户启动我的应用程序时都会注册.我从APNS收到的令牌对于给定用户始终是相同的.
我的问题是:如果APNS给我总是相同的令牌,我为什么每次都需要注册?
如果用户刷了他的iPhone或应用程序,我读到的地方可能会改变.这是唯一的案例吗?
谢谢 !
我在一台设备上有两个应用程序.对于iOS 7,两个应用程序都发送不同的设备令牌,但对于iOS 6,这两个应用程序都发送相同的设备令牌.
根据我的理解,设备令牌必须与一个设备中的所有应用程序相同.iOS7与iOS 6有什么不同吗?
在PushKit中提到我们可以使用常规推送或VoIP推送.但我没有找到任何PKPushType用于常规推送的文档.有没有人尝试使用PushKit定期推送?如果我不使用VoIP,如果收到推送通知,可以在后台启动被杀应用程序吗?这意味着如果应用程序被杀死并且通知出现并且用户没有对其采取行动,那么如果我使用PushKit,iOS可以在后台启动应用吗?
push-notification apple-push-notifications ios appdelegate ios8
我使用推送证书从客户端转发了一个p12文件.
我是否可以在没有任何后果的情况下更改此p12文件的密码?如果是,我可以使用以下内容:
openssl pkcs12 -in Certificates.p12 -out temp.pem -passin pass: -passout
pass:temppassword
openssl pkcs12 -export -in temp.pem -out Certificates-final.p12 -passin
pass:temppassword -passout pass:newpassword
rm -rf temp.pem
Run Code Online (Sandbox Code Playgroud)
我发现这本网站上的点击这里
在我的一个证书过期之前,我没有将从FCM发送推送通知到我的iOS应用程序的问题.更改后,FCM不再提供消息.我阅读了这篇文章(https://firebase.googleblog.com/2017/01/debugging-firebase-cloud-messaging-on.html),这是我到目前为止所经历的验证步骤,但我正在打败我的头脑现在在墙上......
任何人都有这种超级令人沮丧的事情的经验,并就如何进行提出建议?
同样值得注意的是我无法删除APNs证书,我看到了选项,但它显示为灰色,我无法选择它.
apple-push-notifications ios firebase firebase-cloud-messaging