Cách liên kết với các ứng dụng trên cửa hàng ứng dụng


700

Tôi đang tạo một phiên bản miễn phí của trò chơi iPhone của tôi. Tôi muốn có một nút bên trong phiên bản miễn phí đưa mọi người đến phiên bản trả phí trong cửa hàng ứng dụng. Nếu tôi sử dụng một liên kết tiêu chuẩn

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

iPhone mở Safari trước và sau đó là cửa hàng ứng dụng. Tôi đã sử dụng các ứng dụng khác mở cửa hàng ứng dụng trực tiếp, vì vậy tôi biết điều đó là có thể.

Có ý kiến ​​gì không? Lược đồ URL cho cửa hàng ứng dụng là gì?


1
Đối với SWIFT 3.X và các ứng dụng được bản địa hóa, câu trả lời này có thể giúp: stackoverflow.com/a/41765175/3143890
LukeSideWalker

Câu trả lời:


771

Đã chỉnh sửa vào ngày 2016/02/02

Bắt đầu từ lớp SKStore ProducttViewControll của iOS 6 đã được giới thiệu. Bạn có thể liên kết một ứng dụng mà không cần rời khỏi ứng dụng của bạn. Đoạn mã trong Swift 3.x / 2.xObjective-Cở đây .

Một đối tượng SKStore ProducttViewControll trình bày một cửa hàng cho phép người dùng mua phương tiện khác từ App Store. Ví dụ: ứng dụng của bạn có thể hiển thị cửa hàng để cho phép người dùng mua ứng dụng khác.


Từ Tin tức và Thông báo cho các nhà phát triển của Apple .

Hướng khách hàng trực tiếp đến ứng dụng của bạn trên App Store bằng liên kết iTunes Với liên kết iTunes, bạn có thể cung cấp cho khách hàng một cách dễ dàng để truy cập ứng dụng của mình trên App Store trực tiếp từ trang web hoặc các chiến dịch tiếp thị. Tạo liên kết iTunes rất đơn giản và có thể được thực hiện để hướng khách hàng đến một ứng dụng duy nhất, tất cả các ứng dụng của bạn hoặc đến một ứng dụng cụ thể có tên công ty bạn chỉ định.

Để gửi khách hàng đến một ứng dụng cụ thể: http://itunes.com/apps/appname

Để đưa khách hàng đến danh sách các ứng dụng bạn có trên App Store: http://itunes.com/apps/developername

Để gửi khách hàng đến một ứng dụng cụ thể có tên công ty của bạn được bao gồm trong URL: http://itunes.com/apps/developername/appname


Ghi chú bổ sung:

Bạn có thể thay thế http://bằng itms://hoặc itms-apps://để tránh chuyển hướng.

Xin lưu ý rằng itms://sẽ gửi người dùng đến cửa hàng iTunesitms-apps://gửi họ đến App Store!

Để biết thông tin về cách đặt tên, xem Apple QA1633:

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

Chỉnh sửa (kể từ tháng 1 năm 2015):

liên kết itunes.com/apps nên được cập nhật lên appstore.com/apps. Xem QA1633 ở trên, đã được cập nhật. QA1629 mới gợi ý các bước và mã này để khởi chạy cửa hàng từ một ứng dụng:

  1. Khởi chạy iTunes trên máy tính của bạn.
  2. Tìm kiếm các mục bạn muốn liên kết đến.
  3. Nhấp chuột phải hoặc nhấp chuột điều khiển vào tên của mục trong iTunes, sau đó chọn "Sao chép URL Cửa hàng iTunes" từ menu bật lên.
  4. Trong ứng dụng của bạn, tạo một NSURLđối tượng với URL iTunes được sao chép, sau đó chuyển đối tượng này sang phương thức: UIApplications openURLđể mở mục của bạn trong App Store.

Mã mẫu:

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

Swift 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
Mẹo là sử dụng itms: // thay vì http: //, sau đó nó sẽ mở trực tiếp trong cửa hàng ứng dụng. Trên iPhone, nó sẽ thực hiện 2 (!) Chuyển hướng khi sử dụng http và 1 khi sử dụng itms. Khi sử dụng các liên kết phobos cũ hơn (xem ở trên), có 0 chuyển hướng. Sử dụng id từ iTunes Connect nếu sử dụng liên kết phobos. Bạn có thể chọn gửi một ứng dụng mà không bao gồm nhị phân. Bằng cách này, bạn sẽ nhận được id trước khi bạn gửi nhị phân thực tế. Tôi đã không thử điều này, nhưng tôi đã nghe nó hoạt động.
quano


