Jak połączyć się z aplikacjami w App Store

700

Tworzę bezpłatną wersję mojej gry na iPhone'a. Chcę mieć przycisk w bezpłatnej wersji, który zabiera ludzi do płatnej wersji w sklepie z aplikacjami. Jeśli użyję standardowego linku

http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300136119&mt=8

iPhone najpierw otwiera Safari, a następnie App Store. Korzystałem z innych aplikacji, które bezpośrednio otwierają sklep z aplikacjami, więc wiem, że jest to możliwe.

Jakieś pomysły? Jaki jest schemat adresów URL sklepu z aplikacjami?

mat
źródło
1
W przypadku SWIFT 3.X i zlokalizowanych aplikacji ta odpowiedź może pomóc: stackoverflow.com/a/41765175/3143890
LukeSideWalker

Odpowiedzi:

771

Edytowano 02.02.2016

Począwszy od iOS 6 wprowadzono klasę SKStoreProductViewController . Możesz połączyć aplikację bez opuszczania aplikacji. Fragment kodu w Swift 3.x / 2.x oraz Objective-C jest tutaj .

Obiekt SKStoreProductViewController przedstawia sklep, który umożliwia użytkownikowi zakup innych mediów z App Store. Na przykład aplikacja może wyświetlać sklep, aby umożliwić użytkownikowi zakup innej aplikacji.


Z wiadomości i ogłoszeń dla programistów Apple .

Prowadź klientów bezpośrednio do swojej aplikacji w App Store za pomocą łączy iTunes Dzięki linkom iTunes możesz zapewnić swoim klientom łatwy dostęp do aplikacji w App Store bezpośrednio ze strony internetowej lub kampanii marketingowych. Utworzenie łącza do iTunes jest proste i można go skierować do jednej aplikacji, wszystkich aplikacji lub do konkretnej aplikacji o określonej nazwie firmy.

Aby wysłać klientów do określonej aplikacji: http://itunes.com/apps/appname

Aby wysłać klientów do listy aplikacji dostępnych w App Store: http://itunes.com/apps/developername

Aby wysłać klientów do określonej aplikacji z nazwą firmy zawartą w adresie URL: http://itunes.com/apps/developername/appname


Dodatkowe uwagi:

Można wymienić http://z itms://lub itms-apps://do przekierowania uniknąć.

Pamiętaj, że itms://wyśle ​​użytkownika do sklepu iTunes, a itms-apps://wraz z nim do App Store!

Aby uzyskać informacje na temat nazewnictwa, zobacz Apple QA1633:

https://developer.apple.com/library/content/qa/qa1633/_index.html .

Edytuj (od stycznia 2015):

Łącza itunes.com/apps należy zaktualizować do appstore.com/apps. Zobacz QA1633 powyżej, który został zaktualizowany. Nowy QA1629 sugeruje następujące kroki i kod do uruchomienia sklepu z aplikacji:

  1. Uruchom iTunes na swoim komputerze.
  2. Wyszukaj element, który chcesz połączyć.
  3. Kliknij prawym przyciskiem myszy lub kliknij z wciśniętym klawiszem Control nazwę elementu w iTunes, a następnie wybierz z menu podręcznego opcję „Kopiuj adres URL sklepu iTunes Store”.
  4. W aplikacji utwórz NSURLobiekt ze skopiowanym adresem URL iTunes, a następnie przekaż ten obiekt do metody UIApplication's openURL:, aby otworzyć swój element w App Store.

Przykładowy kod:

NSString *iTunesLink = @"itms://itunes.apple.com/app/apple-store/id375380948?mt=8";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];

Szybki 4.2

   let urlStr = "itms-apps://itunes.apple.com/app/apple-store/id375380948?mt=8"
    if #available(iOS 10.0, *) {
        UIApplication.shared.open(URL(string: urlStr)!, options: [:], completionHandler: nil)

    } else {
        UIApplication.shared.openURL(URL(string: urlStr)!)
    }
