确定小部件是否已启用

Determine if the widget is enabled

有什么方法可以确定我的 Today Widget 是否已被用户添加到通知中心?我需要知道,这样我才能相应地更改主机应用程序中的一些标签。

没有 API,但您可以让今天的小部件向共享容器写入一些内容,您可以从您的应用程序中读取这些内容以确定它是否已显示。这样做的主要问题是,在小部件至少显示一次之前,它不会发生,而且您无法确定他们是否已经安装然后删除了它。

func widgetHasRun() {
    if let sharedContainer = NSUserDefaults(suiteName: "group.com.my.app") {
        sharedContainer.setBool(true, forKey: "today widget installed")
        sharedContainer.synchronize()
    }
}

我们使用此技术来确定是否应提示新用户安装我们的小部件。