1

我们一直在尝试让 iOS 推送通知正常工作,但结果非常不一致。我们用尽可能少的代码创建了一个测试项目,只是为了让通知工作。

我们决定使用警报通知进行测试,因为我们甚至无法让它始终如一地工作。

这就是我们在 AppDelegate 的 FinishedLaunching 方法中一直在做的事情:

            UNUserNotificationCenter.Current.Delegate = this;

            var authOptions = UNAuthorizationOptions.Alert | UNAuthorizationOptions.Badge | UNAuthorizationOptions.Sound;
            UNUserNotificationCenter.Current.RequestAuthorization(authOptions, (granted, error) =>
            {
                LogInformation("RequestAuthorization", $"Granted: {granted}, Error: {error}");
                if (granted)
                    InvokeOnMainThread(UIApplication.SharedApplication.RegisterForRemoteNotifications);
            });

我们在控制台中记录设备的注册令牌,以便我们可以使用它来发送通知。

    public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)
    {
        LogInformation("RegisteredForRemoteNotifications", "init");
        var token = ExtractToken(deviceToken);
        LogInformation("RegisteredForRemoteNotifications", token);
    }

这基本上就是我们现在在应用程序中拥有的所有内容。我们在测试应用程序中使用通知令牌向该特定设备发送通知。这些是我们的结果:

用例 1

  1. 重启设备
  2. 向设备发送通知

    结果:通知出现,所有新通知也继续工作。

用例 2

  1. 重启设备
  2. 向设备发送通知

    结果:通知未显示,无论您多久发送一次通知,都不会显示。

用例 3

  1. 重启设备
  2. 向设备发送通知
  3. 未显示通知。
  4. 重启设备

    结果:通知出现,所有新通知也继续工作。

用例 4

  1. 重启设备
  2. 开始申请一次
  3. 将应用程序置于后台,或完全关闭它
  4. 向设备发送通知

    结果:显示通知,所有新通知也继续工作。

所以看起来一旦我们收到 1 个通知,所有未来的通知都将正常工作,直到设备重新启动。重新启动设备后,它基本上是一个硬币翻转:你要么很幸运并收到通知和所有未来的通知。或者你什么都没有收到。

我们希望始终如一地接收通知,并试图弄清楚如何完成这项工作,我们希望有人能对此事有所了解。

提前致谢。

笔记

  • 我们使用的是带有 iOS 13.5.1 的第 6 代 iPad

  • iPad只有WiFi

  • 我们有稳定的 WiFi 和互联网连接

4

0 回答 0