gpt4 book ai didi

android - 如何设置发送到NotificationHub的推送通知的高优先级

转载 作者:行者123 更新时间:2023-12-03 09:36:07 24 4
gpt4 key购买 nike

我已成功实现 Azure Function,它将推送通知发送到适用于 Android、iOS 和 UWP 的 NotificationHub。在测试过程中,我发现当 Android 设备处于打瞌睡模式时,锁定屏幕上不会发送推送通知。仅当我解锁手机时才会交付。

我发现this stackoverflow post ,这帮助我使用方法 SendFcmNativeNotificationAsync 修复了它。我使用了这段代码:

string payload = @"{
""data"":{
""notificationtype"":""sap"",
""title"":""value2"",
},
""priority"":""high""
}";

await hub.SendFcmNativeNotificationAsync(payload);

但是,我使用 SendNotificationAsync 方法实现,该方法适用于所有 3 个平台,但不适用于 Doze 模式。这是我发送通知的代码:

Dictionary<string, string> templateParameters = new Dictionary<string, string>();

templateParameters["alert"] = "Test";
templateParameters["title"] = "Whosap";

var notification = new TemplateNotification(templateParameters);
await hub.SendNotificationAsync(notification);

我尝试设置通知标题:

var headers = new Dictionary<string, string> { { "android", @"{""priority"": ""high""}" } };
notification.Headers = headers;

但这没有用。有谁知道如何在 TemplateNotification 对象中设置优先级并使用 SendNotificationAsync 方法发送它?

这就是我强制/取消强制设备进入瞌睡模式的方法:

adb shell dumpsys deviceidle force-idle
adb shell dumpsys deviceidle unforce

最佳答案

根据您的评论,您希望“仅提供信息性推送通知”,不幸的是,您无法强制手机每次都显示您的通知。这并不构成 Xamarin 甚至 Azure Functions 的限制。甚至 Google 自己的一些应用程序的行为也是相同的。

查看 Doze checklist :

If your users must see a notification right away, make sure to use an FCM high priority message

即使我们看Using FCM to interact with your app while the device is idle :

FCM is optimized to work with Doze and App Standby idle modes by means of high-priority FCM messages. FCM high-priority messages let you reliably wake your app to access the network, even if the user’s device is in Doze or the app is in App Standby mode. In Doze or App Standby mode, the system delivers the message and gives the app temporary access to network services and partial wakelocks, then returns the device or app to the idle state.

到目前为止,如果您决定使用高优先级消息,一切都会正常工作。然而,这并不是故事的全部。您将优先级设置为高 "priority":"high" 是正确的。不幸的是,此设置有一些警告( from docs ):

High priority messages generally should result in user interaction with your app or its notifications. If FCM detects a pattern in which they don't, your messages may be de-prioritized.

这意味着,如果您仅发送信息性通知,则不足以将设备从打瞌睡模式唤醒并显示通知。 Android P 的检查/限制变得更加严格。了解应用程序待机存储桶 here .

好处是退出打瞌睡模式可以通过各种事件/交互的形式进行:

As soon as the user wakes the device by moving it, turning on the screen, or connecting a charger, the system exits Doze and all apps return to normal activity.

至少在我尝试过的手机上,在正常的日常场景中,通知会在您夜间 sleep 期间或当设备坐在那里没有任何交互/移动等情况下暂停。

但是,如果您确实需要发送每个通知,并且它对用户体验至关重要,那么您有 2 个选择:

  1. 如果您不想进行用户交互 - 将优先级设置为高,并希望系统偶尔显示一些通知(可能在维护时段期间)。这不是最好的方法,但默认情况下它有时可能会起作用。
  2. 如果您想保证弹出通知,请使用一些屏幕向用户描述问题,然后将用户导航到设置 -> 应用程序和通知 -> 高级 -> 特殊应用程序访问-->电池优化。然后他/她可以选择您的应用并手动将其设置为“不优化”。请记住,这不被认为是最佳实践,并且:a)用户不应该知道此操作的后果,b)最好将所有事情留给操作系统,以便它按预期工作。<

总而言之,您不必将通知的优先级设置为,因为操作系统会认为这是一个简单的信息通知,并且现在会唤醒手机。请记住,当手机进入“深度 sleep ”打瞌睡模式时,它不应该也不应该因信息通知而唤醒,因此尝试没有意义 - 这是设计使然。否则,其他所有开发人员都可以将其通知优先级设置为高,而手机可能永远不会进入打瞌睡模式,这将使该功能毫无用处。

关于android - 如何设置发送到NotificationHub的推送通知的高优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62067685/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com