Nathan S.
źródło
161
Wskazówka: użyj itms: // zamiast http: //, a następnie otworzy się bezpośrednio w sklepie z aplikacjami. Na iPhonie spowoduje 2 (!) Przekierowania przy korzystaniu z HTTP i 1 przy korzystaniu z itms. Podczas korzystania ze starszych linków fobos (patrz wyżej) istnieje 0 przekierowań. Użyj identyfikatora z iTunes Connect, jeśli używasz linków fobos. Możesz przesłać aplikację bez uwzględnienia pliku binarnego. W ten sposób otrzymasz identyfikator przed przesłaniem rzeczywistego pliku binarnego. Nie próbowałem tego, ale słyszałem, że to działa.
quano
11
Zobacz: developer.apple.com/library/ios/#qa/qa1633/_index.html (Białe spacje należy po prostu usunąć.)
Nathan S.
8
Z wyjątkiem ... jakiej wartości należy użyć appname? Czy to „Wyświetlana nazwa pakietu” aplikacji? Czy to nie rozróżnia wielkości liter? Jak obsługiwane są puste miejsca itp.?
aroth
14
Powinno to zostać przetestowane na prawdziwym urządzeniu.
Protokół
7
To NALEŻY przetestować na prawdziwym urządzeniu, tak! Przez około godzinę walczyłem z niczym, zanim podłączyłem iPada i tam go przetestowałem. Geh.
Kalle,
361

Jeśli chcesz otworzyć aplikację bezpośrednio w App Store, użyj:

itms-apps: // ...

