私はUIActivityViewController
いくつかのカスタム UIActivityProvider を使用しています。私のプロバイダーは、、、およびカスタム データ オブジェクトを返しNSString
ますUIImage
。共有したくないアクティビティは設定UIActivityViewController excludedActivityTypes
と Apple のビルトイン アクティビティ タイプで除外しています。
私が気に入らないのは、提示された UIActivityViewController に表示される、ビルドされていないアクティビティ タイプのアプリです。アプリがテキストと画像データを処理できることを iOS 8 に通知したため、これらが表示されると思います。例としては、Flickr、Evernote、FaceBook の共有拡張機能があります。これらのアクティビティには、ハードコーディングしたくない独自のアクティビティ URL タイプがあります。
アクティビティの共有にこれらのアプリを入れたくない理由は、ほとんどが適切に機能せず、最終的にユーザーに悪い体験を与え、アプリの実装が不十分であると非難する可能性があるためです. 現実には、これらのアプリは、できると主張するデータを処理していません。たとえば、Evernote は常に空の投稿ダイアログを表示します。Facebook の共有拡張機能のように、データ型を処理できない場合にエラーをログに記録するものもあります (本当に?)。
サードパーティの共有拡張機能をすべてブロックすることはできますか?
答えが「いいえ」の場合、2 つのオプションしかないようです。
- Apple の組み込みアクティビティとカスタム アクティビティとのみ共有する
- サードパーティの拡張機能が手を離すのを許可する
- すべてのコンテンツをカスタム クラスでラップして、拡張機能が認識できないようにします。これにより、Facebook からログに記録されたエラーが生成されます
難しさはinitWithPlaceholderItem:(id)placeholderItem
. 拡張機能が処理できると言っている汎用の NSString または UIImage を返しますが、多くの場合、処理しないか、投稿時にエラーをログに記録します。これは、共有拡張機能を検出するには恐ろしい場所です。
ユーザーに最も柔軟な共有エクスペリエンスを提供したいが、サードパーティの実装が貧弱であることを犠牲にしてはならない.
UIActivityController
SO でコードを表示したいのはわかっていますが、定型的な飼料以外のコードは考えられません。