Cara menautkan ke aplikasi di app store

700

Saya membuat versi gratis dari permainan iPhone saya. Saya ingin memiliki tombol di dalam versi gratis yang membawa orang ke versi berbayar di app store. Jika saya menggunakan tautan standar

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

iPhone membuka Safari terlebih dahulu, lalu app store. Saya telah menggunakan aplikasi lain yang membuka app store secara langsung, jadi saya tahu itu mungkin.

Ada ide? Apa Skema URL untuk toko aplikasi?

matt
sumber
1
Untuk SWIFT 3.X dan aplikasi yang dilokalkan, jawaban ini mungkin membantu: stackoverflow.com/a/41765175/3143890
LukeSideWalker

Jawaban:

771

Diedit pada 2016-02-02

Mulai dari iOS 6 kelas SKStoreProductViewController diperkenalkan. Anda dapat menautkan aplikasi tanpa meninggalkan aplikasi Anda. Cuplikan kode dalam Swift 3.x / 2.x dan Objective-C ada di sini .

Sebuah SKStoreProductViewController objek hadiah toko yang memungkinkan pengguna untuk membeli media lain dari App Store. Misalnya, aplikasi Anda mungkin menampilkan toko untuk memungkinkan pengguna membeli aplikasi lain.


Dari Berita dan Pengumuman Untuk Pengembang Apple .

Dorong Pelanggan Langsung ke Aplikasi Anda di App Store dengan Tautan iTunes Dengan tautan iTunes Anda dapat memberi pelanggan Anda cara mudah untuk mengakses aplikasi Anda di App Store langsung dari situs web Anda atau kampanye pemasaran. Membuat tautan iTunes sederhana dan dapat dilakukan untuk mengarahkan pelanggan ke salah satu aplikasi, semua aplikasi Anda, atau ke aplikasi tertentu dengan nama perusahaan Anda yang ditentukan.

Untuk mengirim pelanggan ke aplikasi tertentu: http://itunes.com/apps/appname

Untuk mengirim pelanggan ke daftar aplikasi yang Anda miliki di App Store: http://itunes.com/apps/developername

Untuk mengirim pelanggan ke aplikasi tertentu dengan nama perusahaan Anda termasuk dalam URL: http://itunes.com/apps/developername/appname


Catatan tambahan:

Anda dapat mengganti http://dengan itms://atau itms-apps://untuk menghindari pengalihan.

Harap dicatat bahwa itms://akan mengirim pengguna ke iTunes store dan itms-apps://mengirimkannya ke App Store!

Untuk info tentang penamaan, lihat Apple QA1633:

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

Edit (per Januari 2015):

itunes.com/apps tautan harus diperbarui ke appstore.com/apps. Lihat QA1633 di atas, yang telah diperbarui. QA1629 baru menyarankan langkah-langkah dan kode ini untuk meluncurkan toko dari aplikasi:

  1. Luncurkan iTunes di komputer Anda.
  2. Cari item yang ingin Anda tautkan.
  3. Klik kanan atau klik kontrol pada nama item di iTunes, lalu pilih "Salin iTunes Store URL" dari menu pop-up.
  4. Dalam aplikasi Anda, membuat NSURLobjek dengan iTunes URL disalin, kemudian lulus obyek ini untuk UIApplication's openURL: metode untuk membuka item Anda di App Store.

Kode sampel:

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

Cepat 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.
sumber
161
Kiatnya adalah menggunakan itms: // alih-alih http: //, maka itu akan terbuka di app store secara langsung. Di iPhone, itu akan membuat pengalihan 2 (!) Saat menggunakan http, dan 1 saat menggunakan itms. Saat menggunakan tautan phobos yang lebih lama (lihat di atas), ada 0 pengalihan. Gunakan id dari iTunes Connect jika menggunakan tautan phobos. Anda dapat memilih untuk mengirimkan aplikasi tanpa menyertakan biner. Dengan cara ini Anda akan mendapatkan id sebelum Anda mengirimkan biner yang sebenarnya. Saya belum mencoba ini, tetapi saya sudah mendengar itu bekerja.
quano
11
Lihat: developer.apple.com/library/ios/#qa/qa1633/_index.html (Ruang putih seharusnya dihilangkan.)
Nathan S.
8
Kecuali ... apa nilai yang benar untuk digunakan appname? Apakah itu "Nama Tampilan Bundel" aplikasi? Apakah ini case-insensitive? Bagaimana ruang kosong ditangani, dll?
aroth
14
Ini harus diuji pada perangkat nyata.
Protocole
7
Ini HARUS diuji pada perangkat nyata, ya! Saya berjuang dengan tidak ada yang terjadi selama sekitar satu jam sebelum menghubungkan iPad dan mengujinya di sana. Geh.
Kalle
361