W ten sposób otworzy bezpośrednio aplikację App Store na urządzeniu, zamiast najpierw przejść do iTunes, a następnie tylko App Store (przy użyciu tylko itms: //)

Mam nadzieję, że to pomaga.


EDYCJA: APR, 2017. itms-apps: // faktycznie działa ponownie w iOS10. Przetestowałem to.

EDYCJA: APR, 2013. To nie działa już w iOS5 i nowszych wersjach. Po prostu użyj

https://itunes.apple.com/app/id378458261

i nie ma już przekierowań.

GeneCode
źródło
2
@PEZ Na dzień dzisiejszy widzę dwa przekierowania przy użyciu http: // ... Odpowiedź działa dla mnie idealnie - itms-apps: // ... bezpośrednio otwiera aplikację App Store na urządzeniu, bez żadnych przekierowań.
Josh Brown
4
Rocotilos, czy jesteś pewien, że to już nie działa? Czy możesz opublikować link?
johndodo
8
Na iOS. itmsotwiera itunes. podczas gdy itms-appsotwiera App Store. Jest to kluczowa różnica, jeśli użytkownicy proszą o aktualizację! (iOS 10)
mcm
2
itms-appsotwiera dla mnie aplikację App Store openURL:w iOS 10.2. Wygląda na to, że nie ma problemu.
pkamb
1
Od 10.3 ta metoda działa, ale musi przejść przez wyskakujące okienko wyświetlacza „otworzyć ten adres URL w sklepie z aplikacjami”? Numer referencyjny: blog.branch.io/...
Gabry
51

Począwszy od iOS 6 właściwy sposób, aby to zrobić, używając klasy SKStoreProductViewController .

Swift 5.x :

func openStoreProductWithiTunesItemIdentifier(_ identifier: String) {
    let storeViewController = SKStoreProductViewController()
    storeViewController.delegate = self

    let parameters = [ SKStoreProductParameterITunesItemIdentifier : identifier]
    storeViewController.loadProduct(withParameters: parameters) { [weak self] (loaded, error) -> Void in
        if loaded {
            // Parent class of self is UIViewContorller
            self?.present(storeViewController, animated: true, completion: nil)
        }
    }
}
private func productViewControllerDidFinish(viewController: SKStoreProductViewController) {
    viewController.dismiss(animated: true, completion: nil)
}
// Usage:
openStoreProductWithiTunesItemIdentifier("1234567")

Swift 3.x :

func openStoreProductWithiTunesItemIdentifier(identifier: String) {
    let storeViewController = SKStoreProductViewController()
    storeViewController.delegate = self

    let parameters = [ SKStoreProductParameterITunesItemIdentifier : identifier]
    storeViewController.loadProduct(withParameters: parameters) { [weak self] (loaded, error) -> Void in
        if loaded {
            // Parent class of self is UIViewContorller
            self?.present(storeViewController, animated: true, completion: nil)
        }
    }
}

func productViewControllerDidFinish(_ viewController: SKStoreProductViewController) {
    viewController.dismiss(animated: true, completion: nil)
}
// Usage:
openStoreProductWithiTunesItemIdentifier(identifier: "13432")

Możesz uzyskać identyfikator elementu itunes aplikacji w następujący sposób: (zamiast statycznego)

Szybki 3.2

var appID: String = infoDictionary["CFBundleIdentifier"]
var url = URL(string: "http://itunes.apple.com/lookup?bundleId=\(appID)")
var data = Data(contentsOf: url!)
var lookup = try? JSONSerialization.jsonObject(with: data!, options: []) as? [AnyHashable: Any]
var appITunesItemIdentifier = lookup["results"][0]["trackId"] as? String
openStoreProductViewController(withITunesItemIdentifier: Int(appITunesItemIdentifier!) ?? 0)

Swift 2.x :

func openStoreProductWithiTunesItemIdentifier(identifier: String) {
    let storeViewController = SKStoreProductViewController()
    storeViewController.delegate = self

    let parameters = [ SKStoreProductParameterITunesItemIdentifier : identifier]
    storeViewController.loadProductWithParameters(parameters) { [weak self] (loaded, error) -> Void in
        if loaded {
            // Parent class of self is UIViewContorller
            self?.presentViewController(storeViewController, animated: true, completion: nil)
        }
    }
}

func productViewControllerDidFinish(viewController: SKStoreProductViewController) {
    viewController.dismissViewControllerAnimated(true, completion: nil)
}
// Usage
openStoreProductWithiTunesItemIdentifier("2321354")

cel C :

static NSInteger const kAppITunesItemIdentifier = 324684580;
[self openStoreProductViewControllerWithITunesItemIdentifier:kAppITunesItemIdentifier];

- (void)openStoreProductViewControllerWithITunesItemIdentifier:(NSInteger)iTunesItemIdentifier {
    SKStoreProductViewController *storeViewController = [[SKStoreProductViewController alloc] init];

    storeViewController.delegate = self;

    NSNumber *identifier = [NSNumber numberWithInteger:iTunesItemIdentifier];

    NSDictionary *parameters = @{ SKStoreProductParameterITunesItemIdentifier:identifier };
    UIViewController *viewController = self.window.rootViewController;
    [storeViewController loadProductWithParameters:parameters
                                   completionBlock:^(BOOL result, NSError *error) {
                                       if (result)
                                           [viewController presentViewController:storeViewController
                                                              animated:YES
                                                            completion:nil];
                                       else NSLog(@"SKStoreProductViewController: %@", error);
                                   }];

    [storeViewController release];
}

#pragma mark - SKStoreProductViewControllerDelegate

- (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController {
    [viewController dismissViewControllerAnimated:YES completion:nil];
}

Możesz uzyskać kAppITunesItemIdentifier(identyfikator elementu itunes aplikacji) w następujący sposób: (zamiast statycznego)

NSDictionary* infoDictionary = [[NSBundle mainBundle] infoDictionary];
    NSString* appID = infoDictionary[@"CFBundleIdentifier"];
    NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"http://itunes.apple.com/lookup?bundleId=%@", appID]];
    NSData* data = [NSData dataWithContentsOfURL:url];
    NSDictionary* lookup = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    NSString * appITunesItemIdentifier =  lookup[@"results"][0][@"trackId"]; 
    [self openStoreProductViewControllerWithITunesItemIdentifier:[appITunesItemIdentifier intValue]];
