Xamarin 中的 watchOS 通知
如果源 iOS 应用支持通知,则手表应用可以接收通知。 由于提供了内置通知处理,因此你不需要添加下面所述的附加通知支持,但如果你希望自定义通知行为和外观,请继续阅读。
有关向解决方案中的 iOS 应用添加通知支持的详细信息,请参阅 iOS 通知文档。
创建通知控制器
在情节提要通知控制器上,有一种特殊类型的 segue 用于触发通知。 将新的通知接口控制器拖放到情节提要上时,将自动附加一个 Segue:
选择通知 Segue 后,可以编辑其属性:
自定义控制器后,它可能类似于 WatchKitCatalog 中的示例:
有两种类型的通知:
短外观 - 系统定义的不可滚动静态视图。
长外观 - 由你定义的可滚动、可自定义视图! 可以指定更简单的静态版本和更复杂的动态版本。
短外观通知控制器
短外观 UI 仅由应用图标、应用名称和通知标题字符串组成。
如果用户不忽略该通知,系统将自动切换到提供详细信息的长外观通知。
长外观通知控制器
操作系统根据多种因素来决定是要显示静态视图还是动态视图。 必须提供静态接口,并且还可以选择包含用于通知的动态接口。
静态
静态视图应该可以简单快速地显示。
动态
动态视图可以显示更多数据并提供更好的交互性。
生成通知
通知可以来自远程服务器,也可以在 iOS 应用本地生成。
有关如何生成本地通知的示例,请参阅 iOS 通知演练。
本地通知必须将 AlertTitle
设置为在 Apple Watch 上显示 - AlertTitle
字符串显示在短外观界面中。 AlertTitle
和 AlertBody
显示在通知列表中;AlertBody
显示在长外观界面中。
此屏幕截图显示了通知列表中显示的 AlertTitle
以及长外观界面中显示的 AlertBody
:
测试通知
通知(本地和远程)只能在设备上正确测试,但你可以使用 iOS 模拟器中的 .json 文件进行模拟。
在 Apple Watch 上进行测试
在 Apple Watch 上测试通知时,请记住 Apple 文档中的陈述如下:
当应用的本地或远程通知之一到达用户的 iPhone 时,iOS 会决定是要在 iPhone 还是在 Apple Watch 上显示该通知。
这暗示了 iOS 决定是要在 iPhone 还是手表上显示通知这一事实。 如果收到通知时配对的 iPhone 处于活动状态,则该通知可能会显示在 iPhone 上,而不会路由到手表。
为了确保通知显示在手表上,请关闭 iPhone 屏幕(按电源按钮一次)或让它进入睡眠状态。 如果配对的手表处于范围内、有电量并且佩戴在手腕上,则通知将路由到手表并在其上显示(伴随微妙的动作)。
在 iOS 模拟器上进行测试
在 iOS 模拟器中测试通知模式时,必须提供测试 JSON 有效负载。 在 Visual Studio for Mac 的“自定义执行参数”窗口中设置路径。
当手表扩展设置为“启动项目”时,Visual Studio for Mac 将显示其他选项。 右键单击手表扩展项目,然后选择“运行方式”>“自定义参数...”:
这会打开包含“WatchKit”选项卡的“执行参数”窗口。选择“通知”并提供 JSON 有效负载,然后按“执行”在模拟器中启动手表应用:
使用默认的 JSON 有效负载文件在模拟器上进行测试时,默认的通知控制器如下所示:
还可以使用命令行启动 iOS 模拟器。
通知有效负载示例
下面显示了一个示例有效负载 JSON 文件 NotificationPayload.json:
{
"aps": {
"alert": "Test message content",
"title": "Optional title",
"category": "myCategory"
},
"WatchKit Simulator Actions": [
{
"title": "First Button",
"identifier": "firstButtonAction"
}
],
"customKey": "Use this file to define a testing payload for your notifications. The aps dictionary specifies the category, alert text and title. The WatchKit Simulator Actions array can provide info for one or more action buttons in addition to the standard Dismiss button. Any other top level keys are custom payload. If you have multiple such JSON files in your project, you'll be able to choose between them in when selecting to debug the notification interface of your Watch App."
}