8
Ngoại trừ ... giá trị chính xác để sử dụng là appnamegì? Đây có phải là "Tên hiển thị gói" của ứng dụng không? Có phải là trường hợp không nhạy cảm? Làm thế nào là không gian trống được xử lý, vv?
aroth

14
Điều này nên được thử nghiệm trên một thiết bị thực sự.
Protocole

7
Điều này NÊN được thử nghiệm trên một thiết bị thực, vâng! Tôi đã vật lộn với không có gì xảy ra trong khoảng một giờ trước khi cắm iPad vào và thử nghiệm nó ở đó. Geh.
Kalle

361

Nếu bạn muốn mở một ứng dụng trực tiếp lên App Store, bạn nên sử dụng:

ứng dụng itms: // ...

Bằng cách này, nó sẽ trực tiếp mở ứng dụng App Store trong thiết bị, thay vì vào iTunes trước, sau đó chỉ mở App Store (khi chỉ sử dụng itms: //)

Mong rằng sẽ giúp.


EDIT: APR, 2017. itms-apps: // thực sự hoạt động trở lại trong iOS10. Tôi đã thử nó.

EDIT: APR, 2013. Điều này không còn hoạt động trong iOS5 trở lên. Chỉ dùng

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

và không có thêm chuyển hướng.


2
@PEZ Tính đến hôm nay, tôi thấy hai chuyển hướng khi sử dụng http: // ... Câu trả lời hoạt động hoàn hảo với tôi - itms-apps: // ... trực tiếp mở ứng dụng App Store trên thiết bị, mà không có bất kỳ chuyển hướng nào.
Josh Brown

4
Rocotilos, bạn có chắc điều này không còn hoạt động? Bạn có thể gửi một liên kết?
johndodo

8
Trên iOS. itmsmở itunes. trong khi itms-appsmở App Store. Đây là một sự khác biệt chính nếu nhắc người dùng cập nhật! (iOS 10)
mcm

2
itms-appsmở ứng dụng App Store cho tôi qua openURL:iOS 10.2. Có vẻ như không có vấn đề.
pkamb ngày

1
Kể từ 10.3 phương thức này hoạt động nhưng nó phải thông qua một cửa sổ bật lên hiển thị trung gian 'mở URL này bằng cửa hàng ứng dụng'? Tham khảo: blog.branch.io/ từ
gabry

51

Bắt đầu từ iOS 6 đúng cách để làm điều đó bằng cách sử dụng lớp SKStore SẢNtViewControll .

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

Bạn có thể lấy mã định danh mục itunes của ứng dụng như thế này: (thay vì tĩnh)

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

mục tiêu-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];
}

Bạn có thể nhận kAppITunesItemIdentifier(định danh mục itunes của ứng dụng) như thế này: (thay vì định dạng tĩnh)

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
trong swift đừng quên nhập và ủy nhiệm: nhập lớp StoreKit RateMeViewCont Bộ điều khiển: UIViewControll, SKStore SẢNtViewControllDelegate {
djdance

Điều này vẫn hoạt động, tuy nhiên khi bạn đi và nhấp vào Viết đánh giá, nó không hoạt động. Bạn phải nhấp vào nút Cửa hàng ở góc trên cùng và sau đó nhấp vào Viết đánh giá. Bất cứ ai biết một cách giải quyết ??
socca1157

"Viết đánh giá" cố gắng mở một phương thức khác và thất bại, có thể là do bạn đã trình bày theo phương thức. Nhưng Apple buộc nó. Vì vậy, dường như không có cách thích hợp để làm cho đánh giá hoạt động. làm cho toàn bộ khái niệm này trống.
AmitP

Cái json đó không phải lúc nào cũng trả về dữ liệu và đôi khi trả về số không. Không đáng tin cậy để có được id ứng dụng trước khi gửi.
Amber K

41

Dành cho mùa hè 2015 trở đi ...

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

thay thế 'id1234567890' bằng 'id' và 'số mười chữ số của bạn'

  1. Điều này hoạt động hoàn hảo trên tất cả các thiết bị .

  2. Nó đi thẳng vào cửa hàng ứng dụng, không chuyển hướng.

  3. Là OK cho tất cả các cửa hàng quốc gia .

  4. Đúng là bạn nên chuyển sang sử dụng loadProductWithParameters , nhưng nếu mục đích của liên kết là cập nhật ứng dụng mà bạn thực sự ở bên trong: sử dụng phương pháp "lỗi thời" này có thể tốt hơn.


Ngoài ra, để chuyển hướng đến trang nhà phát triển của bạn (nếu bạn muốn hiển thị cho người dùng danh mục ứng dụng của mình), bạn có thể sử dụng: NSString * simple = @ "itms-apps: //itunes.com/apps/YOUR_COMPANY_NAME";
TheBestBigAl

2
Tôi tìm id này ở đâu?
mcfly mềm

1
Hè 2015?! Giống như toàn bộ thế giới sống trong cùng một quốc gia. :(
nacho4d

39

Apple vừa công bố các url của appstore.com.

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

Có ba loại Liên kết ngắn của App Store, ở hai dạng, một cho ứng dụng iOS, một loại khác cho Ứng dụng Mac:

Tên công ty

iOS: http://appstore.com/ chẳng hạn, http://appstore.com/apple

Mac: http://appstore.com/mac/ chẳng hạn, http://appstore.com/mac/apple

Tên ứng dụng

iOS: http://appstore.com/ chẳng hạn, http://appstore.com/keynote

Mac: http://appstore.com/mac/ chẳng hạn, http://appstore.com/mac/keynote

Ứng dụng của công ty

iOS: http://appstore.com/ / ví dụ: http://appstore.com/apple/keynote

Mac: http://appstore.com/mac/ / ví dụ: http://appstore.com/mac/apple/keynote

Hầu hết các công ty và ứng dụng có một Liên kết ngắn App Store chuẩn. URL chính tắc này được tạo bằng cách thay đổi hoặc xóa một số ký tự nhất định (nhiều ký tự không hợp lệ hoặc có ý nghĩa đặc biệt trong một URL (ví dụ: "&")).

Để tạo Liên kết ngắn trên App Store, hãy áp dụng các quy tắc sau cho tên công ty hoặc ứng dụng của bạn:

Xóa tất cả khoảng trắng

Chuyển đổi tất cả các ký tự thành chữ thường

Xóa tất cả các ký hiệu bản quyền (©), nhãn hiệu (™) và nhãn hiệu đã đăng ký (®)

Thay thế ký hiệu ("&") bằng "và"

Xóa hầu hết dấu câu (Xem Liệt kê 2 cho tập hợp)

Thay thế các ký tự có dấu và "trang trí" khác (ü, å, v.v.) bằng ký tự nguyên tố của chúng (u, a, v.v.)

Để lại tất cả các nhân vật khác như vốn có.

Liệt kê 2 Các ký tự dấu chấm câu phải được loại bỏ.

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

Dưới đây là một số ví dụ để chứng minh việc chuyển đổi diễn ra.

Cửa hàng ứng dụng

Ví dụ tên công ty

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

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

Nhiếp ảnh & Phần mềm của Chen => http://appstore.com/chensphzeriayandsoftware

Ví dụ tên ứng dụng

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

Perry của tôi đâu rồi? => http://appstore.com/wheresmyperry

Thử thách trí não ™ => http://appstore.com/brainchallenge


1
đây thực sự là điều duy nhất vẫn hoạt động đáng tin cậy cho cửa hàng mac ít nhất
Radu Simionescu

Rất tốt để biết về điều này, nhưng thật không may trên iOS điều này chuyển hướng thông qua Safari (và đưa ra một thông báo "Không thể xác minh danh tính máy chủ" xấu xí).
sudo thực hiện cài đặt

KHÔNG. Đọc điều này - "Các Liên kết ngắn trên App Store này được cung cấp để thuận tiện và không được đảm bảo để liên kết với một ứng dụng hoặc công ty cụ thể." Vì vậy, về cơ bản nó được đưa ra ngẫu nhiên.
durazno

30

Mã này tạo liên kết App Store trên iOS

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

Thay thế ứng dụng itms bằng http trên Mac:

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

Mở URL trên iOS:

[[UIApplication sharedApplication] openURL:appStoreURL];

Mac:

[[NSWorkspace sharedWorkspace] openURL:appStoreURL];

Điều này hoạt động, nhưng bạn cũng phải xóa các ký tự đặc biệt như dấu gạch ngang khỏi tên ứng dụng.
Macondo2Seatussy

Cảm ơn bạn @ 3 vòng quay và @BlackRider
Ganesh Guturi

Chúng tôi có thể mở và hiển thị tất cả các ứng dụng được nhà phát triển tải lên trong một trang không?
Imran

Đây là giải pháp thả xuống duy nhất hoạt động với tôi với các chuyển hướng tối thiểu và xử lý tối đa khoảng trắng tên ứng dụng.
LordParsley

29

Để có một liên kết trực tiếp mà không cần chuyển hướng:

  1. Sử dụng trình tạo liên kết iTunes http://itunes.apple.com/linkmaker/ để có được liên kết trực tiếp thực sự
  2. Thay thế http://bằngitms-apps://
  3. Mở liên kết với [[UIApplication sharedApplication] openURL:url];

Hãy cẩn thận, những liên kết đó chỉ hoạt động trên các thiết bị thực tế, không phải trong trình giả lập.

Nguồn: https://developer.apple.com/l Library / ios / # qa / qa2008 / qa1629.html


3
+1 cho itunes.apple.com/linkmaker,everyone kiểm tra liên kết trong thiết bị không trong trình giả lập, tôi đã lãng phí thời gian trong việc thử nghiệm trình giả lập.
karthik

2
Cảm ơn thông tin về Trình mô phỏng, tôi sẽ thêm câu này vào câu trả lời
dulgan


18

Điều này làm việc cho tôi hoàn hảo khi chỉ sử dụng ID APP:

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

Số lượng chuyển hướng là số KHÔNG.


13

Một số câu trả lời đề xuất sử dụng 'itms' hoặc 'itms-apps' nhưng thực tế này không được Apple khuyến nghị cụ thể. Họ chỉ cung cấp cách sau để mở App Store:

Liệt kê 1 Khởi chạy App Store từ một ứng dụng iOS

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

Xem https://developer.apple.com/l Library / ios / qa / qa1629 / _index.html cập nhật lần cuối vào tháng 3 năm 2014 kể từ câu trả lời này.

Đối với các ứng dụng hỗ trợ iOS 6 trở lên, Apple cung cấp cơ chế trong ứng dụng để trình bày 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
}];