Ramis
źródło
4
w trybie szybkim nie zapomnij zaimportować i delegować: importuj klasę StoreKit RateMeViewController: UIViewController, SKStoreProductViewControllerDelegate {
djdance
To nadal działa, jednak po kliknięciu przycisku Napisz recenzję nie działa. Musisz kliknąć przycisk Store w górnym rogu, a następnie kliknąć Napisz recenzję. Ktoś zna obejście?
socca1157,
„Napisz recenzję” próbuje otworzyć inny modal i kończy się niepowodzeniem, prawdopodobnie dlatego, że już prezentujesz w modalu. Ale Apple to wymusza. Wygląda na to, że nie ma odpowiedniego sposobu, aby recenzje działały. unieważniając całą tę koncepcję.
AmitP
Ten json nie zawsze zwraca dane i zwraca czasami zero. Nie można uzyskać identyfikatora aplikacji przed przesłaniem.
Amber K
41

Od lata 2015 r. ...

-(IBAction)clickedUpdate
{
    NSString *simple = @"itms-apps://itunes.apple.com/app/id1234567890";
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:simple]];
}

zamień „id1234567890” na „id” i „twój dziesięciocyfrowy numer”

  1. Działa to doskonale na wszystkich urządzeniach .

  2. To idzie prosto do sklepu z aplikacjami, bez przekierowań.

  3. Jest OK dla wszystkich sklepów krajowych .

  4. To prawda, że ​​powinieneś przejść do korzystania loadProductWithParameters , ale jeśli celem tego linku jest aktualizacja aplikacji, w której faktycznie się znajdujesz: być może lepiej jest zastosować to „staromodne” podejście.