Jika Anda ingin membuka aplikasi langsung ke App Store, Anda harus menggunakan:

itms-apps: // ...

Dengan cara ini, ia akan langsung membuka aplikasi App Store di perangkat, alih-alih pergi ke iTunes terlebih dahulu, kemudian hanya membuka App Store (saat hanya menggunakan itms: //)

Semoga itu bisa membantu.


EDIT: APR, 2017. itms-apps: // sebenarnya berfungsi lagi di iOS10. Saya mengujinya.

EDIT: April, 2013. Ini tidak lagi berfungsi di iOS5 dan di atas. Gunakan saja

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

dan tidak ada lagi arahan ulang.

GeneCode
sumber
2
@ PEZ Mulai hari ini, saya melihat dua pengalihan ketika menggunakan http: // ... Jawabannya bekerja dengan baik untuk saya - itms-apps: // ... langsung membuka aplikasi App Store di perangkat, tanpa pengalihan.
Josh Brown
4
Rocotilos, apakah Anda yakin ini tidak lagi berfungsi? Bisakah Anda memposting tautan?
johndodo
8
Di iOS. itmsmembuka itunes. saat itms-appsmembuka App Store. Ini adalah perbedaan utama jika mendorong pengguna untuk memperbarui! (iOS 10)
mcm
2
itms-appsmembuka aplikasi App Store untuk saya via openURL:di iOS 10.2. Tampaknya tidak ada masalah.
pkamb
1
Sejak 10.3 metode ini berfungsi tetapi harus melewati sembulan tampilan perantara 'buka URL ini dengan app store'? Referensi: blog.branch.io/...
gabry
51

Mulai dari iOS 6 cara yang benar untuk melakukannya dengan menggunakan kelas 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")

Anda bisa mendapatkan pengenal item itunes aplikasi seperti ini: (bukan yang statis)

Cepat 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")

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

Anda bisa mendapatkan kAppITunesItemIdentifier(pengidentifikasi item aplikasi iTunes) seperti ini: (bukan yang statis)

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
sumber
4
dengan cepat jangan lupa untuk mengimpor dan mendelegasikan: impor kelas StoreKit RateMeViewController: UIViewController, SKStoreProductViewControllerDelegate {
djdance
Ini masih berfungsi, namun ketika Anda pergi dan mengklik Tulis Tinjauan, itu tidak berfungsi. Anda harus mengklik tombol Toko di sudut atas dan kemudian klik Tulis Ulasan. Adakah yang tahu solusinya ??
socca1157
"Tulis ulasan" mencoba membuka modal lain dan gagal, mungkin karena Anda sudah mempresentasikan dalam modal. Tetapi Apple memaksanya. Jadi sepertinya tidak ada cara yang tepat untuk membuat ulasan bekerja. membuat seluruh konsep ini batal.
AmitP
Json itu tidak selalu mengembalikan data dan terkadang menghitung nol. Tidak dapat diandalkan untuk mendapatkan id aplikasi sebelum pengiriman.
Amber K
41

Untuk musim panas 2015 dan seterusnya ...

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

ganti 'id1234567890' dengan 'id' dan 'sepuluh digit angka Anda'

  1. Ini berfungsi dengan baik di semua perangkat .

  2. Itu langsung pergi ke app store, tidak ada arahan ulang.

  3. Tidak apa-apa untuk semua toko nasional .

  4. Memang benar Anda harus pindah menggunakan loadProductWithParameters , tetapi jika tujuan tautannya adalah untuk memperbarui aplikasi yang sebenarnya Anda masuki: mungkin lebih baik menggunakan pendekatan "kuno" ini.

Joe Blow
sumber
Juga, untuk mengarahkan ke halaman pengembang Anda (jika Anda ingin menunjukkan kepada pengguna katalog aplikasi Anda) Anda dapat menggunakan: NSString * simple = @ "itms-apps: //itunes.com/apps/YOUR_COMPANY_NAME";
TheBestBigAl
2
Di mana saya menemukan id ini?
mcfly soft
1
Musim panas 2015 ?! Seperti seluruh dunia hidup di negara yang sama. :(
nacho4d
39

Apple baru saja mengumumkan url appstore.com.

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

Ada tiga jenis Tautan Pendek App Store, dalam dua bentuk, satu untuk aplikasi iOS, lainnya untuk Mac Apps:

Nama Perusahaan

iOS: http://appstore.com/ misalnya, http://appstore.com/apple

Mac: http://appstore.com/mac/ misalnya, http://appstore.com/mac/apple

Nama aplikasi

iOS: http://appstore.com/ misalnya, http://appstore.com/keynote

Mac: http://appstore.com/mac/ misalnya, http://appstore.com/mac/keynote

Aplikasi oleh Perusahaan

iOS: http://appstore.com/ / misalnya, http://appstore.com/apple/keynote

Mac: http://appstore.com/mac/ / misalnya, http://appstore.com/mac/apple/keynote

Sebagian besar perusahaan dan aplikasi memiliki Link Pendek App Store kanonik. URL kanonik ini dibuat dengan mengubah atau menghapus karakter tertentu (banyak di antaranya ilegal atau memiliki arti khusus dalam URL (misalnya, "&")).

Untuk membuat Tautan Pendek App Store, terapkan aturan berikut ini ke perusahaan atau nama aplikasi Anda:

Hapus semua spasi putih

Ubah semua karakter menjadi huruf kecil

Hapus semua simbol hak cipta (©), merek dagang (™), dan merek terdaftar (®)

Ganti ampersand ("&") dengan "dan"

Hapus sebagian besar tanda baca (Lihat Listing 2 untuk set)

Ganti aksen dan karakter "dihiasi" lainnya (ü, å, dll.) Dengan karakter unsurnya (u, a, dll.)

Biarkan semua karakter lain apa adanya.

Cantumkan 2 karakter Tanda Baca yang harus dihapus.

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

Di bawah ini adalah beberapa contoh untuk menunjukkan konversi yang terjadi.

Toko aplikasi

Contoh Nama Perusahaan

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

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

Fotografi & Perangkat Lunak Chen => http://appstore.com/chensphotographyandsoftware

Contoh Nama Aplikasi

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

Dimana Perry saya? => http://appstore.com/wheresmyperry

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

Dev01
sumber
1
ini sebenarnya satu-satunya hal yang masih bisa diandalkan untuk toko mac setidaknya
Radu Simionescu
Baik untuk mengetahui hal ini, tetapi sayangnya di iOS ini dialihkan melalui Safari (dan memberikan pesan "Tidak Dapat Memverifikasi Server Identitas" yang jelek).
sudo make install
TIDAK. Baca ini - "Tautan Pendek App Store ini disediakan untuk kenyamanan dan tidak dijamin untuk terhubung ke aplikasi atau perusahaan tertentu." Jadi pada dasarnya itu diberikan secara acak.
durazno
30

Kode ini menghasilkan tautan App Store di iOS

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

Ganti itms-apps dengan http di Mac:

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

Buka URL di iOS:

[[UIApplication sharedApplication] openURL:appStoreURL];

Mac:

[[NSWorkspace sharedWorkspace] openURL:appStoreURL];
Tibidabo
sumber
Ini berfungsi, tetapi Anda juga harus menghapus karakter khusus seperti tanda hubung dari nama aplikasi.
Macondo2Seattle
Terima kasih @ 3 revs dan @BlackRider
Ganesh Guturi
Bisakah kita membuka dan menampilkan semua aplikasi yang diunggah oleh pengembang dalam satu halaman?
Imran
Ini adalah satu-satunya solusi drop-in yang berfungsi untuk saya dengan pengalihan minimum dan penanganan maksimum spasi nama aplikasi.
LordParsley
29

Untuk memiliki tautan langsung tanpa pengalihan:

  1. Gunakan pembuat tautan iTunes http://itunes.apple.com/linkmaker/ untuk mendapatkan tautan langsung yang sebenarnya
  2. Ganti http://denganitms-apps://
  3. Buka tautan dengan [[UIApplication sharedApplication] openURL:url];

Hati-hati, tautan itu hanya berfungsi pada perangkat yang sebenarnya, bukan di simulator.

Sumber: https://developer.apple.com/library/ios/#qa/qa2008/qa1629.html

dulgan
sumber
3
+1 untuk itunes.apple.com/linkmaker, semua orang menguji tautan di perangkat bukan di simulator, saya membuang-buang waktu dalam pengujian simulator.
karthik
2
Terima kasih atas info tentang Simulator, saya akan menambahkan ini ke jawabannya
dulgan
18

Ini bekerja dengan baik untuk saya hanya menggunakan ID aplikasi:

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

Jumlah pengalihan adalah NOL.

Almas Adilbek
sumber
13

Sejumlah jawaban menyarankan menggunakan 'itms' atau 'itms-apps' tetapi praktik ini tidak secara khusus direkomendasikan oleh Apple. Mereka hanya menawarkan cara berikut untuk membuka App Store:

Listing 1 Meluncurkan App Store dari aplikasi iOS

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

Lihat https://developer.apple.com/library/ios/qa/qa1629/_index.html terakhir diperbarui Maret, 2014 sebagai jawaban ini.

Untuk aplikasi yang mendukung iOS 6 dan di atasnya, Apple menawarkan mekanisme dalam aplikasi untuk menghadirkan 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
}];

Perhatikan bahwa pada iOS6, blok penyelesaian mungkin tidak dipanggil jika ada kesalahan. Tampaknya ini adalah bug yang diselesaikan di iOS 7.

Ben Flynn
sumber
12

Jika Anda ingin menautkan ke aplikasi pengembang dan nama pengembang memiliki tanda baca atau spasi (mis. Development Company, LLC) dari URL Anda seperti ini:

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

Kalau tidak, ia mengembalikan "Permintaan ini tidak dapat diproses" di iOS 4.3.3

Andrew
sumber
1
Jika ini tidak berhasil untuk Anda, coba sintaks berikut: itms-apps: //itunes.com/apps/ChuckSmith/id290402113 mengganti nama saya dengan perusahaan Anda dan ID saya dengan ID Artis Anda yang dapat Anda peroleh dari tautan iTunes pembuat: itunes.apple.com/linkmaker
Chuck Smith
Anda juga dapat mencoba untuk menyandikan karakter "khusus" - yaitu ganti "." dengan "% 2E"
wzs
itu adalah jawaban sang prefek!
Sam B
11

Anda bisa mendapatkan tautan ke item tertentu di app store atau iTunes melalui pembuat tautan di: http://itunes.apple.com/linkmaker/

Octavio Berlanga
sumber
Yang ini membantu saya, karena tautan di itunes-connect saya tidak berfungsi, dan di generatornya tidak. terima kasih
Dorad 6-15
9

Ini berfungsi dan menghubungkan langsung di ios5

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

Ini adalah cara sederhana dan singkat untuk mengarahkan / menautkan aplikasi lain yang ada di app store.

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

 if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:customURL]])
 {
       [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
 } 
iChirag
sumber
6

Untuk Xcode 9.1 dan Swift 4:

  1. Impor StoreKit:
import StoreKit

2.Konfigurasi protokol

SKStoreProductViewControllerDelegate

3. Terapkan protokol

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. Cara Penggunaan:
openStoreProductWithiTunesItemIdentifier(identifier: "here_put_your_App_id")

catatan:

Sangat penting untuk memasukkan ID persis dari aplikasi Anda. Karena ini menyebabkan kesalahan (tidak menampilkan log kesalahan, tetapi tidak ada yang berfungsi dengan baik karena ini)

xhinoda
sumber
1
Saya melakukan hal yang sama, berjalan di perangkat. Tidak berhasil
Andrea Mugnaini
4

Saya dapat mengonfirmasi bahwa jika Anda membuat aplikasi di iTunes Connect, Anda akan mendapatkan id aplikasi Anda sebelum mengirimkannya.

Karena itu..

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

Berhasil

pengguna1641587
sumber
4

Membuat tautan dapat menjadi masalah yang rumit ketika mendukung banyak OS dan banyak platform. Misalnya WebObjects tidak didukung di iOS 7 (beberapa di antaranya), beberapa tautan yang Anda buat akan membuka toko negara lain daripada pengguna, dll.

Ada perpustakaan open source yang disebut iLink yang dapat membantu Anda.

Ada keuntungan dari perpustakaan ini adalah bahwa tautan akan ditemukan dan dibuat pada saat run time (perpustakaan akan memeriksa ID aplikasi dan OS yang sedang berjalan dan akan mencari tahu tautan apa yang harus dibuat). Poin terbaik dalam hal ini adalah Anda tidak perlu mengkonfigurasi hampir semua hal sebelum menggunakannya sehingga bebas dari kesalahan dan akan selalu berfungsi. Itu bagus juga jika Anda memiliki beberapa target pada proyek yang sama sehingga Anda tidak harus mengingat ID aplikasi atau tautan mana yang digunakan. Pustaka ini juga akan meminta pengguna untuk memperbarui aplikasi jika ada versi baru di toko (ini dibangun di dalam dan Anda mematikannya dengan bendera sederhana) langsung menunjuk ke halaman peningkatan aplikasi jika pengguna setuju.

Salin 2 file perpustakaan ke proyek Anda (iLink.h & iLink.m).

Di appDelegate.m Anda:

#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.
}