Lưu ý rằng trên iOS6, khối hoàn thành có thể không được gọi nếu có lỗi. Đây dường như là một lỗi đã được giải quyết trong iOS 7.


12

Nếu bạn muốn liên kết đến các ứng dụng của nhà phát triển và tên của nhà phát triển có dấu câu hoặc dấu cách (ví dụ: Công ty phát triển, LLC) tạo thành URL của bạn như sau:

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

Nếu không, nó sẽ trả về "Yêu cầu này không thể được xử lý" trên iOS 4.3.3


1
Nếu điều này không phù hợp với bạn, hãy thử cú pháp sau: itms-apps: //itunes.com/apps/ChuckSmith/id290402113 thay thế tên của tôi bằng công ty của bạn và ID của tôi bằng ID nghệ sĩ của bạn mà bạn có thể nhận được từ liên kết iTunes nhà sản xuất: itunes.apple.com/linkmaker
Chuck Smith

Bạn cũng có thể thử mã hóa các ký tự "đặc biệt" đó - tức là thay thế "." với "% 2E"
wzs

đó là câu trả lời hoàn hảo!
Sam B

11

Bạn có thể nhận được một liên kết đến một mặt hàng cụ thể trong cửa hàng ứng dụng hoặc iTunes thông qua nhà sản xuất liên kết tại: http://itunes.apple.com/linkmaker/


Cái này giúp tôi, vì liên kết trong itunes-connect của tôi không hoạt động, và trong trình tạo nó thì có. cảm ơn bạn
Dorad

9

Điều này đang hoạt động và liên kết trực tiếp trong ios5

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

8

Đây là cách đơn giản và ngắn gọn để chuyển hướng / liên kết ứng dụng hiện có khác trên cửa hàng ứng dụng.

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

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

6

Đối với Xcode 9.1 và Swift 4:

  1. Nhập StoreKit:
import StoreKit

2.Thực hiện giao thức

SKStoreProductViewControllerDelegate

3. Thực hiện giao thức

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. Cách sử dụng:
openStoreProductWithiTunesItemIdentifier(identifier: "here_put_your_App_id")

Ghi chú:

Điều rất quan trọng để nhập ID chính xác của APP của bạn. Bởi vì điều này gây ra lỗi (không hiển thị nhật ký lỗi, nhưng không có gì hoạt động tốt vì điều này)


1
Tôi đang làm điều tương tự, chạy trên thiết bị. Không thành công
Andrea Mugnaini

4

Tôi có thể xác nhận rằng nếu bạn tạo một ứng dụng trong iTunes kết nối, bạn sẽ nhận được id ứng dụng của mình trước khi gửi.

Vì thế..

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

Làm việc


4

