【发布时间】:2025-12-09 17:45:01
【问题描述】:
在 iOS 10 中,新的 Today Widgets 也会在用户 3D 触摸应用图标时出现。我想在那里添加启动应用程序并打开特定文档的按钮(类似于 Apple Music 小部件)。我应该使用什么来实现这一目标?
谢谢
【问题讨论】:
标签: ios xcode8 today-extension 3dtouch
在 iOS 10 中,新的 Today Widgets 也会在用户 3D 触摸应用图标时出现。我想在那里添加启动应用程序并打开特定文档的按钮(类似于 Apple Music 小部件)。我应该使用什么来实现这一目标?
谢谢
【问题讨论】:
标签: ios xcode8 today-extension 3dtouch
Today Extensions 有一个 NSExtensionContext,作为属性 extensionContext 公开。 ExtensionContext 有一个 openURL 方法,你可以传递一个私有 URL 来启动你的应用程序。
这是一个相当广泛的问题,因此提供了对该技术的广泛概述。
(1) 在您的主应用中注册一个自定义 URL 方案,例如我的应用程序:
在应用程序 plist 文件中添加键,例如:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>com.mycompany.myapp</string>
<key>CFBundleURLScheme</key>
<array>
<string>myapp</string>
</array>
</dict>
</array>
这会向 iOS 注册您的应用程序处理“myapp”方案。在这里使用您自己的名字,并选择一个很可能是独一无二的!
(2) 在您今天的扩展视图控制器的 extensionContext 上调用 openURL
[self extensionContext] openURL:[NSURL URLWithString:@"myapp://someurl"] completionHandler:nil];
(3) 在你的应用的Application Delegate中处理调用,它是handleOpenURL方法
-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
// do something here
}
当然,这假设您已经在今天的小部件中放置了按钮,并且有适当的处理程序来使用按钮按下并将适当的 URL 传递给应用程序。
你已经用 Swift 标记了这个问题,但是这些示例 sn-ps 在 Obj-C 中,对此感到抱歉。
【讨论】: