7

含まれているアプリを開くために iOS 8 共有拡張機能で使用しようとする[self.extensionContext openURL:... completionHandler:...];と、アプリが開かれず、常に成功 = NO で完了ハンドラーが呼び出されます。

これは Action 拡張機能の同じ問題ですが、Share 拡張機能が Action 拡張機能よりも含まれているアプリを開くことができる方が合理的だと思います共有拡張機能のポイントは、潜在的に大きなデータをアップロードすることです。アプリを開かずにそれを行う唯一の方法は、NSURLSessionHTTP(S) アップロードのみを実行できる を使用することです。ただし、アプリは、HTTP(S) アップロードとは異なるメカニズムを介してコンテンツを共有したい場合があります。

Apple のドキュメントにはopenURL...、特定の種類の拡張機能に使用できないとは記載されていません。これがバグなのか意図した動作なのかを判断するのは困難です。これに関する公式情報はありません。

4

5 に答える 5

8

考えられるいくつかの回避策は次のとおりです...共有拡張機能からの含まれているアプリとの通信/開く

実際に機能するものは、次のように要約できます。

  • UIDocumentInteractionController を使用し、コンテナ アプリを特別な拡張タイプに登録して、拡張機能からコンテナ アプリを開く
  • ダミーの NSURLSessionTask を使用してapplication:handleEventsForBackgroundURLSession:completionHandler:、コンテナー アプリの UIApplicationDelegate クラスのメソッドを呼び出します。次に、そのメソッドで、必要[[UIApplication sharedApplication] openURL:url]なものを開くために呼び出すことができます。

これらの方法はどちらも完璧ではありませんが、機能します (ただし、Apple がそれらを好むかどうかはわかりません)。詳細については、リンクを確認してください。お役に立てれば :)

編集: https://stackoverflow.com/a/24614589/3923882で説明されているように、UIWebView を使用することもできます。

于 2014-08-12T18:25:13.180 に答える
1

ドキュメントは、「拡張ポイントがこのメソッドをサポートするかどうかを決定する」ことを示しており、実際には、Today 拡張機能を使用するユーザーのみが、openUrl を使用してホスト アプリを起動できます。共有、アクション、キーボード、およびドキュメント プロバイダーは、誰に対しても機能しませ(ベータ 5)。

于 2014-08-07T18:14:13.443 に答える
0

これは、キーボード拡張機能から使用するものです。

UIWebView * webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
NSString *urlString = @"https://itunes.apple.com/us/app/watuu/id304697459";
NSString * content = [NSString stringWithFormat : @"<head><meta http-equiv='refresh' content='0; URL=%@'></head>", urlString];
[webView loadHTMLString:content baseURL:nil];
[self.view addSubview:webView];
[webView performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:2.0];

この場合、UIInputViewController からこの呼び出しをインスタンス化していることに注意してください。

このメソッドは、含まれているアプリの URL スキームを使用しても機能するはずです

于 2015-01-20T03:30:00.053 に答える
0

バックグラウンドタスクを含まないこの方法を使用しています:

  • カスタム レイアウトを追加するために、UIViewController(デフォルトの代わりにSLComposeServiceViewController) 共有拡張機能のサブクラスを使用します。
  • を追加UIWebViewし、アプリのカスタム URL を指すリンクを含む HTML 文字列を読み込みます。
  • リンクのクリックをインターセプトするメソッドを実装webView:shouldStartLoadWithRequest:navigationType:し、YES を返す前に(アプリ グループの名前を指定して) NSUserDefaultswith を使用して、拡張機能とそれを含むアプリによって共有されるコンテナーにデータを保存します。initWithSuiteName:

Web リンクをクリックするとアプリが起動し、データをNSUserDefaults直接取得できます。

于 2015-01-17T18:48:21.367 に答える