我正在创建一个 Xamarin Forms 应用程序,它通过 Azure 通知中心使用后台推送。该应用程序针对 Android 和 iOS,经过一些初步原型设计和测试后,一切在两个平台上都运行良好。对于 iOS,我发送包含以下内容的推送:
{ "aps": { "content-available": 1, "apns-priority": 5, "sound": "", "badge": 0 }, "id": 10, "title": "PushDemo", "message": "Hello #10!" }
In my AppDelegate
the DidReceiveRemoteNotification
无论应用程序处于活动状态、在后台还是完全关闭,方法都会被调用。然后,我通过代码手动创建一个可见的通知并将其显示给用户(并且因为我还需要执行一些其他逻辑,所以我不直接在推送中使用“警报”)。
然后,我开始在 Android 项目中实现所有特定于平台的逻辑,并通过我的后端服务发送了一堆测试通知,其中我的 iPhone 仍然在原型设计阶段注册。因此,当我测试 Android 应用程序时,我看到我的 iPhone 也收到了所有测试推送。完成 Android 端后,我回到 iOS 并在那里实现了所有内容,仍然按预期工作。但不久之后 iPhone 就停止接收我的推送了。
经过调查我发现DidReceiveRemoteNotification
不再被调用,无论应用程序的状态如何,只有WillPresentNotification
in my UNUserNotificationCenterDelegate
如果应用程序在前台处于活动状态,则调用。
经过更多调查(并使用相同的代码验证我的测试应用程序仍然完全工作),我发现除了在代码中调用我的处理程序之外,一切都在后台工作(例如徽章号码更新)。
然后,我在收到推送后挖掘设备日志并发现以下内容:
dasd[93] : com.apple.pushLaunch.com.Company.MyApp:AB795D:[ {名称:ApplicationPolicy,policyWeight:50.000,响应:{决定:绝对不能继续,分数:0.00,理由:[{[pushDisallowed] :必需:0.00,观察到:1.00},]}}
],最终决定:绝对不能继续}
(顺便说一句:我必须使用Mac才能得到这一点,VS中的设备日志没有显示[
)
我猜我 iPhone 的省电程序认为我的应用程序污染了我的手机,因为收到了很多通知但没有进行交互。
如何让我的 iPhone 再次允许这些通知?