2015-06-13 23 views
8

Tôi đang cố gắng tạo tiện ích mở rộng chia sẻ trên iOS nhanh chóng. Khi người dùng ở chế độ safari và mở tiện ích chia sẻ, tôi muốn có thể lấy URL và sử dụng nó trong ứng dụng của tôi. Tôi biết tôi có thể đặt mã bên dưới trong hàm didSelectPost() trong ShareViewController để nhận được văn bản mà người dùng nhập vào phần mở rộng chia sẻ, nhưng làm cách nào để lấy URL của trang web mà người dùng đang truy cập khi họ nhấp vào chia sẻ sự mở rộng? Tôi khá mới với các phần mở rộng iOS, vì vậy bất kỳ trợ giúp nào cũng sẽ được đánh giá cao.URL chia sẻ tiện ích mở rộng trên iOS trong Swift

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

Trả lời

13

Đây là cách bạn có được URL:

- (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]; 
           }]; 
    } 
} 

Hoặc trong Swift:

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

Hoạt động hoàn hảo! (tại sao điều này không được đánh dấu là câu trả lời đúng?) – Sirab33

+0

Xin chào Cảm ơn bạn vì điều này, nó hoạt động ở bên cạnh tôi. Một trợ giúp khác bạn có thể làm cho tôi, tôi cần phải tiêm tên người dùng và mật khẩu vào trang web bằng cách sử dụng phần mở rộng của tôi, làm cách nào để tôi có thể tiêm các chức năng này cho chức năng tự động điền? – Anita

+0

@Anita Cảm ơn bạn đã bình luận. Vui lòng mở câu hỏi mới cho vấn đề tiêm. Nó cần thêm chi tiết và các bình luận không phải là nơi thích hợp cho việc này ;-) – joern

10

Có một sự thay đổi nhỏ này. Trong Chrome, public.url nằm trong mục 1, không phải mục 0 của phần đính kèm. Lặp lại để tìm thấy nó tốt hơn và sẽ hoạt động trên cả chrome và safari.

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

Đây chính xác là những gì tôi đã dành một ngày học tập và đã tìm thấy bài viết của bạn trong vòng vài giây học nó một cách khó khăn! – Nick

+0

Nếu tệp đính kèm trong ví dụ trên có chứa danh sách com.apple.property không? Tôi không thể hình dung ra điều này. Sử dụng mã ở trên tôi không nhận được URL. Hàm completionHandler không được thực hiện vì dường như không có "public.url" trong danh sách com.apple.property – boywithaxe

+0

Đây phải là câu trả lời đúng! Cảm ơn – mikemike396

Các vấn đề liên quan