Tạo một liên kết có thể trở thành một vấn đề phức tạp khi hỗ trợ nhiều hệ điều hành và nhiều nền tảng. Ví dụ: các WebObject không được hỗ trợ trên iOS 7 (một số trong số chúng), một số liên kết bạn tạo sẽ mở một cửa hàng quốc gia khác sau đó là người dùng, v.v.

Có một thư viện mã nguồn mở gọi là iLink có thể giúp bạn.

Có lợi thế của thư viện này là các liên kết sẽ được tìm thấy và tạo ra trong thời gian chạy (thư viện sẽ kiểm tra ID ứng dụng và HĐH mà nó đang chạy và sẽ tìm ra liên kết nào sẽ được tạo). Điểm tốt nhất ở đây là bạn không cần phải cấu hình hầu hết mọi thứ trước khi sử dụng để không có lỗi và sẽ luôn hoạt động. Điều đó cũng tuyệt vời nếu bạn có một vài mục tiêu trong cùng một dự án để bạn không phải nhớ ID ứng dụng hoặc liên kết nào sẽ sử dụng. Thư viện này cũng sẽ nhắc người dùng nâng cấp ứng dụng nếu có phiên bản mới trên cửa hàng (cái này được tích hợp và bạn tắt nó bằng một lá cờ đơn giản) trực tiếp chỉ vào trang nâng cấp cho ứng dụng nếu người dùng đồng ý.

Sao chép 2 tệp thư viện vào dự án của bạn (iLink.h & iLink.m).

Trên ứng dụng của bạnDelegate.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.
}

và tại nơi bạn muốn mở trang xếp hạng chẳng hạn, chỉ cần sử dụng:

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

Đừng quên nhập iLink.h trên cùng một tệp.

Có một tài liệu rất tốt cho toàn bộ thư viện ở đó và một dự án ví dụ cho iPhone và cho Mac.


4

Ít nhất là iOS 9 trở lên

  • Mở trực tiếp trong App Store

Một ứng dụng

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

Danh sách ứng dụng của nhà phát triển

itms-apps://itunes.apple.com/developer/[developerName]/[developerID]

appNamekhông cần thiết.
DawnSong

4

Theo tài liệu mới nhất của Apple Bạn cần sử dụng

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

hoặc là

SKStoreProductViewController 

Bạn có thể cập nhật liên kết của bạn xin vui lòng? Điều này có vẻ khá thú vị nếu nó không hoạt động.
Rémy Virin

Các tài liệu được liên kết không đề cập đến itms:hoặc itms-apps:. Liên kết sử dụng lược đồ đó hoạt động tốt trên các thiết bị của tôi chạy iOS 12.
Theo

4

Mặc dù có rất nhiều câu trả lời ở đây, nhưng không có gợi ý nào để liên kết với các ứng dụng của nhà phát triển dường như hoạt động nữa.

Khi tôi truy cập lần cuối, tôi có thể làm cho nó hoạt động bằng định dạng:

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

Điều này không còn hoạt động, nhưng loại bỏ tên nhà phát triển:

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

3

Nếu bạn có id cửa hàng ứng dụng, tốt nhất bạn nên sử dụng nó. Đặc biệt nếu bạn trong tương lai có thể thay đổi tên của ứng dụng.

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

Nếu bạn không có id cửa hàng ứng dụng, bạn có thể tạo url dựa trên tài liệu này https://developer.apple.com/l 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;
}

Vượt qua bài kiểm tra này

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

Tất cả các câu trả lời đã lỗi thời và không hoạt động; sử dụng phương pháp dưới đây.

Tất cả các ứng dụng của nhà phát triển:
itms-apps://apps.apple.com/developer/developer-name/developerId

Ứng dụng duy nhất:
itms-apps://itunes.apple.com/app/appId


1

nó sẽ mở App Store trực tiếp

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

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];

0

Hãy thử cách này

http://itunes.apple.com/lookup?id= "ID ứng dụng của bạn tại đây" return json. Từ đây, tìm khóa " trackViewUrl " và giá trị là url mong muốn. sử dụng url này (chỉ cần thay thế https://bằng itms-apps://). Điều này hoạt động tốt.

Ví dụ: nếu ID ứng dụng của bạn là xyz thì hãy truy cập liên kết này http://itunes.apple.com/lookup?id=xyz

Sau đó tìm url cho khóa " trackViewUrl ". Đây là url cho ứng dụng của bạn trong cửa hàng ứng dụng và để sử dụng url này trong xcode, hãy thử điều này

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

Cảm ơn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.