我们一直在尝试让 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
- 重启设备
向设备发送通知
结果:通知出现,所有新通知也继续工作。
用例 2
- 重启设备
向设备发送通知
结果:通知未显示,无论您多久发送一次通知,都不会显示。
用例 3
- 重启设备
- 向设备发送通知
- 未显示通知。
重启设备
结果:通知出现,所有新通知也继续工作。
用例 4
- 重启设备
- 开始申请一次
- 将应用程序置于后台,或完全关闭它
向设备发送通知
结果:显示通知,所有新通知也继续工作。
所以看起来一旦我们收到 1 个通知,所有未来的通知都将正常工作,直到设备重新启动。重新启动设备后,它基本上是一个硬币翻转:你要么很幸运并收到通知和所有未来的通知。或者你什么都没有收到。
我们希望始终如一地接收通知,并试图弄清楚如何完成这项工作,我们希望有人能对此事有所了解。
提前致谢。
笔记
我们使用的是带有 iOS 13.5.1 的第 6 代 iPad
iPad只有WiFi
我们有稳定的 WiFi 和互联网连接