Joe Blow
źródło
Ponadto do przekierowania na stronę programisty (jeśli chcesz pokazać użytkownikowi swój katalog aplikacji) możesz użyć: NSString * simple = @ "itms-apps: //itunes.com/apps/YOUR_COMPANY_NAME";
TheBestBigAl
2
Gdzie znajdę ten identyfikator?
mcfly soft
1
Lato 2015 ?! Jak cały świat mieszka w tym samym kraju. :(
nacho4d
39

Apple właśnie ogłosiło adresy URL appstore.com.

https://developer.apple.com/library/ios/qa/qa1633/_index.html

Istnieją trzy rodzaje krótkich linków App Store, w dwóch postaciach, jedna dla aplikacji na iOS, druga dla aplikacji na Maca:

Nazwa firmy

iOS: na przykład http://appstore.com/, na przykład http://appstore.com/apple

Mac: na przykład http://appstore.com/mac/, na przykład http://appstore.com/mac/apple

Nazwa aplikacji

iOS: http://appstore.com/ np http://appstore.com/keynote

Mac: http://appstore.com/mac/ np http://appstore.com/mac/keynote

Aplikacja według firmy

iOS: http://appstore.com/ / na przykład http://appstore.com/apple/keynote

Mac: http://appstore.com/mac/ / na przykład http://appstore.com/mac/apple/keynote

Większość firm i aplikacji ma kanoniczny krótki link do App Store. Ten kanoniczny adres URL jest tworzony przez zmianę lub usunięcie niektórych znaków (wiele z nich jest nielegalnych lub ma specjalne znaczenie w adresie URL (na przykład „&”)).

Aby utworzyć krótki link do App Store, zastosuj następujące zasady do nazwy firmy lub aplikacji:

Usuń wszystkie białe znaki

Konwertuj wszystkie znaki na małe litery

Usuń wszystkie prawa autorskie (©), znaki handlowe (™) i symbole zarejestrowanego znaku (®)

Zamień znaki ampersands („&”) na „i”

Usuń większość interpunkcji (zobacz zestaw 2)

Zastąp znaki akcentowane i inne „zdobione” (ü, å itp.) Ich żywiołowym charakterem (u, a itp.)

Pozostaw wszystkie pozostałe znaki bez zmian.

Wyświetlanie 2 znaków interpunkcyjnych, które należy usunąć.

! ¡"# $% '() * +, -. / :; <=> ¿? @ [] ^ _` {|} ~

Poniżej znajduje się kilka przykładów demonstrujących konwersję, która ma miejsce.

Sklep z aplikacjami

Przykłady nazw firm

Gameloft => http://appstore.com/gameloft

Activision Publishing, Inc. => http://appstore.com/activisionpublishinginc

Fotografia i oprogramowanie Chena => http://appstore.com/chensphotographyandsoftware

Przykłady nazw aplikacji

Ocarina => http://appstore.com/ocarina

Gdzie jest moja Perry? => http://appstore.com/wheresmyperry

Brain Challenge ™ => http://appstore.com/brainchallenge

Dev01
źródło
1
to właściwie jedyna rzecz, która nadal działa niezawodnie dla sklepu Mac
Radu Simionescu,
Warto o tym wiedzieć, ale niestety na iOS przekierowuje przez Safari (i wyświetla brzydki komunikat „Nie można zweryfikować tożsamości serwera”).
sudo dokonaj instalacji
NIE. Przeczytaj to - „Te krótkie linki do App Store są udostępniane dla wygody i nie gwarantuje się, że będą prowadzić do konkretnej aplikacji lub firmy”. Zasadniczo jest to losowe.
durazno
30

Ten kod generuje link App Store na iOS

NSString *appName = [NSString stringWithString:[[[NSBundle mainBundle] infoDictionary]   objectForKey:@"CFBundleName"]];
NSURL *appStoreURL = [NSURL URLWithString:[NSString stringWithFormat:@"itms-apps://itunes.com/app/%@",[appName stringByReplacingOccurrencesOfString:@" " withString:@""]]];

Zamień itms-apps na http na Macu:

NSURL *appStoreURL = [NSURL URLWithString:[NSString stringWithFormat:@"http:/itunes.com/app/%@",[appName stringByReplacingOccurrencesOfString:@" " withString:@""]]]; 

Otwórz URL na iOS:

[[UIApplication sharedApplication] openURL:appStoreURL];

Prochowiec:

[[NSWorkspace sharedWorkspace] openURL:appStoreURL];
Tibidabo
źródło
To działa, ale musisz również usunąć znaki specjalne, takie jak myślniki, z nazwy aplikacji.
Macondo2Seattle
Dziękuję @ 3 obroty i @BlackRider
Ganesh Guturi
Czy możemy otworzyć i wyświetlić wszystkie aplikacje przesłane przez programistę na jednej stronie?
Imran
To było jedyne rozwiązanie typu drop-in, które działało dla mnie z minimalnymi przekierowaniami i maksymalną obsługą białych znaków nazwy aplikacji.
LordParsley
29

Aby mieć bezpośredni link bez przekierowania:

  1. Użyj narzędzia do tworzenia linków iTunes http://itunes.apple.com/linkmaker/, aby uzyskać prawdziwy bezpośredni link
  2. Wymień http://sięitms-apps://
  3. Otwórz link za pomocą [[UIApplication sharedApplication] openURL:url];

Uważaj, te linki działają tylko na rzeczywistych urządzeniach, a nie w symulatorze.

Źródło: https://developer.apple.com/library/ios/#qa/qa2008/qa1629.html

dulgan
źródło
3
+1 dla itunes.apple.com/linkmaker, każdy testuje link w urządzeniu nie w symulatorze, traciłem czas na testowanie symulatora.
karthik
2
Dzięki za informacje o Symulatorze, dodam to do odpowiedzi
dulgan
18

Działa to dla mnie idealnie, używając tylko identyfikatora aplikacji:

 NSString *urlString = [NSString stringWithFormat:@"http://itunes.apple.com/app/id%@",YOUR_APP_ID];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];

Liczba przekierowań to ZERO.

Almas Adilbek
źródło
13

Wiele odpowiedzi sugeruje użycie „itms” lub „itms-apps”, ale Apple nie zaleca tej praktyki. Oferują tylko następujący sposób otwarcia App Store:

Listing 1 Uruchamianie App Store z aplikacji na iOS

NSString *iTunesLink = @"https://itunes.apple.com/us/app/apple-store/id375380948?mt=8";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];

Zobacz https://developer.apple.com/library/ios/qa/qa1629/_index.html ostatnią aktualizację z marca 2014 r. Od tej odpowiedzi.

W przypadku aplikacji obsługujących system iOS 6 lub nowszy Apple oferuje mechanizm prezentacji aplikacji w App Store: SKStoreProductViewController

- (void)loadProductWithParameters:(NSDictionary *)parameters completionBlock:(void (^)(BOOL result, NSError *error))block;

