2014-12-15 19 views
10

Sto utilizzando UIActivityViewController con diversi UIActivityProviders personalizzati. I miei provider restituiscono NSString, UIImage e oggetti dati personalizzati. Escludo le attività che non desidero condividere impostando UIActivityViewController excludedActivityTypes e i tipi di attività incorporati di Apple.Limitazione delle attività di estensione condivisione UIActivityViewController

Le cose che non mi piacciono sono le app che appaiono sul UIActivityViewController presentato che non sono costruite in tipi di attività. Presumo che questi appaiano perché le app hanno informato iOS 8 che possono gestire i dati di testo e immagine. Esempi sono l'estensione di condivisione di Flickr, Evernote e FaceBook. Queste attività hanno il proprio tipo di URL di attività a cui non desidero il codice.

Il motivo per cui non voglio che queste app nella mia attività di condivisione sia la maggior parte non funzionano correttamente, finendo per dare ai miei utenti una brutta esperienza e probabilmente incolpare la mia app per una cattiva implementazione. La realtà è che queste app non gestiscono i dati che affermano di poter fare. Ad esempio, Evernote presenta sempre solo una finestra di dialogo vuota. Alcuni, come l'estensione condivisa di Facebook, registrano errori se non riescono a gestire il tipo di dati (davvero?).

È possibile bloccare tutte le estensioni di condivisione di terze parti?

Se la risposta è no, a quanto pare devo solo 2 opzioni:

  • solo condividere con Apple integrato nelle attività e le mie attività personalizzati
  • Consenti 3 estensioni parti per rovinare la mano fuori
  • Avvolgere tutti i miei contenuti in una classe personalizzata in modo che non sia riconoscibile per le estensioni. Ciò genera un errore registrato da Facebook

La difficoltà deriva da initWithPlaceholderItem:(id)placeholderItem. Trasmetto un generico NSString o UIImage che le estensioni dicono che possono gestire ma spesso non lo fanno o registrano un errore nel post. Questo sarebbe un posto orribile per rilevare estensioni di condivisione.

Desidero fornire ai miei utenti un'esperienza di condivisione più flessibile, ma non a scapito della scarsa implementazione di terze parti.

So che ci piace mostrare il codice su SO, ma non riesco a pensare a nessuno che non sia solo gasplate UIActivityController foraggio.

risposta

-1

È possibile bloccare tutte le estensioni di condivisione di terze parti?

Sì, possibile. Ma tramite API privata. Non posso dirvi i dettagli, ma è possibile.

0

Non è sicuro che sia così, ma è possibile impostare una "lista bianca" di provider di attività attendibili. Quindi utilizzare UIActivityItemProvider con il protocollo UIActivityItemSource. Otterrete chiede:

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

Controllare il activityType. Se è presente nella tua whitelist di provider affidabili, restituisci l'elemento dati. Se lo activityType non viene riconosciuto, restituisce nil (o restituisce un elemento dati "sicuro" castrato).

Le attività non attendibili possono ancora essere visualizzate nel foglio delle attività, ma non riceveranno i dati con cui causare problemi all'app.

Problemi correlati