PushNotifications 委托未触发
PushNotifications delegate not triggered
我已经看到很多类似的问题,阅读并尝试了提出的多种解决方案,但 none 似乎对我有用。
我无法调用 RemoteNotifications 的委托。 "DidRegisterForRemoteNotificationWithDeviceToken" 或 "didFailToRegisterForRemoteNotificationsWithError"。
我正在 运行 iOS9 设备上测试并使用 XCode7 和 Swift。还在开发中,仅在本地设备上进行测试。
这是我目前的代码、情况和我到目前为止所做的尝试:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
if #available(iOS 8.0, *) {
let types: UIUserNotificationType = [.Alert, .Badge, .Sound]
let settings: UIUserNotificationSettings = UIUserNotificationSettings(forTypes: types, categories: nil)
application.registerUserNotificationSettings(settings)
application.registerForRemoteNotifications()
} else {
// Fallback on earlier versions
UIApplication.sharedApplication().registerForRemoteNotificationTypes([.Alert, .Badge, .Sound])
}
return true
}
func application(application: UIApplication, DidRegisterForRemoteNotificationWithDeviceToken deviceToken: NSData)
{
print("Registration successful")
}
func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) {
print("Failed to get token; error: \(error)")
}
我已经多次检查并重新生成所有证书和配置文件。确保 "Push notifications" 处于活动状态并且它们已链接到正确的 AppID 和 BundleID。
我还检查了我是否正在构建 运行 正确的供应配置文件,无论是在项目中还是在目标功能中(在我的例子中是开发功能)
如果 "aps-environment" 被列出(并且它是)
,我检查了所说的配置文件
应用程序首次启动时,系统会提示用户选择接受应用程序通知,但仍未调用注册委托。
我尽量包含所有可能的信息,而且我尝试了几乎所有的信息,所以我希望任何人都能帮助我。即使我错过了一些愚蠢的东西 :p
谢谢!
[编辑 1]
在使用 Apple 在 TechnicalNote 2265 上提供的 APS 配置文件进行一些记录后,我设法获得了更多信息:
2015-09-23 10:42:46 +0200 apsd[102]: : 已连接快递43-courier.push.apple.com (17.110.225.83)
连接:onInterface:WWAN
2015-09-23 10:42:46 +0200 apsd[102]:copyTokenForDomain push.apple.com(空)
2015-09-23 10:42:46 +0200 apsd[102]: : 发送带有令牌的连接消息 '<76c23fe9 639be5c1 dfb5fa3a 5d6af6c9 6f6b9fb2 1e841d01 e3f05b02 1222960a>' onInterface: WWAN with activeInterval 0
2015 年 9 月 23 日 10:42:47 +0200 apsd[102]::收到未完成的数据:<08000000 1a010001 00040002 14000800 023c0005 00020003 06000400 000001>(长度 31)onInterface:WWAN。在 0 个接口上连接。
2015-09-23 10:42:47 +0200 apsd[102]: : 流处理:完成是,无效否,解析长度 31,参数 {
APS 协议命令 = 8;
APS 协议连接响应 = 0;
APS 协议双通道支持 = 1;
APSProtocolLargeMessageSize = 15360;
APSProtocolMessageSize = 5120;
}
2015-09-23 10:42:47 +0200 apsd[102]: : 默认用户的连接响应?是
2015-09-23 10:42:47 +0200 apsd[102]:要求将 isConnected=NO 更改为 YES
2015-09-23 10:42:47 +0200 apsd[102]::设置双通道支持:是
2015-09-23 10:42:47 +0200 apsd[102]: 服务器支持双模式 YES 旧值 YES
2015-09-23 10:42:47 +0200 apsd[102]: : 收到连接响应正常 - 在 1 个接口上连接。
[编辑 2]
固定的。我只是缺少代表名称中的 's'。感觉很傻但至少现在有效
据我所知,我们无法在模拟器中本地订阅 iOS 通知。不过,如果您需要将其作为应用程序的一部分进行测试,您可以查看类似以下内容:https://github.com/acoomans/SimulatorRemoteNotifications
能否请您尝试以下操作,看看是否适合您:
- 请确保您没有使用通配符包标识符(以 * 结尾)。
- 请尝试为您的应用程序重置设备以启用推送。 (见下文参考)
- 我个人在特定设备上遇到过这种情况。所以,请尝试使用不同的设备,看看问题是否仍然存在。
- 尝试不同的网络,最好打开没有任何防火墙和端口阻塞的 DSL。
If you want to simulate a first-time run of your app, you can leave
the app uninstalled for a day. You can achieve the latter without
actually waiting a day by setting the system clock forward a day or
more, turning the device off completely, then turning the device back
on.
我已经看到很多类似的问题,阅读并尝试了提出的多种解决方案,但 none 似乎对我有用。
我无法调用 RemoteNotifications 的委托。 "DidRegisterForRemoteNotificationWithDeviceToken" 或 "didFailToRegisterForRemoteNotificationsWithError"。
我正在 运行 iOS9 设备上测试并使用 XCode7 和 Swift。还在开发中,仅在本地设备上进行测试。
这是我目前的代码、情况和我到目前为止所做的尝试:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
if #available(iOS 8.0, *) {
let types: UIUserNotificationType = [.Alert, .Badge, .Sound]
let settings: UIUserNotificationSettings = UIUserNotificationSettings(forTypes: types, categories: nil)
application.registerUserNotificationSettings(settings)
application.registerForRemoteNotifications()
} else {
// Fallback on earlier versions
UIApplication.sharedApplication().registerForRemoteNotificationTypes([.Alert, .Badge, .Sound])
}
return true
}
func application(application: UIApplication, DidRegisterForRemoteNotificationWithDeviceToken deviceToken: NSData)
{
print("Registration successful")
}
func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) {
print("Failed to get token; error: \(error)")
}
我已经多次检查并重新生成所有证书和配置文件。确保 "Push notifications" 处于活动状态并且它们已链接到正确的 AppID 和 BundleID。
我还检查了我是否正在构建 运行 正确的供应配置文件,无论是在项目中还是在目标功能中(在我的例子中是开发功能) 如果 "aps-environment" 被列出(并且它是)
,我检查了所说的配置文件应用程序首次启动时,系统会提示用户选择接受应用程序通知,但仍未调用注册委托。
我尽量包含所有可能的信息,而且我尝试了几乎所有的信息,所以我希望任何人都能帮助我。即使我错过了一些愚蠢的东西 :p
谢谢!
[编辑 1] 在使用 Apple 在 TechnicalNote 2265 上提供的 APS 配置文件进行一些记录后,我设法获得了更多信息:
2015-09-23 10:42:46 +0200 apsd[102]: : 已连接快递43-courier.push.apple.com (17.110.225.83)
连接:onInterface:WWAN
2015-09-23 10:42:46 +0200 apsd[102]:copyTokenForDomain push.apple.com(空)
2015-09-23 10:42:46 +0200 apsd[102]: : 发送带有令牌的连接消息 '<76c23fe9 639be5c1 dfb5fa3a 5d6af6c9 6f6b9fb2 1e841d01 e3f05b02 1222960a>' onInterface: WWAN with activeInterval 0
2015 年 9 月 23 日 10:42:47 +0200 apsd[102]::收到未完成的数据:<08000000 1a010001 00040002 14000800 023c0005 00020003 06000400 000001>(长度 31)onInterface:WWAN。在 0 个接口上连接。
2015-09-23 10:42:47 +0200 apsd[102]: : 流处理:完成是,无效否,解析长度 31,参数 {
APS 协议命令 = 8;
APS 协议连接响应 = 0;
APS 协议双通道支持 = 1;
APSProtocolLargeMessageSize = 15360;
APSProtocolMessageSize = 5120;
}
2015-09-23 10:42:47 +0200 apsd[102]: : 默认用户的连接响应?是
2015-09-23 10:42:47 +0200 apsd[102]:要求将 isConnected=NO 更改为 YES
2015-09-23 10:42:47 +0200 apsd[102]::设置双通道支持:是
2015-09-23 10:42:47 +0200 apsd[102]: 服务器支持双模式 YES 旧值 YES
2015-09-23 10:42:47 +0200 apsd[102]: : 收到连接响应正常 - 在 1 个接口上连接。
[编辑 2] 固定的。我只是缺少代表名称中的 's'。感觉很傻但至少现在有效
据我所知,我们无法在模拟器中本地订阅 iOS 通知。不过,如果您需要将其作为应用程序的一部分进行测试,您可以查看类似以下内容:https://github.com/acoomans/SimulatorRemoteNotifications
能否请您尝试以下操作,看看是否适合您:
- 请确保您没有使用通配符包标识符(以 * 结尾)。
- 请尝试为您的应用程序重置设备以启用推送。 (见下文参考)
- 我个人在特定设备上遇到过这种情况。所以,请尝试使用不同的设备,看看问题是否仍然存在。
- 尝试不同的网络,最好打开没有任何防火墙和端口阻塞的 DSL。
If you want to simulate a first-time run of your app, you can leave the app uninstalled for a day. You can achieve the latter without actually waiting a day by setting the system clock forward a day or more, turning the device off completely, then turning the device back on.