10

私はUIActivityViewControllerいくつかのカスタム UIActivityProvider を使用しています。私のプロバイダーは、、、およびカスタム データ オブジェクトを返しNSStringますUIImage。共有したくないアクティビティは設定UIActivityViewController excludedActivityTypesと Apple のビルトイン アクティビティ タイプで除外しています。

私が気に入らないのは、提示された UIActivityViewController に表示される、ビルドされていないアクティビティ タイプのアプリです。アプリがテキストと画像データを処理できることを iOS 8 に通知したため、これらが表示されると思います。例としては、Flickr、Evernote、FaceBook の共有拡張機能があります。これらのアクティビティには、ハードコーディングしたくない独自のアクティビティ URL タイプがあります。

アクティビティの共有にこれらのアプリを入れたくない理由は、ほとんどが適切に機能せず、最終的にユーザーに悪い体験を与え、アプリの実装が不十分であると非難する可能性があるためです. 現実には、これらのアプリは、できると主張するデータを処理していません。たとえば、Evernote は常に空の投稿ダイアログを表示します。Facebook の共有拡張機能のように、データ型を処理できない場合にエラーをログに記録するものもあります (本当に?)。

サードパーティの共有拡張機能をすべてブロックすることはできますか?

答えが「いいえ」の場合、2 つのオプションしかないようです。

  • Apple の組み込みアクティビティとカスタム アクティビティとのみ共有する
  • サードパーティの拡張機能が手を離すのを許可する
  • すべてのコンテンツをカスタム クラスでラップして、拡張機能が認識できないようにします。これにより、Facebook からログに記録されたエラーが生成されます

難しさはinitWithPlaceholderItem:(id)placeholderItem. 拡張機能が処理できると言っている汎用の NSString または UIImage を返しますが、多くの場合、処理しないか、投稿時にエラーをログに記録します。これは、共有拡張機能を検出するには恐ろしい場所です。

ユーザーに最も柔軟な共有エクスペリエンスを提供したいが、サードパーティの実装が貧弱であることを犠牲にしてはならない.

UIActivityControllerSO でコードを表示したいのはわかっていますが、定型的な飼料以外のコードは考えられません。

4

2 に答える 2

-4

サードパーティの共有拡張機能をすべてブロックすることはできますか?

はい、可能です。ただし、プライベート API を使用します。詳しくは言えませんが、可能です。

于 2015-02-20T09:47:44.953 に答える