今天App扩展小工具点击打开包含应用程序

Dan*_*orm 58 ios ios8 ios-app-extension today-extension

我为我的应用程序+报价实现了一个Today小部件,它在这些Apple Docs的帮助下在通知中心显示当天的报价.我想要完成的是打开Containing App,在这种情况下是+ Quotes,当用户在他们的Today通知视图中点击+ Quotes小部件时,并不完全确定要调用它的内容,因为Calendar会在今天看.我已经尝试在标签上覆盖一个按钮,该按钮会调用 -(void)openURL:(NSURL *)URL completionHandler:(void (^)(BOOL success))completionHandler 它,然后打开我声明要打开Containing App的自定义URL方案.问题是它没有打开Containing App.

+引用今日应用扩展小部件

-(IBAction)myButton:(id)sender {
    NSURL *customURL = [NSURL URLWithString:@"PositiveQuotes://"];
    [self openURL:customURL completionHandler:nil];
}
Run Code Online (Sandbox Code Playgroud)

sun*_*ker 63

编辑:好的,这里稍作修改.我按照上面的建议和以下代码在标签上放置一个按钮就可以了:

- (IBAction) goToApp: (id)sender { 
    NSURL *url = [NSURL URLWithString:@"floblog://"];
    [self.extensionContext openURL:url completionHandler:nil]; 
  }
Run Code Online (Sandbox Code Playgroud)

我将它与"Touch Up Inside"活动联系起来.但是,这也会导致应用程序在用户滚动"今日"视图时启动.

=======================================

我遇到了同样的问题.但是,由于iOS 8的第一个测试版的发行说明提到,现在似乎没有解决方案:

已知问题:openURL无法在扩展中运行.

所以我想我们至少要等到beta 2.

  • 好的,这里稍作修改.我让它在标签上放置一个按钮,就像上面建议的那样,代码如下: - (IBAction)goToApp:(id)sender {NSURL*url = [NSURL URLWithString:@"floblog://"]; [self.extensionContext openURL:url completionHandler:nil]; 我将它链接到"Touch Up Inside"事件.但是,这也会导致应用程序在用户滚动"今日"视图时启动. (3认同)
  • 对于未来的读者,值得注意的是,此方法仅在Today Extensions中允许. (2认同)

Qua*_*ong 49

根据Apple Doc的说法,Swift 2版本

extensionContext?.openURL(NSURL(string: "foo://")!, completionHandler: nil)
Run Code Online (Sandbox Code Playgroud)

Swift 3版

extensionContext?.open(URL(string: "foo://")! , completionHandler: nil)
Run Code Online (Sandbox Code Playgroud)

并且不要忘记将自定义URL方案添加到Info.plist

在此输入图像描述


ter*_*ina 28

@sunseeker的答案是好的,但它在评论中是"隐藏的".正如公认的答案所说,这是不可能的,它可能会误导访客.

这段代码有效:

- (IBAction)launchHostingApp:(id)sender
{
  NSURL *pjURL = [NSURL URLWithString:@"hostingapp://home"];
  [self.extensionContext openURL:pjURL completionHandler:nil];
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Xcode 6.0(6A215l)和Yosemite Beta 1.

就像Apple在处理共享方案中所说:

扩展程序不直接告诉其包含的应用程序打开; 相反,它使用NSExtensionContext的openURL:completionHandler:方法告诉系统打开其包含的应用程序.当扩展使用此方法打开URL时,系统会在完成请求之前验证该请求.

  • 您必须在Infos.plist中设置"hostingapp"方案.它可以是任何东西.更多详细信息:https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/AdvancedAppTricks/AdvancedAppTricks.html#//apple_ref/doc/uid/TP40007072-CH7-SW50"实施部分自定义网址架构" (7认同)
  • 要在你的plist中创建URL Scheme"hostingapp",你可以看到http://stackoverflow.com/questions/8201724/how-to-register-a-custom-app-opening-url-scheme-with-xcode-4 @迈克S. (3认同)