我目前正在为iOS的Flutter应用程序添加通知,我想在Android上添加类似于largeIcon
的东西,到目前为止我还没有找到一种方法来做到这一点,只添加一个图像,这不是一个解决方案,因为我只想要一个图标在右边,即使用户扩展通知(图像也会扩展,在这种情况下,这对我的用例来说是不可取的)。
作为替代方案,我想知道我是否可以改变通知应用程序的图标.据我环顾四周,这是不可能的,但在同一时间,我看到这个图像的通知(第一个和最后一个)有一个自定义的图像和应用程序的图标更小.
我如何在我的应用程序中做到这一点?我无法在文档中找到任何方法来做到这一点。
2条答案
按热度按时间ocebsuys1#
您可以通过通信通知来实现这一点。来自HIG:
系统会自动在每个通知的前沿显示您的应用图标的大版本;在通信通知中,系统会显示发件人的联系人图像(或头像),上面印有您的小图标。
Here是关于如何在应用中实现通信通知的文档。
rn0zuynd2#
我不是一个巨大的风扇,只是指向一个文档,因为它是不是真的有帮助的人不熟悉的事情(包括我自己)。所以这里是Flutter的一个完整的功能示例。这肯定也适用于其他iOS应用程序。它遵循Apple Implementing communication notifications提供的文档,并添加了一个实际的准备运行案例。请确保调整您的有效负载/示例有效负载用于演示,但可以与注解的有效负载片段结合使用。
设置和准备您的项目
在你开始之前,你必须做一些准备工作,让一切都开始运行。我假设你已经有一个项目,否则就用
flutter create
创建一个。Xcode能力
在你的目标中选择“Runner”并点击
+ Capability
添加通讯通知功能。这是显示通讯通知所必需的。x1c 0d1x调整Info.plist
转到
ios\Runner\Info.plist
并添加键NSUserActivityTypes
和INSendMessageIntent
值。这允许我们使用SendMessageIntent,因为我们基本上是在向自己发送消息。注意:我删除了所有其他的条目,只是为了避免混淆我的答案。将键和它的数组添加到Info.plist中,不要删除任何其他内容!信息列表
通知服务扩展
1.在Xcode中选择“Runner”-Project
1.转到“文件”=〉“新建”=〉“目标”
1.搜索通知服务扩展并单击“下一步”
1.为您的扩展添加一个软件包名称并点击“完成”
现在我们应该有一个工作项目,其中包含一个代表我们扩展的
NotificationService.swift
代码文件。这是我们现在可以调整接收到的通知的地方。我在下面给出了一个可以运行的代码示例,并附上了所有必要的注解。
NotificationService.swift
其他注意事项
我已经添加了额外的注意事项和需要考虑的事项,因为仅仅显示消息通常是不够的,还有其他需要考虑的陷阱。我相信它们会为您节省一些时间,特别是您无法可靠地使用iOS上的静默通知的部分(这就是我们必须使用通知服务扩展的原因)。
FCM负载/静默推送
请确保您确实使用了iOS / APNS的实际警报,因为静默通知在应用程序的某个非活动时间后将不会被处理。在Flutter上,它会在某种程度上工作,然后停止工作。这是设计好的,但对于新手来说,这是一个巨大的陷阱,因为直到用户抱怨他们在一定时间后没有收到通知,您才能识别出它。您可以使用playground生成令牌并在使用FCM时测试您的实现:Google OAuth Playground
FCM负载示例
您仍然可以在Android上使用静默通知,因为即使处于终止状态,它们也会触发您的应用。这样,您可以在Android上使用Flutter插件,并在平台为iOS时禁用它们。或者您可以使用组合并根据您的情况打开/关闭前台可视化。
插件使用
如果你在Flutter App中使用了flutter_local_notifications和firebase_messaging这样的插件,请注意,当“mutable-content”设置为1时,会调用扩展。因此,如果你看到你的通知两次,甚至在不同的布局中,那么你必须在前台禁用演示,或者在平台是iOS时放弃调用flutter_local_notifications,让你的扩展处理可视化。
关闭前台通知
iOS推送通知附件
默认情况下,只有第一个附件在推送通知中显示为缩略图。请记住这一点。如果您需要更具体的行为,请使用“Rich Notifications”(即通知内容扩展)。
所有通知都会调用您的分机!
请记住,您的扩展将被调用您的应用将收到的所有通知。例如,在您的扩展中使用类别标识符(request.content.categoryIdentifier)来过滤或提交有效负载中的类型(就像我做的那样)。
示例