2014-12-15 8 views
10

나는 사용자 정의 UIActivityProviders와 함께 UIActivityViewController을 사용하고 있습니다. 내 제공자는 NSString, UIImage 및 맞춤 데이터 개체를 반환합니다. UIActivityViewController excludedActivityTypes과 Apple의 기본 활동 유형을 설정하여 공유하지 않을 활동을 제외합니다.UIActivityViewController 공유 확장 활동 제한

내가 좋아하지 않는 것은 액티비티 유형으로 빌드되지 않은 제시된 UIActivityViewController에 나타나는 앱입니다. 애플 리케이션이 iOS 8에 텍스트와 이미지 데이터를 처리 할 수 ​​있다는 정보를 제공했기 때문에 이러한 정보가 표시된다고 가정합니다. Flickr, Evernote 및 FaceBook의 공유 확장이 그 예입니다. 이러한 활동에는 하드 코딩을 원하지 않는 자체 활동 URL 유형이 있습니다.

내 액티비티 공유에서 이러한 앱을 원하지 않는 이유는 대부분 제대로 작동하지 않아 사용자에게 좋지 않은 경험을 제공하고 애플리케이션 성능이 좋지 않을 수 있다는 것입니다. 실제로 이러한 앱은 자신이 주장하는 데이터를 처리하지 못합니다. 예를 들어, Evernote는 항상 빈 포스트 대화 상자를 표시합니다. 페이스 북의 공유 확장 기능과 같이 일부는 데이터 유형을 처리 할 수 ​​없다면 로그 오류까지도 (실제로?).

모든 타사 공유 확장 프로그램을 차단할 수 있습니까?

  • 만 애플의 활동에 내장 된 공유하고 내 사용자 지정 활동
  • 3 자 개 확장 오프
  • 를 손 망치 허용 : 응답이 아니오 인 경우

    는, 내가 단지 2 옵션이 보인다

  • 확장 프로그램에서 인식 할 수 없도록 모든 콘텐츠를 맞춤 클래스에 넣습니다. Facebook에서 기록 된 오류가 발생합니다.

난이도는 initWithPlaceholderItem:(id)placeholderItem에서 비롯됩니다. 확장 기능에서 처리 할 수 ​​있다고 말한 일반적인 NSString 또는 UIImage를 다시 전달하지만 게시 할 때 오류가 나타나지 않도록하거나 로그하지 않는 경우가 많습니다. 이것은 공유 확장을 감지하는 끔찍한 장소가 될 것입니다.

사용자에게 가장 유연한 공유 경험을 제공하고 싶지만 타사 구현이 좋지 않은 비용을 제공하고 싶습니다.

우리는 코드를 보여주고 싶지만 단지 보일러 플레이트가 아닌 것을 생각할 수 없다는 것을 알고 있습니다. UIActivityController fodder.

답변

-1

제 3 자 공유 확장 프로그램을 모두 차단할 수 있습니까?

예, 가능합니다. 하지만 개인 API를 통해. 세부 사항을 말할 수는 없지만 가능합니다.

0

신뢰할 수있는 활동 제공자의 "허용 목록"을 설정할 수는 있습니다. 그런 다음 UIActivityItemSource 프로토콜로 UIActivityItemProvider를 사용하십시오.

- (id)activityViewController:(UIActivityViewController *)activityViewController 
    itemForActivityType:(NSString *)activityType 

확인 activityType : 당신은 통화를 얻을 수 있습니다. 신뢰할 수있는 제공자의 허용 목록에있는 경우 데이터 항목을 반환하십시오. activityType이 인식되지 않으면 nil을 반환하거나 중성화 된 "안전한"데이터 요소를 반환합니다.

신뢰할 수없는 활동이 활동 시트에 계속 표시 될 수 있지만 앱에 문제를 일으킬 데이터가 없습니다.