dan di tempat Anda ingin membuka halaman peringkat misalnya gunakan saja:

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

Jangan lupa untuk mengimpor iLink.h pada file yang sama.

Ada dokumen yang sangat bagus untuk seluruh perpustakaan di sana dan contoh proyek untuk iPhone dan untuk Mac.

Jameson
sumber
4

Setidaknya iOS 9 ke atas

  • Buka langsung di App Store

Sebuah aplikasi

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

Daftar aplikasi pengembang

itms-apps://itunes.apple.com/developer/[developerName]/[developerID]
Jakub Truhlář
sumber
appNametidak perlu.
DawnSong
4

Menurut dokumen terbaru Apple, Anda harus menggunakan

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

atau

SKStoreProductViewController 
Mihir Oza
sumber
Bisakah Anda memperbarui tautan Anda? Ini tampaknya cukup menarik jika itu tidak berhasil.
Rémy Virin
Dokumen yang ditautkan tidak menyebutkan itms:atau itms-apps:. Tautan yang menggunakan skema itu berfungsi dengan baik di perangkat saya yang menjalankan iOS 12.
Theo
4

Meskipun ada banyak jawaban di sini, tidak ada saran untuk menautkan ke aplikasi pengembang yang tampaknya berfungsi lagi.

Ketika saya terakhir mengunjungi saya bisa membuatnya bekerja menggunakan format:

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