// Example:
SKStoreProductViewController* spvc = [[SKStoreProductViewController alloc] init];
spvc.delegate = self;
[spvc loadProductWithParameters:@{ SKStoreProductParameterITunesItemIdentifier : @(364709193) } completionBlock:^(BOOL result, NSError *error){ 
    if (error)
        // Show sorry
    else
        // Present spvc
}];

Należy pamiętać, że w iOS6 blok uzupełniający może nie zostać wywołany, jeśli wystąpią błędy. Wygląda to na błąd, który został rozwiązany w iOS 7.

Ben Flynn
źródło
12

Jeśli chcesz połączyć się z aplikacjami programisty, a nazwa programisty zawiera znaki interpunkcyjne lub spacje (np. Development Company, LLC), wpisz swój adres URL w następujący sposób:

itms-apps://itunes.com/apps/DevelopmentCompanyLLC

W przeciwnym razie zwraca „To żądanie nie może być przetworzone” w iOS 4.3.3

Andrzej
źródło
1
Jeśli to nie zadziała, wypróbuj następującą składnię: itms-apps: //itunes.com/apps/ChuckSmith/id290402113 zastępując moje imię i nazwisko twoją firmą oraz mój identyfikator identyfikatorem wykonawcy, który można uzyskać za pomocą łącza iTunes producent: itunes.apple.com/linkmaker
Chuck Smith
Możesz także spróbować zakodować te „specjalne” znaki - tj. Zamień „.” z „% 2E”
wzs
to jest idealna odpowiedź!
Sam B
11

Link do określonego elementu w sklepie z aplikacjami lub iTunes można uzyskać za pomocą narzędzia do tworzenia linków pod adresem : http://itunes.apple.com/linkmaker/

Octavio Berlanga
źródło
Ten mi pomógł, ponieważ link w moim iTunes-Connect nie działał, aw generatorze tak. dziękuję
Dorad,
9

Działa to i łączy się bezpośrednio w ios5

NSString *iTunesLink = @"http://itunes.apple.com/app/baseball-stats-tracker-touch/id490256272?mt=8";  
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
TouchMint
źródło
8

