在iOS上没有接收推送形式的Urban Airship

时间:2016-10-17 14:20:57

标签: ios iphone urbanairship.com

我正在尝试让我的iOS设备再次接收推送通知,但它并没有真正发挥作用。

我工作的环境:

我的项目设置

  • 我需要支持的平台:iOS8 +
  • 我正在使用的UA版本:8.0.1(使用Cocoapods安装)
  • 后台模式(远程通知)和推送通知已开启

我的代码

  • 向应用程序代表添加了didReceiveRemoteNotification::√
  • 为iOS10添加了UNUserNotificationCenter支持(并实施了委托方法):√

  • 配置UAConfig:√

  • UA起飞:√
  • UAPush拥有全部notificationOptionsuserPushNotificationsEnabled设置为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方法的调用。

但是,唉,这些方法都不敢叫。

我不清楚为什么push不会被推到我的设备上。我在UA中检查了应用程序,当我搜索设备令牌时,已安装已选择背景均为绿色。

iOS 8,9和iOS10都出现了问题。但我不确定这是否真的是操作系统的事情。

为什么呢?

因为我找到了支持券here以及底部的某个地方“ aboca_ext ”(只是在页面中搜索他/她的用户名)说:

  

大家好,我发现了我的问题,当我的应用程序启动时,我正在清理缓存,但是在UA启动了sqlite db后,我正在删除它们的数据库。在我修好之后,一切都按原样运作。

现在这很有趣,因为我的项目也使用了SQLCipher,我想知道是否会产生某种冲突(即使我没有清除任何缓存或者其他任何东西),但是我没有看到SQLCipher或UA产生任何错误 另一个有趣的(实际上并不那么有趣)注意事项是我认为UA在使用Cocoapods安装后实际上开始失败了,但是再次 - 我不确定这是不是问题。

1 个答案:

答案 0 :(得分:1)

Urban Airship SDK负责为您注册UNUserNotificationCenter。您应该可以删除注册电话。我不认为这会给你造成问题,但它可能会阻止一些功能,如OOTB类别的工作。

对于推送通知事件,我建议使用UAPush实例上的推送委托而不是工厂方法或UNUserNotificationCenter进行监听。在所有OS版本中调用UA委托方法。希望它有助于简化您的事件处理代码。

删除sql lite数据库可能会导致一些报告问题,但我希望push继续工作。您可以打开详细日志记录和频道注册有效负载,以查看opt_in是否设置为true?您可以在UAConfig对象上启用详细日志记录。