2015-06-13 28 views
8

Hızlı bir iOS paylaşım uzantısı oluşturmaya çalışıyorum. Kullanıcı safardayken ve paylaşım uzantısını açtığında, URL'yi alıp benim uygulamamda kullanabilmek istiyorum. Kullanıcının paylaşım uzantısına girdiği metni almak için ShareViewController'daki didSelectPost() işlevinde aşağıdaki kodu koyabildiğimi biliyorum, ancak paylaşım tıklandığında kullanıcının web sayfasının URL'sini nasıl alabilirim? uzantı? IOS uzantıları için oldukça yeniyim, bu nedenle herhangi bir yardım çok takdir edilecektir.iOS Paylaşımı Swift'te kapsayıcı URL

let shareDefaults = NSUserDefaults(suiteName: "groupName") 
shareDefaults?.setObject(self.contentText, forKey: "stringKey") 
shareDefaults?.synchronize() 

cevap

13

Bu URL'yi almak nasıl:

- (void)didSelectPost { 
    NSExtensionItem *item = self.extensionContext.inputItems.firstObject; 
    NSItemProvider *itemProvider = item.attachments.firstObject; 
    if ([itemProvider hasItemConformingToTypeIdentifier:@"public.url"]) { 
     [itemProvider loadItemForTypeIdentifier:@"public.url" 
             options:nil 
           completionHandler:^(NSURL *url, NSError *error) { 
            NSString *urlString = url.absoluteString; 
            // send url to server to share the link 
            [self.extensionContext completeRequestReturningItems:@[]   
                    completionHandler:nil]; 
           }]; 
    } 
} 

Veya Swift içinde

:

override func didSelectPost() { 
    if let item = extensionContext?.inputItems.first as? NSExtensionItem { 
     if let itemProvider = item.attachments?.first as? NSItemProvider { 
      if itemProvider.hasItemConformingToTypeIdentifier("public.url") { 
       itemProvider.loadItemForTypeIdentifier("public.url", options: nil, completionHandler: { (url, error) -> Void in 
        if let shareURL = url as? NSURL { 
         // send url to server to share the link 
        } 
        self.extensionContext?.completeRequestReturningItems([], completionHandler:nil) 
       }) 
      } 
     } 
    } 
} 
+0

Kusursuz çalışır! (neden bu doğru cevap olarak işaretlenmedi?) – Sirab33

+0

Merhaba Bunun için teşekkürler, benim tarafımda çalışıyor. Benim için bir başka yardım daha yapabilirim, kullanıcı adımı ve şifreyi web sayfamıza genişletmem gerekirken, otomatik doldurma işlevi için bunları nasıl enjekte edebilirim? – Anita

+0

@Anita Yorumunuz için teşekkürler. Lütfen enjeksiyon sorunu için yeni bir soru açın. Daha fazla ayrıntıya ihtiyaç duyuyor ve yorumlar bunun için doğru bir yer değil ;-) – joern

10

küçük bir değişiklik bu kadar yoktur. Chrome'da public.url, 1 ekinde, eklerin 0 öğesi değil. Bulmak için daha iyi bir yoldur ve hem krom hem de safari üzerinde çalışacaktır.

if let item = extensionContext?.inputItems.first as? NSExtensionItem { 
    if let attachments = item.attachments as? [NSItemProvider] { 
     for attachment: NSItemProvider in attachments { 
      if attachment.hasItemConformingToTypeIdentifier("public.url") { 
       attachment.loadItemForTypeIdentifier("public.url", options: nil, completionHandler: { (url, error) in 
        if let shareURL = url as? NSURL { 
         // Do stuff with your URL now. 
        } 
        self.extensionContext?.completeRequestReturningItems([], completionHandler:nil) 
       }) 
      } 
     } 
    } 
} 
+0

Bu, bir gün boyunca ne yaptığımı ve yazımı saniyeler içinde buldum. – Nick

+0

Yukarıdaki örnekteki ek bir com.apple.property listesi içeriyor mu? Bu rakamı göremiyorum. Yukarıdaki kodu kullanarak URL'yi alamıyorum. Com.apple.property-listesinde – boywithaxe

+0

'da "public.url" görünmediği için completionHandler çalıştırılamıyor. Bu doğru cevap olmalı! Teşekkürler – mikemike396