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?


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)!)
    }

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ń.


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

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.


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


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

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


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.


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.


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


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


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

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

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)


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


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.


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]

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 

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

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);
}

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


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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.