【问题标题】:iOS 10 Today Widget ButtonsiOS 10 今日小部件按钮
【发布时间】:2025-12-09 17:45:01
【问题描述】:

在 iOS 10 中,新的 Today Widgets 也会在用户 3D 触摸应用图标时出现。我想在那里添加启动应用程序并打开特定文档的按钮(类似于 Apple Music 小部件)。我应该使用什么来实现这一目标?

谢谢

【问题讨论】:

    标签: ios xcode8 today-extension 3dtouch


    【解决方案1】:

    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 中,对此感到抱歉。

    【讨论】:

    • 太好了。我会看看这个。非常感谢。