2013-07-19 5 views
6

chciałbym obsłużyć url podobny: http://www.something.com/product/3/ w ten sposób:Uchwyt http url z mojej aplikacji (jeśli jest zainstalowany)

  • Jeśli masz App zainstalowana => poradzić z App.
  • Else => obchodź się z safari.

Czy to możliwe?

Pomysł polega na tym, że mogę wysłać ten URL pocztą e-mail, a jeśli odbiornik ma zainstalowaną aplikację, to aplikacja podnosi i coś robi, a jeśli nie jest zainstalowana, po prostu otwórz ją przez safari.

Wiem o niestandardowych schematach, które działają dobrze w aplikacji, ale oczywiście nie działają na safari, ponieważ nie są protokołem http.

+0

Nie, nie jest to możliwe bez jailbreaking. Możesz jednak przekonać witrynę do przekierowania do niestandardowego adresu URL schematu, ale ... –

+0

Spróbuj tego: A. Upewnij się, że aplikacja obsługuje rozszerzenie html. B. Wyślij e-mail z linkiem do pliku html (plik startowy lub plik przekierowania itp.) – user523234

+0

@SimonM Myślę, że twoje jest jedynym rozwiązaniem. Aby użyć normalnego linku (http://something.com/product/3/) iw tej sieci spróbuj otworzyć wyskakujące okienko z myscheme url: //something.com/product/3/, które otworzy aplikację, jeśli jest zainstalowane lub wyświetlać coś (prawdopodobnie pokaże wyszukiwanie google, ponieważ nie rozumie myscheme jako adresu URL). – jobima

Odpowiedz

0

Nie jest to niemożliwe. jednak można uwzględnić w mailu oba linki:

2

Tak można zrobić za pomocą URL Schemat, Pierwszy tworzyć własnego schematu URL w Info.plist pliku

Dodaj nowy wiersz, przechodząc do menu i klikając Edytor> Dodaj element. Skonfiguruj element Typy URL, dodając nowy element. Rozwiń klucz Typy URL, rozwiń element 0 i dodaj nowy element "Schematy adresów URL". Wypełnij "tekst do przeczytania" dla pozycji 0 "schematów adresów URL" i identyfikator firmy dla "identyfikatora adresu URL".

Następnie przeanalizuj swój adres URL pod kątem innego adresu URL dla tego samego schematu URL, aby otworzyć aplikację na różnych ekranach. Tutaj pokazałem tylko alert, użyj, aby otworzyć określoną stronę zgodnie z linkiem. A jeśli aplikacja nie jest zainstalowana następnie otworzy się w przeglądarce internetowej.

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
    // Display text 
    UIAlertView *alertView; 
    NSString *text = [[url host] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
    alertView = [[UIAlertView alloc] initWithTitle:@"Text" message:text delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [alertView show]; 
    [alertView release]; 
    return YES; 
} 

zastosowanie: handleOpenURL (stosowany do wcześniejszych iOS 4.1) zastosowanie: OpenURL: sourceApplication: Adnotacja: (stosowany do późniejszego iOS 4.1).

+1

Co zrobić, jeśli aplikacja nie jest zainstalowana? Czy safari zrozumie tekst w tekście: //something.com i przetłumaczy na http://something.com? – jobima

+0

U można użyć canOpenURL: aby sprawdzić, czy można go otworzyć, czy nie, przekierować do przeglądarki :-) .. –

+1

To nie rozwiąże problemu, ponieważ aby uruchomić canOpenURL, potrzebuję zainstalować aplikację. Problem jest nadal taki sam: gdy aplikacja nie jest zainstalowana, mam tylko adres URL, którego Safari nie rozumie (myscheme: //something.com) – jobima

2

1) Utwórz niestandardowy schemat URL w swojej aplikacji. Kliknij link, jeśli nie wiesz, jak utworzyć niestandardowy schemat URL: http://www.idev101.com/code/Objective-C/custom_url_schemes.html

2) Następnie dodaj następujący skrypt do adresów URL, które chcesz otworzyć.

<script language="javascript" type="text/javascript"> 
    var iOS = (navigator.userAgent.match(/(iPad|iPhone|iPod)/g) ? true : false); 
    var appUrlScheme = "myappscheme://" + document.URL; 
    if (iOS) { 
     window.open(appUrlScheme, "_self"); 
    } 
</script> 

Skrypt jest oczywista, jeśli jego urządzenie iOS to po prostu próbuje otworzyć aktualny adres URL z niestandardowego schematu URL tj myappscheme://whateverurl.com'. If you app is installed on the device then iOS is going to launch your app and pass this URL to handleOpenURL function, otherwise mobile safari will silently ignore okiennej.open` zadzwonić i Twoja strona będzie ładować normalnie:

3) Wdrożenie metody handleOpenURL oddzwonienia w AppDelegate obsłużyć URL:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
    NSLog(@"url: %@", url); 
    NSLog(@"query string: %@", [url query]); 
    NSLog(@"host: %@", [url host]); 
    NSLog(@"url path: %@", [url path]); 

    //REDIRECT USER TO A VIEW CONTROLLER 

    return YES; 
} 
+0

Nie działa to dla mnie, gdy aplikacja nie jest zainstalowana - pojawia się komunikat "Nie można otworzyć strony." Safari nie może otworzyć strony, ponieważ adres jest nieprawidłowy. " – davidwebster48