Xamarin 中的 watchOS 通知

如果源 iOS 应用支持通知,则手表应用可以接收通知。 由于提供了内置通知处理,因此你不需要添加下面所述的附加通知支持,但如果你希望自定义通知行为和外观,请继续阅读

有关向解决方案中的 iOS 应用添加通知支持的详细信息,请参阅 iOS 通知文档。

创建通知控制器

在情节提要通知控制器上,有一种特殊类型的 segue 用于触发通知。 将新的通知接口控制器拖放到情节提要上时,将自动附加一个 Segue

附加了 segue 的新通知接口控制器

选择通知 Segue 后,可以编辑其属性:

已选择通知 segue

自定义控制器后,它可能类似于 WatchKitCatalog 中的示例:

通知属性

有两种类型的通知:

  • 短外观 - 系统定义的不可滚动静态视图

  • 长外观 - 由你定义的可滚动、可自定义视图! 可以指定更简单的静态版本和更复杂的动态版本。

短外观通知控制器

短外观 UI 仅由应用图标、应用名称和通知标题字符串组成。

如果用户不忽略该通知,系统将自动切换到提供详细信息的长外观通知。

长外观通知控制器

操作系统根据多种因素来决定是要显示静态视图还是动态视图。 必须提供静态接口,并且还可以选择包含用于通知的动态接口。

静态

静态视图应该可以简单快速地显示。

静态视图

动态

动态视图可以显示更多数据并提供更好的交互性。

动态视图

生成通知

通知可以来自远程服务器,也可以在 iOS 应用本地生成。

有关如何生成本地通知的示例,请参阅 iOS 通知演练

本地通知必须将 AlertTitle 设置为在 Apple Watch 上显示 - AlertTitle 字符串显示在短外观界面中。 AlertTitleAlertBody 显示在通知列表中;AlertBody 显示在长外观界面中。

此屏幕截图显示了通知列表中显示的 AlertTitle 以及长外观界面中显示的 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."
    }