今天的应用程序扩展小部件点击打开包含应用程序
我已经为我的应用程序+行情实现了一个Today小部件,它在这些Apple Docs的帮助下在通知中心内显示当天的报价。 我想要完成的是打开包含应用程序,在这种情况下+引号,当用户点击他们的今天通知视图中的+引号小部件,不完全确定该怎么称呼这一点,因为日历如果你点击今天的看法。 我已经尝试覆盖的标签,将调用-(void)openURL:(NSURL *)URL completionHandler:(void (^)(BOOL success))completionHandler
被挖掘,然后打开自定义URL计划我有宣布打开包含应用程序。 问题是它不打开包含应用程序。
-(IBAction)myButton:(id)sender { NSURL *customURL = [NSURL URLWithString:@"PositiveQuotes://"]; [self openURL:customURL completionHandler:nil]; }
编辑:好的,只是在这里稍微纠正一下。 我把它放在标签上,就像上面build议的和下面的代码一样:
- (IBAction) goToApp: (id)sender { NSURL *url = [NSURL URLWithString:@"floblog://"]; [self.extensionContext openURL:url completionHandler:nil]; }
我将它链接到“Touch Up Inside”事件。 但是,这也会导致应用程序在用户滚动“今日”视图时启动。
=======================================
我遇到了同样的问题。 然而,从iOS 8的第一个testing版发布笔记来看,似乎现在还没有解决scheme:
已知问题:openURL不能从扩展中使用。
所以我想我们至less要等到beta2。
Swift 2版本,根据苹果文件
extensionContext?.openURL(NSURL(string: "foo://")!, completionHandler: nil)
Swift 3版本
extensionContext?.open(URL(string: "foo://")! , completionHandler: nil)
不要忘记将自定义URL Schemes添加到Info.plist
@sunseeker的答案是好的,但是在评论中是“隐藏的”。 正如所接受的答案所说,这是不可能的,这可能会误导游客。
这段代码的作品:
- (IBAction)launchHostingApp:(id)sender { NSURL *pjURL = [NSURL URLWithString:@"hostingapp://home"]; [self.extensionContext openURL:pjURL completionHandler:nil]; }
我使用Xcode 6.0(6A215l)和Yosemite Beta 1。
就像苹果公司在处理公共场景中所说:
扩展程序不会直接告诉其包含的应用程序打开; 相反,它使用NSExtensionContext的openURL:completionHandler:方法来告诉系统打开其包含的应用程序。 当一个扩展使用这个方法打开一个URL时,系统在完成之前validation这个请求。
另一种不添加隐藏button的方法是在UILabel上添加一个UITapGestureRecognizer(确保在标签上设置userInteractionEnabled为true)。 检查处理程序中的识别器状态,以确保已到达UIGestureReconizerStateEnded(而不是取消或失败),然后运行openUrl代码。
以防万一,这里是error handling版本的Swift 3的版本:
let myAppUrl = URL(string: "main-screen:")! extensionContext?.open(myAppUrl, completionHandler: { (success) in if (!success) { print("error: failed to open app from Today Extension") } })
为了使它工作,你需要打开应用程序的info.plist(作为源代码打开),在这之后的顶部
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict>
添加以下内容,以便应用程序知道应该处理哪些URL以下是如何打开包含应用程序并在应用程序和扩展程序之间共享用户默认值的完整示例 。