Ini tidak lagi berfungsi, tetapi menghapus nama pengembang tidak:

itms-apps://itunes.apple.com/developer/id123456789
Leon
sumber
3

Jika Anda memiliki id toko aplikasi, Anda sebaiknya menggunakannya. Terutama jika Anda di masa depan dapat mengubah nama aplikasi.

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

Jika Anda tidak memiliki id toko aplikasi, Anda dapat membuat url berdasarkan dokumentasi ini 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;
}

Lulus tes ini

- (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
sumber
3

Semua jawaban sudah usang dan tidak berfungsi; gunakan metode di bawah ini.

Semua aplikasi pengembang:
itms-apps://apps.apple.com/developer/developer-name/developerId

Aplikasi tunggal:
itms-apps://itunes.apple.com/app/appId

Karen Karapetyan
sumber
1

itu akan membuka App Store secara langsung

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

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
Biswajit Banik
sumber
0

Coba dengan cara ini

http://itunes.apple.com/lookup?id= "ID aplikasi Anda di sini" kembalikan json.Dari ini, cari kunci " trackViewUrl " dan nilainya adalah url yang diinginkan. gunakan url ini (ganti saja https://dengan itms-apps://). Ini berfungsi dengan baik.

Misalnya jika ID aplikasi Anda xyz kemudian buka tautan ini http://itunes.apple.com/lookup?id=xyz

Kemudian cari url untuk kunci " trackViewUrl ". Ini adalah url untuk aplikasi Anda di app store dan untuk menggunakan url ini di xcode coba ini

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

Terima kasih

Tunvir Rahman Tusher
sumber