2017-05-13 1 views
1

J'ai le code suivant dans mon extension de partage pour obtenir l'URL qui est partagée.iOS YouTube Share Extension ne fournit pas l'URL

if let item = extensionContext?.inputItems.first as? NSExtensionItem { 
     for (index, _) in (item.attachments?.enumerated())! { 
      if let itemProvider = item.attachments?[index] as? NSItemProvider { 
       if itemProvider.hasItemConformingToTypeIdentifier("public.url") { 
        itemProvider.loadItem(forTypeIdentifier: "public.url", options: nil, completionHandler: { (url, error) -> Void in 
         if let shareURL = url as? NSURL { 
          // send url to server to share the link 
          print (shareURL.absoluteString!) 

Pour une raison quelconque l'application YouTube iOS retourne false pour itemProvider.hasItemConformingToTypeIdentifier("public.url").

Et voici mon Info.plist pour l'extension de partage. Comment puis-je obtenir l'URL de la vidéo YouTube partagée dans mon extension de partage? Comment puis-je obtenir l'URL de la vidéo YouTube partagée dans mon extension de partage?

+0

Si le ItemProvider ne peut pas vous proposer une URL, quels types peut-il offrir? Si vous demandez au fournisseur de l'élément pour son 'registeredTypeIdentifiers' ce que les UTI sont donnés? –

+0

'p itemProvider.registeredTypeIdentifiers [0] as! Chaîne (Chaîne) $ R4 = "public.plain-text" ' –

+0

@ScottThompson Impression' itemProvider.registeredTypeIdentifiers [0] as! String' renvoie '" public.plain-text "' –

Répondre

1

Ma première recommandation est de savoir quels types sont effectivement fournis par le itemProvider:

if let item = extensionContext?.inputItems.first as? NSExtensionItem { 
    for (index, _) in (item.attachments?.enumerated())! { 
     if let itemProvider = item.attachments?[index] as? NSItemProvider { 

      // print out the registered type identifiers so we can see what's there 
      itemProvider.registeredTypeIdentifiers.forEach { print String(describing: $0) } 

Dans ce cas, en fonction de vos commentaires, vous êtes en mesure d'obtenir le texte brut ou kUTTypePlainText et que le texte contient des une URL si:

if let item = extensionContext?.inputItems.first as? NSExtensionItem { 
for (index, _) in (item.attachments?.enumerated())! { 
    if let itemProvider = item.attachments?[index] as? NSItemProvider { 
     if itemProvider.hasItemConformingToTypeIdentifier(kUTTypePlainText) { 
      itemProvider.loadItem(forTypeIdentifier: kUTTypePlainText, options: nil, completionHandler: { (string, error) -> Void in 
       if let string = (string as? String), let shareURL = URL(string) { 
        // send url to server to share the link 
        print (shareURL.absoluteString!) 

Ma deuxième recommandation est d'utiliser toujours les constantes de kUTType au lieu de chaînes brutes :-)

+0

'Argument labels '(_ :)' ne correspond à aucune surcharge disponible 'sur' si let shareURL = URL (chaîne) {' –

+0

J'ai modifié le code plusieurs fois. Vous pourriez avoir besoin de 'URL (string: string)'. J'ai essayé de me rapprocher le plus possible d'un Playground sans disposer d'un ensemble complet de codes à compiler, donc vous devrez peut-être continuer à peaufiner un peu. –

+0

Ok et 'kUTTypePlainText as String' au lieu de' kUTTypePlainText'? –