Jest to prosty i krótki sposób na przekierowanie / połączenie innej istniejącej aplikacji w App Store.

 NSString *customURL = @"http://itunes.apple.com/app/id951386316";

 if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:customURL]])
 {
       [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
 } 
iChirag
źródło
6

W przypadku Xcode 9.1 i Swift 4:

  1. Importuj StoreKit:
import StoreKit

2. Wykonaj protokół

SKStoreProductViewControllerDelegate

3. Wdrożyć protokół

func openStoreProductWithiTunesItemIdentifier(identifier: String) {
    let storeViewController = SKStoreProductViewController()
    storeViewController.delegate = self

    let parameters = [ SKStoreProductParameterITunesItemIdentifier : identifier]
    storeViewController.loadProduct(withParameters: parameters) { [weak self] (loaded, error) -> Void in

        if loaded {
            // Parent class of self is UIViewContorller
            self?.present(storeViewController, animated: true, completion: nil)
        }
    }   
}

3.1

func productViewControllerDidFinish(_ viewController: SKStoreProductViewController) {
    viewController.dismiss(animated: true, completion: nil)
}
  1. Jak używać:
openStoreProductWithiTunesItemIdentifier(identifier: "here_put_your_App_id")

Uwaga:

Bardzo ważne jest, aby wprowadzić dokładny identyfikator swojej aplikacji. Ponieważ powoduje to błąd (nie pokazuje dziennika błędów, ale nic nie działa z tego powodu)

xhinoda
źródło
1
Robię to samo, działając na urządzeniu. Bez powodzenia
Andrea Mugnaini,
4

Mogę potwierdzić, że jeśli utworzysz aplikację w iTunes Connect, otrzymasz identyfikator aplikacji przed przesłaniem.

W związku z tym..

itms-apps://itunes.apple.com/app/id123456789

NSURL *appStoreURL = [NSURL URLWithString:@"itms-apps://itunes.apple.com/app/id123456789"];
    if ([[UIApplication sharedApplication]canOpenURL:appStoreURL])
        [[UIApplication sharedApplication]openURL:appStoreURL];

Działa uczta

użytkownik1641587
źródło
4

Utworzenie łącza może stać się złożonym problemem przy obsłudze wielu systemów operacyjnych i wielu platform. Na przykład obiekty WebObjects nie są obsługiwane w systemie iOS 7 (niektóre z nich), niektóre utworzone linki otworzyłyby inny sklep w kraju niż użytkownika itp.

Istnieje biblioteka open source o nazwie iLink, która może ci pomóc.

Zaletą tej biblioteki jest to, że linki zostałyby znalezione i utworzone w czasie wykonywania (biblioteka sprawdziłaby identyfikator aplikacji i system operacyjny, na którym działa, i wiedziała, jaki link powinien zostać utworzony). Najlepsze w tym jest to, że nie trzeba konfigurować prawie niczego przed użyciem, aby było wolne od błędów i zawsze działało. To świetnie, jeśli masz kilka celów w tym samym projekcie, więc nie musisz pamiętać, którego identyfikatora aplikacji lub linku użyć. Ta biblioteka poprosiłaby również użytkownika o aktualizację aplikacji, jeśli w sklepie jest nowa wersja (jest ona wbudowana i wyłączasz ją zwykłą flagą), bezpośrednio wskazując stronę aktualizacji aplikacji, jeśli użytkownik wyrazi na to zgodę.

Skopiuj 2 pliki bibliotek do swojego projektu (iLink.h i iLink.m).

W Twojej aplikacji Delegate.m:

#import "iLink.h"

+ (void)initialize
{
    //configure iLink
    [iLink sharedInstance].globalPromptForUpdate = YES; // If you want iLink to prompt user to update when the app is old.
}

a na przykład w miejscu, w którym chcesz otworzyć stronę oceny, po prostu użyj:

[[iLink sharedInstance] iLinkOpenAppPageInAppStoreWithAppleID: YOUR_PAID_APP_APPLE_ID]; // You should find YOUR_PAID_APP_APPLE_ID from iTunes Connect 

Nie zapomnij zaimportować iLink.h do tego samego pliku.

Jest tam bardzo dobry dokument dla całej biblioteki i przykładowe projekty dla iPhone'a i Maca.

Jameson
źródło
4

Co najmniej iOS 9 i nowszy

  • Otwórz bezpośrednio w App Store

Aplikacja

itms-apps://itunes.apple.com/app/[appName]/[appID]

Lista aplikacji programisty

itms-apps://itunes.apple.com/developer/[developerName]/[developerID]
Jakub Truhlář
źródło
appNameto nie jest konieczne.
DawnSong
4

Zgodnie z najnowszym dokumentem Apple musisz użyć

appStoreLink = "https://itunes.apple.com/us/app/apple-store/id375380948?mt=8"  

lub

SKStoreProductViewController 
Mihir Oza
źródło
Czy możesz zaktualizować swój link? To wydaje się dość interesujące, jeśli to nie zadziała.
Rémy Virin,
Powiązany dokument nie wspomina itms:ani itms-apps:. Linki korzystające z tego schematu działają dobrze na moich urządzeniach z systemem iOS 12.
Theo
4

Pomimo wielu odpowiedzi tutaj, wydaje się, że żadna z sugestii dotyczących linkowania do aplikacji dla programistów nie działa.

Podczas mojej ostatniej wizyty byłem w stanie uruchomić go w formacie:

itms-apps://itunes.apple.com/developer/developer-name/id123456789

To już nie działa, ale usunięcie nazwy programisty powoduje:

itms-apps://itunes.apple.com/developer/id123456789
Leon
źródło
3

Jeśli masz identyfikator sklepu z aplikacjami, najlepiej go użyć. Zwłaszcza jeśli w przyszłości możesz zmienić nazwę aplikacji.

http://itunes.apple.com/app/id378458261

Jeśli nie masz identyfikatora sklepu z aplikacjami, możesz utworzyć adres URL na podstawie tej dokumentacji https://developer.apple.com/library/ios/qa/qa1633/_index.html

+ (NSURL *)appStoreURL
{
    static NSURL *appStoreURL;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        appStoreURL = [self appStoreURLFromBundleName:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"]];
    });
    return appStoreURL;
}

