iOS 未收到来自 Urban Airship 的推送
Not receiving push form Urban Airship on iOS
我正在尝试让我的 iOS 设备再次接收推送通知,但效果并不理想。
我的工作环境:
我的项目设置
- 我需要支持的平台:iOS8+
- 我使用的UA版本:8.0.1(使用Cocoapods安装)
- 后台模式(远程通知)和推送通知已开启
我的代码
- 向应用委托添加
didReceiveRemoteNotification:
:√
为 iOS10 添加了 UNUserNotificationCenter
支持(并实现了委托方法):√
配置了一个UAConfig
:√
- UA起飞:√
- UAPush 拥有所有
notificationOptions
并且 userPushNotificationsEnabled
设置为 YES
: √
以下是我的一些代码片段:
(在applicationDidFinishLaunching:
)
if (UNUserNotificationCenter.class) {
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
[center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge)
completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (!error) {
[[UIApplication sharedApplication] registerForRemoteNotifications];
} else {
DLog(@"There was an error trying to request authorization for push: %@", error);
}
}];
} else {
[[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings
settingsForTypes:(UIUserNotificationTypeAlert
| UIUserNotificationTypeSound
| UIUserNotificationTypeBadge)
categories:nil]];
[[UIApplication sharedApplication] registerForRemoteNotifications];
}
UAConfig *config = [UAConfig config];
config.inProduction = self.urbanAirshipInProduction;
if(self.urbanAirshipInProduction) {
config.productionAppKey = self.urbanAirshipKey;
config.productionAppSecret = self.urbanAirshipSecret;
} else {
config.developmentAppKey = self.urbanAirshipKey;
config.developmentAppSecret = self.urbanAirshipSecret;
}
[UAirship takeOff:config];
UAPush *pusher = [UAirship push];
pusher.notificationOptions = (UANotificationOptionAlert |
UANotificationOptionBadge |
UANotificationOptionSound);
pusher.pushNotificationDelegate = self;
pusher.userPushNotificationsEnabled = YES;
使用上面的代码,我希望收到对 iOS10 的 applicationDidReceiveRemoteNotification:fetchCompletionHandler:
和 UNUserNotificationCenterDelegate
方法的调用。
但是,唉,none 方法甚至敢被调用。
我不知道为什么推送不会推送到我的设备。我检查了UA中的应用程序,当我搜索时,Installed、Opted in和Background都是绿色的我的设备令牌。
iOS 8,9 和 iOS10 都会出现问题。但我不确定这是否真的是 OS 事情。
为什么?
因为我找到了支持票 here 和底部的某处“aboca_ext”(只需在页面中搜索 his/her 用户名) 说:
Hi guys, I found my problem, I was cleaning up my cache when my application was starting, but after UA initiated sqlite db, and by this I was deleting their db. After I fixed that, everything worked as it should.
这很有趣,因为我的项目也使用 SQLCipher
,我想知道这是否会产生某种冲突(即使我没有清除 any 缓存或其他),但我没有看到 SQLCipher 或 UA 产生的任何错误。
另一个有趣的(实际上并不那么有趣)的注意事项是,我认为 UA 在使用 Cocoapods 安装它之后实际上开始失败了,但是再次——我不确定这是否是问题所在。
Urban Airship SDK 负责为您注册 UNUserNotificationCenter。您应该能够删除注册电话。我认为它不会给您带来问题,但它可能会阻止某些功能(例如 OOTB 类别)工作。
至于推送通知事件,我建议使用 UAPush 实例上的推送委托而不是工厂方法或 UNUserNotificationCenter 来监听。 UA 委托方法在所有 OS 版本中被调用。希望它能帮助简化您的事件处理代码。
删除 sql 精简版数据库可能会导致一些报告问题,但我希望推送能够继续工作。您能否打开详细日志记录和频道注册有效负载以查看 opt_in 是否设置为 true?您可以在 UAConfig 对象上启用详细日志记录。
我正在尝试让我的 iOS 设备再次接收推送通知,但效果并不理想。
我的工作环境:
我的项目设置
- 我需要支持的平台:iOS8+
- 我使用的UA版本:8.0.1(使用Cocoapods安装)
- 后台模式(远程通知)和推送通知已开启
我的代码
- 向应用委托添加
didReceiveRemoteNotification:
:√ 为 iOS10 添加了
UNUserNotificationCenter
支持(并实现了委托方法):√配置了一个
UAConfig
:√- UA起飞:√
- UAPush 拥有所有
notificationOptions
并且userPushNotificationsEnabled
设置为YES
: √
以下是我的一些代码片段:
(在applicationDidFinishLaunching:
)
if (UNUserNotificationCenter.class) {
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
[center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge)
completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (!error) {
[[UIApplication sharedApplication] registerForRemoteNotifications];
} else {
DLog(@"There was an error trying to request authorization for push: %@", error);
}
}];
} else {
[[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings
settingsForTypes:(UIUserNotificationTypeAlert
| UIUserNotificationTypeSound
| UIUserNotificationTypeBadge)
categories:nil]];
[[UIApplication sharedApplication] registerForRemoteNotifications];
}
UAConfig *config = [UAConfig config];
config.inProduction = self.urbanAirshipInProduction;
if(self.urbanAirshipInProduction) {
config.productionAppKey = self.urbanAirshipKey;
config.productionAppSecret = self.urbanAirshipSecret;
} else {
config.developmentAppKey = self.urbanAirshipKey;
config.developmentAppSecret = self.urbanAirshipSecret;
}
[UAirship takeOff:config];
UAPush *pusher = [UAirship push];
pusher.notificationOptions = (UANotificationOptionAlert |
UANotificationOptionBadge |
UANotificationOptionSound);
pusher.pushNotificationDelegate = self;
pusher.userPushNotificationsEnabled = YES;
使用上面的代码,我希望收到对 iOS10 的 applicationDidReceiveRemoteNotification:fetchCompletionHandler:
和 UNUserNotificationCenterDelegate
方法的调用。
但是,唉,none 方法甚至敢被调用。
我不知道为什么推送不会推送到我的设备。我检查了UA中的应用程序,当我搜索时,Installed、Opted in和Background都是绿色的我的设备令牌。
iOS 8,9 和 iOS10 都会出现问题。但我不确定这是否真的是 OS 事情。
为什么?
因为我找到了支持票 here 和底部的某处“aboca_ext”(只需在页面中搜索 his/her 用户名) 说:
Hi guys, I found my problem, I was cleaning up my cache when my application was starting, but after UA initiated sqlite db, and by this I was deleting their db. After I fixed that, everything worked as it should.
这很有趣,因为我的项目也使用 SQLCipher
,我想知道这是否会产生某种冲突(即使我没有清除 any 缓存或其他),但我没有看到 SQLCipher 或 UA 产生的任何错误。
另一个有趣的(实际上并不那么有趣)的注意事项是,我认为 UA 在使用 Cocoapods 安装它之后实际上开始失败了,但是再次——我不确定这是否是问题所在。
Urban Airship SDK 负责为您注册 UNUserNotificationCenter。您应该能够删除注册电话。我认为它不会给您带来问题,但它可能会阻止某些功能(例如 OOTB 类别)工作。
至于推送通知事件,我建议使用 UAPush 实例上的推送委托而不是工厂方法或 UNUserNotificationCenter 来监听。 UA 委托方法在所有 OS 版本中被调用。希望它能帮助简化您的事件处理代码。
删除 sql 精简版数据库可能会导致一些报告问题,但我希望推送能够继续工作。您能否打开详细日志记录和频道注册有效负载以查看 opt_in 是否设置为 true?您可以在 UAConfig 对象上启用详细日志记录。