相关疑难解决方法(0)

openURL在Action Extension中不起作用

我添加以下代码:

- (IBAction)done {
    // Return any edited content to the host app.
    // This template doesn't do anything, so we just echo the passed in items.

    NSURL *url = [NSURL URLWithString:@"lister://today"];
    [self.extensionContext openURL:url completionHandler:^(BOOL success) {
        NSLog(@"fun=%s after completion. success=%d", __func__, success);
    }];
    [self.extensionContext completeRequestReturningItems:self.extensionContext.inputItems completionHandler:nil];

}
Run Code Online (Sandbox Code Playgroud)

在我创建Action Extension目标之后.但它无法奏效.

我的目的是:当用户在Photos.app(iOS的默认Photos.app或被调用的图库)中查看照片时,他点击分享按钮以启动我们的扩展视图.我们可以将Photos.app中的图像传输到我自己的应用程序,并在我的应用程序中处理或上传图像.

我也尝试"CFBundleDocumentTypes"但它也无法工作.

任何帮助将不胜感激.

ios ios8 ios-app-extension

46
推荐指数
11
解决办法
3万
查看次数

Google的自定义iOS键盘Gboard如何以编程方式解散最前端的应用程序?

谷歌的自定义iOS应用程序Gboard具有一项有趣的功能,无法使用iOS SDK中的公共API实现(从iOS 10开始). 我想确切地知道Google如何完成以编程方式弹出Gboard中App Switching堆栈中的一个应用程序的任务.

自定义iOS键盘有两个主要组件:容器应用程序和键盘应用程序扩展.键盘应用程序扩展程序在单独的操作系统进程中运行,只要用户在手机上需要文本输入的任何应用程序中,该进程就会启动.

这些是使用Gboard可以遵循的近似步骤,以查看以编程方式返回到以前的应用程序的效果:

  1. 用户在iPhone上启动Apple Messages应用程序并点击文本字段以开始输入文本.
  2. Gboard键盘扩展程序已启动,用户可以看到Gboard自定义键盘(当他们仍在Apple Messages应用程序中时).
  3. 用户点击Gboard键盘扩展内的麦克风键进行语音到文本输入.
  4. Gboard使用自定义URL方案来启动Gboard容器应用程序.Gboard键盘和Apple消息应用程序在App堆栈中向下推送一层,而Gboard容器应用程序现在是App堆栈中最前面的应用程序.Gboard容器应用程序使用麦克风收听用户的语音并将其转换为放置在屏幕上的文本.
  5. 当用户对他们在屏幕上看到的文本输入感到满意时,用户点击"完成"按钮.
  6. 这就是魔术发生的地方......当文本输入屏幕被取消时,Gboard容器应用程序也会自动被解雇.Gboard容器应用程序消失并被Apple Messages应用程序取代(有时Gboard键盘扩展程序仍处于活动状态,有时会重新启动,有时需要通过点击文本字段手动重新启动.).Google如何实现这一目标?
  7. 最后,用户在文本输入字段中看到刚刚翻译的文本自动插入.据推测,谷歌通过在Gboard容器应用和键盘扩展之间共享数据来实现这一目标.

我假设Google使用私有API,通过使用Objective-C运行时内省探索状态栏的视图层次结构,并以某种方式合成tap事件或调用公开的目标/操作.我已经很好地探索了这个,并且能够在状态栏中找到有趣的UIView子类,比如UIStatusBarBreadcrumbItemView,它包含一个UISystemNavigationAction数组.我正在继续探索这些类,希望我能找到一些复制用户交互的方法.

我知道使用私有API是一种很好的方式来让您的应用程序提交从App Store中被拒绝 - 这不是我想在答案中解决的问题.我主要想找到关于Google如何完成以编程方式弹出Gboard中应用程序切换堆栈中的一个应用程序的具体任务的具体答案.

ios ios-keyboard-extension

39
推荐指数
2
解决办法
2031
查看次数

来自App Extension的openURL

在iOS 8 beta 2上,应该可以使用app扩展中的openUrl写入发行说明中:

在此输入图像描述

但是,当我尝试使用此API(在Xcode 6 beta 2上)时,我收到以下错误:

在此输入图像描述

Beta 2是否真的解决了这个问题?

uiapplication openurl ios8 ios-app-extension

15
推荐指数
2
解决办法
1万
查看次数

如何使用iOS 10,Xcode 8中的iMessage应用程序处理OAuth样式的登录?

我正在为iOS 10设置一个需要登录社交网络的iMessage应用程序.在传统的iOS应用程序中,我们通常在AppDelegate中配置带有app id的共享实例...我还需要处理回调URL:传统上放置在AppDelegate中的2个方法(下面).

使用iMessage app/extension,没有AppDelegate.我在哪里可以放置此代码?我能够在应用程序ID配置willBecomeActiveMessagesViewController并没有得到一个实例回来了,但我也把这些方法MessagesViewController与破发点,他们从来不被称为,我相信这是防止我的成功日志中,任何帮助深表感谢!

更新:我最大的问题,甚至在弄清楚如何处理callBack之前就是如何没有openURL方法可用,有一些关于扩展的方法,但我没有成功提出任何建议的解决方案: openURL不起作用在行动扩展中

我看到它要么(1)找到一种方法在我的iMessage扩展中调用openURL,这样我就可以让SDK处理OAuth(2)创建我自己的webview,推送到网站,登录用户,存储令牌和segue回到我的应用程序(似乎没必要)或(3)创建一个iPhone应用程序,只是为了登录(即iMessage扩展打开的父应用程序和登录),再次似乎没有必要).当然,这在iMessage扩展中会很常见吗?

func application(application: UIApplication, handleOpenURL url: NSURL) -> Bool {
}

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {   
}
Run Code Online (Sandbox Code Playgroud)

oauth ios swift

7
推荐指数
0
解决办法
352
查看次数

在 swift 3.0 中从我的键盘扩展打开我的应用程序

我正在尝试从我的键盘扩展中打开。我有自定义键盘,并且已从设置中添加该键盘。在我的自定义键盘上有一个“显示更多”按钮,我想点击这个按钮打开我的应用程序。

所以我尝试了以下代码:

let context = NSExtensionContext()
 context.open(url! as URL, completionHandler: nil)

 var responder = self as UIResponder?

 while (responder != nil) {

      if responder?.responds(to: Selector("openURL:")) == true {

           responder?.perform(Selector("openURL:"), with: url)
      }
      responder = responder!.next
 }
Run Code Online (Sandbox Code Playgroud)

它运行成功,但正如我们所知,swiftSelector("method_name:")已被弃用并#selector(classname.methodname(_:))改为使用,因此它发出警告。我想解决这个警告。所以我尝试过 Xcode 自动建议:

 if responder?.responds(to: #selector(UIApplication.openURL(_:))) == true {

      responder?.perform(#selector(UIApplication.openURL(_:)), with: url)
 }
Run Code Online (Sandbox Code Playgroud)

也试过:

 if responder?.responds(to: #selector(NSExtensionContext.open(_:))) == true {

      responder?.perform(#selector(NSExtensionContext.open(_:)), with: url)
 }
Run Code Online (Sandbox Code Playgroud)

我也尝试过其他可能的方法,但没有运气。如果有人知道该怎么做,请告诉我。

我提到了这个链接,Julio Bailon 的回答:

openURL 在操作扩展中不起作用

selector ios ios-app-extension custom-keyboard swift3

6
推荐指数
2
解决办法
1944
查看次数