2016-09-30 16 views
7

Buduję aplikację przeglądarki. Chcę, aby system iOS wykrył go jako przeglądarkę. Próbowałem dodać http do schematów URL, ale na próżno.Wykryj moją aplikację na iOS jako przeglądarkę internetową

Próbowałem this answer.

+0

nie chcę się zmienić, chcę, aby moja aplikacja jest wykrywany jako przeglądarce –

+0

Czy istnieje rozwiązanie dla powyższego wniosku wspomnieć? –

+0

Myślę, że rozszerzenie udziału jest tym, co możesz zrobić w iOS –

Odpowiedz

1

W systemie iOS system operacyjny nie śledzi, które aplikacje są przeglądarkami, a jeśli chodzi o system, użytkownik powinien korzystać z Safari do wszystkiego. Nie ma zatem API podobnego do pytania, które łączysz, które odnosi się do macOS.

Jeśli jednak chcesz, aby Twoja aplikacja pojawiała się w wyskakującym okienku "Otwórz w", możesz set your app as able to open certain document types. Istnieje wiele odmian system-declared document types, ale warto zwrócić szczególną uwagę na te związane z Internetem, takie jak public.html (kUTTypeHTML).

Niestety, jestem prawie pewien, że iOS nie zezwala aplikacjom na deklarowanie obsługi otwierania zwykłych adresów URL http, tylko niestandardowe schematy URL, ale nadal możesz chcieć zadeklarować obsługę pewnych typów plików, takich jak HTML, na wszelki wypadek. użytkownik próbuje je otworzyć. Oto przykład:

Po pierwsze, trzeba powiedzieć Xcode które dokumenty wsparcia, możesz to zrobić wybierając swój cel, zamiar informacji i dodanie typów dokumentu:

Adding public.html to Document Types

Następnie w każdej chwili Aplikacja poprosi o otwarcie pliku .bebarchive, This document opisuje, gdzie musisz go otworzyć. Zasadniczo, ponieważ nie jesteś właścicielem tego typu pliku, możesz po prostu zajrzeć do słownika opcji: application:didFinishLaunchingWithOptions: lub application:willFinishLaunchingWithOptions.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool { 

    if let url = launchOptions?[UIApplicationLaunchOptionsKey.url] as? URL { 
     // This code would probably exist in one of your controllers 
     let request = URLRequest(url: url) 
     webview.load(request) 
    } 

    return true 
} 

Więc w rzeczywistości AppDelegate najprawdopodobniej przekazać to do innej części aplikacji, po prostu przekazując mu URL.

Ale znowu użytkownik prawdopodobnie nie będzie mógł po prostu przejść do Safari i po prostu udostępnić stronę internetową do swojej aplikacji. Twoja aplikacja prawdopodobnie wyświetliłaby się tylko wtedy, gdy użytkownik rzeczywiście trafi na udostępniony plik html, ale prawdopodobnie jest to najbardziej zbliżona oferta iOS do tego, co chcesz.

+1

@Mathew, czy możesz przedstawić przykład? –

+0

@VaibhavJhaveri Edytowałem swoją odpowiedź –

1

Not possible definiować w dowolnym miejscu aplikacji więc innej aplikacji zobaczyć swoją aplikację jako przeglądarki, ale jeśli chcesz wnieść adresy z innych aplikacji do aplikacji można tworzyć aplikacji rozbudowa Rodzaj akcji dla swojej aplikacji. Umożliwi to innym aplikacjom udostępnianie adresu URL w aplikacji. Gdy użytkownik wybierze URL i udostępni, zobaczy Twoją aplikację. Możesz dostosować widok widoku udostępniania dla swojej klasy z NSExtensionMainStoryboard. Możesz przeczytać więcej na ten temat od Apple's Developer website

Jednak to nie otworzy Twojej aplikacji, gdy użytkownik wybierze URL. użytkownik będzie musiał zamknąć inną aplikację i otworzyć aplikację, aby wyświetlić udostępniony adres URL w aplikacji. w tym celu można wyświetlić prawidłową wiadomość z klasy SharingViewController.

Za każdym razem, gdy użytkownik udostępni adres URL Twojej aplikacji, zostanie wywołana metoda delegowania didSelectPost() w twoim SharingViewController, możesz uzyskać udostępniony adres URL z tej metody i użyć go w swojej aplikacji.

override func didSelectPost() { 
     if let item = extensionContext?.inputItems.first as? NSExtensionItem { 
      if let itemProvider = item.attachments?.first as? NSItemProvider { 
       if itemProvider.hasItemConformingToTypeIdentifier(kUTTypeURL) { 
        itemProvider.loadItemForTypeIdentifier(kUTTypeURL, options: nil, completionHandler: { (url, error) -> Void in 
         if let shareURL = url as? NSURL { 
          var defaults = NSUserDefaults(suiteName: "group.com.yourapp.extension") 
          defaults?.setObject(url.absoluteString(), forKey: "sharedURL") 
          defaults?.synchronize() 
         } 
         self.extensionContext?.completeRequestReturningItems([], completionHandler:nil) 
        }) 
       } 
      } 
     } 
    } 

Możesz dostać wartość przechowywania w NSUserDefalts z nazwą koloru w aplikacji i wyświetlanego adresu URL z niego.

var defaults = NSUserDefaults(suiteName: "group.com.yourapp.extension") 
    defaults?.synchronize() 

    // Check for null value before setting 
    if let restoredValue = defaults!.stringForKey("sharedURL") { 

     //create url with sctring and use it as per your requirement 
    } 
    else { 
     // ("Cannot find value") 
    } 
1

To nie może być zrobione, http jest zarezerwowanym schemat URL, zobacz Using URL Schemes to Communicate with Apps

Jabłko zapewnia wbudowane wsparcie dla HTTP, mailto, tel i sms URL schematów między innymi. Obsługuje także adresy URL oparte na http, które są skierowane na aplikacje Mapy, YouTube i iPod. Obsługi tych programów są ustalone na i nie można ich zmienić. Jeśli Twój typ adresu URL zawiera schemat, który jest identyczny z jednym zdefiniowanym przez Apple, aplikacja dostarczona przez Apple zostanie uruchomiona zamiast aplikacji.

Z aplikacją można korzystać za pomocą aplikacji Universal Links i korzystać z aplikacji (jeśli jest zainstalowana) jako przeglądarki dla swojej witryny internetowej. Nie można tego osiągnąć dla wszystkich adresów URL.

Powiązane problemy