+ (NSURL *)appStoreURLFromBundleName:(NSString *)bundleName
{
    NSURL *appStoreURL = [NSURL URLWithString:[NSString stringWithFormat:@"itms-apps://itunes.com/app/%@", [self sanitizeAppStoreResourceSpecifier:bundleName]]];
    return appStoreURL;
}

+ (NSString *)sanitizeAppStoreResourceSpecifier:(NSString *)resourceSpecifier
{
    /*
     https://developer.apple.com/library/ios/qa/qa1633/_index.html
     To create an App Store Short Link, apply the following rules to your company or app name:

     Remove all whitespace
     Convert all characters to lower-case
     Remove all copyright (©), trademark (™) and registered mark (®) symbols
     Replace ampersands ("&") with "and"
     Remove most punctuation (See Listing 2 for the set)
     Replace accented and other "decorated" characters (ü, å, etc.) with their elemental character (u, a, etc.)
     Leave all other characters as-is.
     */
    resourceSpecifier = [resourceSpecifier stringByReplacingOccurrencesOfString:@"&" withString:@"and"];
    resourceSpecifier = [[NSString alloc] initWithData:[resourceSpecifier dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES] encoding:NSASCIIStringEncoding];
    resourceSpecifier = [resourceSpecifier stringByReplacingOccurrencesOfString:@"[!¡\"#$%'()*+,-./:;<=>¿?@\\[\\]\\^_`{|}~\\s\\t\\n]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, resourceSpecifier.length)];
    resourceSpecifier = [resourceSpecifier lowercaseString];
    return resourceSpecifier;
}

Przechodzi ten test

- (void)testAppStoreURLFromBundleName
{
    STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"Nuclear™"].absoluteString, @"itms-apps://itunes.com/app/nuclear", nil);
    STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"Magazine+"].absoluteString, @"itms-apps://itunes.com/app/magazine", nil);
    STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"Karl & CO"].absoluteString, @"itms-apps://itunes.com/app/karlandco", nil);
    STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"[Fluppy fuck]"].absoluteString, @"itms-apps://itunes.com/app/fluppyfuck", nil);
    STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"Pollos Hérmanos"].absoluteString, @"itms-apps://itunes.com/app/polloshermanos", nil);
    STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"Niños and niñas"].absoluteString, @"itms-apps://itunes.com/app/ninosandninas", nil);
    STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"Trond, MobizMag"].absoluteString, @"itms-apps://itunes.com/app/trondmobizmag", nil);
    STAssertEqualObjects([AGApplicationHelper appStoreURLFromBundleName:@"!__SPECIAL-PLIZES__!"].absoluteString, @"itms-apps://itunes.com/app/specialplizes", nil);
}
hfossli
źródło
3

Wszystkie odpowiedzi są nieaktualne i nie działają; użyj poniższej metody.

Wszystkie aplikacje programisty:
itms-apps://apps.apple.com/developer/developer-name/developerId

Jedna aplikacja:
itms-apps://itunes.apple.com/app/appId

Karen Karapetyan
źródło
1

otworzy to App Store bezpośrednio

NSString *iTunesLink = @"itms-apps://itunes.apple.com/app/ebl- 
skybanking/id1171655193?mt=8";

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
Biswajit Banik
źródło
0

Wypróbuj w ten sposób

http://itunes.apple.com/lookup?id= „identyfikator aplikacji tutaj” zwraca json. Po tym znajdź klucz „ trackViewUrl ”, a wartością jest żądany adres URL. korzystanie z tego adresu (wystarczy wymienić https://z itms-apps://) .To działa dobrze.

Na przykład jeśli identyfikator aplikacji to xyz, przejdź do tego linku http://itunes.apple.com/lookup?id=xyz

Następnie znajdź adres URL klucza „ trackViewUrl ”. To jest adres URL Twojej aplikacji w App Store i aby użyć tego adresu URL w Xcode, wypróbuj to

NSString *iTunesLink = @"itms-apps://itunes.apple.com/us/app/Your app name/id Your app ID?mt=8&uo=4";
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];

Dzięki

Tunvir Rahman Tusher
źródło