วิธีเชื่อมโยงไปยังแอพใน App Store


701

ฉันกำลังสร้างเกม iPhone เวอร์ชันฟรี ฉันต้องการปุ่มภายในรุ่นฟรีที่นำผู้คนไปยังรุ่นที่ต้องชำระเงินใน app store ถ้าฉันใช้ลิงค์มาตรฐาน

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

iPhone จะเปิด Safari ก่อนแล้วจึงไปที่ App Store ฉันใช้แอพอื่น ๆ ที่เปิดแอพสโตร์โดยตรงดังนั้นฉันจึงรู้ว่าเป็นไปได้

ความคิดใด ๆ Scheme ของ URL สำหรับ app store คืออะไร


1
สำหรับ SWIFT 3.X และแอปที่แปลเป็นภาษาท้องถิ่นคำตอบนี้อาจช่วยได้: stackoverflow.com/a/41765175/3143890
LukeSideWalker

คำตอบ:


771

แก้ไขเมื่อ 2016-02-02

เริ่มต้นจากคลาสiOS 6 SKStoreProductViewController คุณสามารถลิงค์แอพโดยไม่ต้องออกจากแอพ โค้ดในสวิฟท์ 3.x / 2.xและวัตถุประสงค์ -Cเป็นที่นี่

SKStoreProductViewControllerของขวัญวัตถุร้านค้าที่ช่วยให้ผู้ใช้ในการซื้อสื่ออื่น ๆ จาก App สโตร์ ตัวอย่างเช่นแอปของคุณอาจแสดงร้านค้าเพื่ออนุญาตให้ผู้ใช้ซื้อแอปอื่น


จากข่าวและประกาศสำหรับนักพัฒนาแอปเปิ้ล

ผลักดันลูกค้าโดยตรงไปยังแอพของคุณใน App Store ด้วยลิงค์ iTunes ด้วยลิงก์ iTunes คุณสามารถให้ลูกค้าของคุณด้วยวิธีที่ง่ายในการเข้าถึงแอพของคุณใน App Store โดยตรงจากเว็บไซต์หรือแคมเปญการตลาดของคุณ การสร้างลิงค์ iTunes นั้นง่ายและสามารถนำลูกค้าไปที่แอพเดียวแอพทั้งหมดของคุณหรือไปยังแอพที่ระบุชื่อ บริษัท ของคุณ

ในการส่งลูกค้าไปที่แอปพลิเคชันเฉพาะ: http://itunes.com/apps/appname

ในการส่งลูกค้าไปยังรายการแอพที่คุณมีใน App Store: http://itunes.com/apps/developername

วิธีส่งลูกค้าไปยังแอพที่ระบุชื่อ บริษัท ของคุณรวมอยู่ใน URL: http://itunes.com/apps/developername/appname


หมายเหตุเพิ่มเติม:

คุณสามารถแทนที่http://ด้วยitms://หรือitms-apps://เพื่อหลีกเลี่ยงการเปลี่ยนเส้นทาง

โปรดทราบว่าitms://จะส่งผู้ใช้ไปยังiTunes storeและitms-apps://ส่งพวกเขาไปที่App Store!

สำหรับข้อมูลเกี่ยวกับการตั้งชื่อดู Apple QA1633:

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

แก้ไข (ณ เดือนมกราคม 2558):

ควรอัปเดตลิงค์ itunes.com/apps เป็น appstore.com/apps ดู QA1633 ด้านบนซึ่งได้รับการปรับปรุง QA1629ใหม่แนะนำขั้นตอนและรหัสเหล่านี้สำหรับเปิดตัวร้านค้าจากแอป:

  1. เปิด iTunes บนคอมพิวเตอร์ของคุณ
  2. ค้นหารายการที่คุณต้องการเชื่อมโยง
  3. คลิกขวาหรือคลิกควบคุมที่ชื่อของรายการใน iTunes จากนั้นเลือก "คัดลอก URL ร้านค้า iTunes" จากเมนูป๊อปอัป
  4. ในแอปพลิเคชันของคุณสร้างNSURLวัตถุด้วย iTunes URL ที่คัดลอกแล้วส่งต่อวัตถุนี้ไปที่UIApplication's openURL: method เพื่อเปิดรายการของคุณใน App Store

รหัสตัวอย่าง:

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

สวิฟท์ 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
เคล็ดลับคือใช้ itms: // แทน http: // จากนั้นจะเปิดใน app store โดยตรง บน iPhone จะทำการเปลี่ยนเส้นทาง 2 (!) เมื่อใช้ http และ 1 เมื่อใช้ itms เมื่อใช้ลิงก์ phobos รุ่นเก่า (ดูด้านบน) จะมีการเปลี่ยนเส้นทาง 0 รายการ ใช้ id จาก iTunes Connect หากใช้การเชื่อมโยง phobos คุณสามารถเลือกที่จะส่งแอพโดยไม่ต้องใส่ไบนารี วิธีนี้คุณจะได้รับรหัสก่อนที่คุณจะส่งไบนารีจริง ฉันไม่ได้ลองสิ่งนี้ แต่ฉันได้ยินมาว่าใช้งานได้
quano

11
ดู: developer.apple.com/library/ios/#qa/qa1633/_index.html (ควรลบพื้นที่สีขาว)
นาธานเอส

8
ยกเว้น ... ค่าที่ถูกต้องที่ใช้appnameคืออะไร เป็น "ชื่อที่แสดง Bundle" ของแอปหรือไม่ มันเป็นกรณีตายหรือไม่ มีการจัดการช่องว่างว่าง ฯลฯ อย่างไร
aroth

14
ควรทดสอบกับอุปกรณ์จริง
Protocole

7
ควรทดสอบบนอุปกรณ์จริงใช่! ฉันต่อสู้กับสิ่งใดเกิดขึ้นประมาณหนึ่งชั่วโมงก่อนเสียบ iPad เข้าและทดสอบที่นั่น Geh
Kalle

361

หากคุณต้องการเปิดแอปโดยตรงไปยัง App Store คุณควรใช้:

itms ปพลิเคชัน: // ...

วิธีนี้จะเป็นการเปิดแอพ App Store ในอุปกรณ์โดยตรงแทนที่จะไปที่ iTunes ก่อนจากนั้นจึงเปิดเฉพาะ App Store (เมื่อใช้ just itms: //)

หวังว่าจะช่วย


แก้ไข: เมษายน, 2017. itms-apps: // ใช้งานได้จริงอีกครั้งใน iOS10 ฉันทดสอบมัน

แก้ไข: เมษายน 2013 นี้ไม่ทำงานใน iOS5 ขึ้นไป เพียงแค่ใช้

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

และไม่มีการเปลี่ยนเส้นทางอีก


2
@PEZ ณ วันนี้ฉันเห็นการเปลี่ยนเส้นทางสองครั้งเมื่อใช้ http: // ... คำตอบนั้นเหมาะสำหรับฉัน - itms-apps: // ... เปิดแอพ App Store บนอุปกรณ์โดยตรงโดยไม่ต้องเปลี่ยนเส้นทาง
Josh Brown

4
Rocotilos คุณแน่ใจหรือไม่ว่าใช้งานไม่ได้อีกต่อไป? คุณสามารถโพสต์ลิงค์ได้หรือไม่?
johndodo

8
บน iOS itmsเปิด iTunes ในขณะที่itms-appsเปิด App Store นี่คือข้อแตกต่างที่สำคัญหากแจ้งให้ผู้ใช้อัพเดต! (iOS 10)
mcm

2
itms-appsเปิดแอพ App Store สำหรับฉันผ่านopenURL:ใน iOS 10.2 ดูเหมือนว่าจะไม่มีปัญหา
pkamb

1
ตั้งแต่ 10.3 วิธีนี้ใช้งานได้ แต่ต้องผ่านป๊อปอัปการแสดงผลระดับกลางว่า 'เปิด URL นี้ด้วย app store' หรือไม่ การอ้างอิง: blog.branch.io/…
gabry

51

เริ่มต้นจาก iOS 6 อย่างถูกต้องโดยใช้คลาส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")

คุณสามารถรับตัวระบุรายการ itunes ของแอพเช่นนี้: (แทนที่จะเป็นแบบคงที่)

รวดเร็ว 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")

วัตถุประสงค์ -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];
}

คุณสามารถรับkAppITunesItemIdentifier(ตัวระบุรายการ itunes ของแอป) เช่นนี้: (แทนที่จะเป็นแบบคงที่)

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
ใน swift อย่าลืมที่จะนำเข้าและมอบหมาย: นำเข้า StoreKit คลาส RateMeViewController: UIViewController, SKStoreProductViewControllerDelegate {
djdance

สิ่งนี้ยังใช้งานได้ แต่เมื่อคุณไปและคลิกเขียนคำวิจารณ์มันจะไม่ทำงาน คุณต้องคลิกปุ่ม Store ที่มุมด้านบนแล้วคลิกเขียนคำวิจารณ์ ใครรู้วิธีแก้ปัญหา?
socca1157

"เขียนความเห็น" พยายามที่จะเปิดเป็นกิริยาช่วยอื่นและล้มเหลวอาจเป็นเพราะคุณได้นำเสนอเป็นกิริยาช่วยแล้ว แต่ Apple บังคับให้มัน ดูเหมือนว่าไม่มีวิธีที่เหมาะสมในการตรวจสอบการทำงาน การแสดงผลแนวคิดทั้งหมดนี้เป็นโมฆะ
AmitP

json นั้นไม่ได้ส่งคืนข้อมูลเสมอและส่งกลับบางครั้งนับศูนย์ ไม่น่าเชื่อถือในการรับรหัสแอปก่อนส่ง
เหลืองอำพัน K

41

สำหรับฤดูร้อนปี 2015 เป็นต้นไป ...

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

แทนที่ 'id1234567890' ด้วย 'id' และ 'หมายเลขสิบหลักของคุณ'

  1. นี้ทำงานอย่างสมบูรณ์บนอุปกรณ์ทั้งหมด

  2. มันจะตรงไปที่ app store ไม่มีการเปลี่ยนเส้นทาง

  3. ตกลงสำหรับทุกร้านค้าแห่งชาติ

  4. มันเป็นความจริงที่คุณควรจะย้ายไปใช้ loadProductWithParameters , แต่ถ้าจุดประสงค์ของการเชื่อมโยงคือการอัปเดตแอปที่คุณเป็นจริงภายใน: มันอาจจะดีกว่าที่จะใช้นี้ "ล้าสมัย" วิธีการ


นอกจากนี้สำหรับการนำทางไปยังหน้าผู้พัฒนาของคุณ (หากคุณต้องการแสดงแคตตาล็อกแอปของคุณให้กับผู้ใช้) คุณสามารถใช้: NSString * simple = @ "itms-apps: //itunes.com/apps/YOUR_COMPANY_NAME";
TheBestBigAl

2
ฉันจะหารหัสนี้ได้ที่ไหน
mcfly soft

1
ฤดูร้อนปี 2015! เหมือนคนทั้งโลกที่อาศัยอยู่ในประเทศเดียวกัน :(
nacho4d

39

Apple เพิ่งประกาศ URL ของ appstore.com

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

ลิงก์สั้นของ App Store มีสามประเภทในสองรูปแบบหนึ่งสำหรับแอป iOS และอีกประเภทสำหรับ Mac Apps:

ชื่อ บริษัท

iOS: http://appstore.com/ตัวอย่างเช่นhttp://appstore.com/apple

Mac: http://appstore.com/mac/ตัวอย่างเช่นhttp://appstore.com/mac/apple

ชื่อแอป

iOS: http://appstore.com/ตัวอย่างเช่นhttp://appstore.com/keynote

Mac: http://appstore.com/mac/ตัวอย่างเช่นhttp://appstore.com/mac/keynote

แอพโดย บริษัท

iOS: http://appstore.com/ / ตัวอย่างเช่นhttp://appstore.com/apple/keynote

Mac: http://appstore.com/mac/ / ตัวอย่างเช่นhttp://appstore.com/mac/apple/keynote

บริษัท และแอพพลิเคชั่นส่วนใหญ่จะมีลิงค์ทางลัด App Store ซึ่งเป็นที่ยอมรับ URL แบบบัญญัตินี้ถูกสร้างขึ้นโดยการเปลี่ยนหรือลบอักขระบางตัว (ซึ่งหลายตัวนั้นผิดกฎหมายหรือมีความหมายพิเศษใน URL (ตัวอย่างเช่น "&"))

ในการสร้างลิงค์สั้นของ App Store ให้ใช้กฎต่อไปนี้กับ บริษัท หรือชื่อแอปของคุณ:

ลบช่องว่างทั้งหมด

แปลงอักขระทั้งหมดเป็นตัวพิมพ์เล็ก

ลบสัญลักษณ์ลิขสิทธิ์ (©), เครื่องหมายการค้า (™) และเครื่องหมายจดทะเบียน (®) ทั้งหมด

แทนที่เครื่องหมายและเครื่องหมาย ("&") ด้วย "และ"

ลบเครื่องหมายวรรคตอนส่วนใหญ่ (ดูรายการ 2 สำหรับชุด)

แทนที่อักขระที่เน้นเสียงและ "ตกแต่ง" อื่น ๆ (ü, å ฯลฯ ) ด้วยอักขระองค์ประกอบ (u, a, ฯลฯ )

ปล่อยให้ตัวละครอื่น ๆ ทั้งหมดเป็น - เป็น

รายการ 2 อักขระเครื่องหมายวรรคตอนที่ต้องถูกลบ

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

ด้านล่างนี้เป็นตัวอย่างบางส่วนเพื่อสาธิตการแปลงที่เกิดขึ้น

แอพสโตร์

ตัวอย่างชื่อ บริษัท

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

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

เฉินถ่ายรูปและซอฟต์แวร์ => http://appstore.com/chensphotographyandsoftware

ตัวอย่างชื่อแอป

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

เพอร์รี่ของฉันอยู่ที่ไหน => http://appstore.com/wheresmyperry

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


1
นี่เป็นสิ่งเดียวที่ยังคงใช้งานได้จริงสำหรับร้านค้า Mac อย่างน้อย
Radu Simionescu

เป็นการดีที่จะทราบเกี่ยวกับเรื่องนี้ แต่น่าเสียดายที่ใน iOS นี้การเปลี่ยนเส้นทางผ่าน Safari (และให้ข้อความ "ไม่สามารถตรวจสอบเซิร์ฟเวอร์ที่น่าเกลียด" น่าเกลียด)
sudo ทำการติดตั้ง

NO อ่านสิ่งนี้ - "ลิงก์สั้น ๆ ของ App Store เหล่านี้มีให้เพื่อความสะดวกสบายและไม่รับประกันว่าจะลิงก์ไปยังแอพหรือ บริษัท ใดโดยเฉพาะ" ดังนั้นโดยทั่วไปจะได้รับแบบสุ่ม
durazno

30

รหัสนี้สร้างลิงค์ App Store บน iOS

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

แทนที่ itms-apps ด้วย http บน Mac:

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

เปิด URL บน iOS:

[[UIApplication sharedApplication] openURL:appStoreURL];

Mac:

[[NSWorkspace sharedWorkspace] openURL:appStoreURL];

ใช้งานได้ แต่คุณต้องลบอักขระพิเศษเช่นเครื่องหมายขีดคั่นจากชื่อแอป
Macondo2Seattle

ขอบคุณ @ 3 revs และ @BlackRider
Ganesh Guturi

เราสามารถเปิดและแสดงแอพทั้งหมดที่นักพัฒนาอัปโหลดไว้ในหน้าเดียวได้หรือไม่?
Imran

นี่เป็นทางออกแบบดรอปอินเดียวที่ทำงานกับฉันด้วยการเปลี่ยนเส้นทางขั้นต่ำและการจัดการช่องว่างชื่อแอพสูงสุด
LordParsley

29

หากต้องการมีลิงก์โดยตรงโดยไม่มีการเปลี่ยนเส้นทาง:

  1. ใช้ iTunes link maker http://itunes.apple.com/linkmaker/เพื่อรับลิงค์จริงโดยตรง
  2. แทนที่http://ด้วยitms-apps://
  3. เปิดลิงก์ด้วย [[UIApplication sharedApplication] openURL:url];

ระวังลิงค์เหล่านั้นใช้ได้กับอุปกรณ์จริงเท่านั้นไม่ใช่ในโปรแกรมจำลอง

ที่มา: https://developer.apple.com/library/ios/#qa/qa2008/qa1629.html


3
+1 สำหรับ itunes.apple.com/linkmaker,everyone ทดสอบลิงก์ในอุปกรณ์ที่ไม่ใช่ในโปรแกรมจำลองฉันเสียเวลาในการทดสอบอุปกรณ์จำลอง
karthik

2
ขอบคุณสำหรับข้อมูลเกี่ยวกับ Simulator ฉันจะเพิ่มคำตอบนี้ลงไป
dulgan


18

สิ่งนี้ใช้ได้ผลกับฉันอย่างสมบูรณ์โดยใช้ APP ID เท่านั้น

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

จำนวนการเปลี่ยนเส้นทางคือ ZERO


13

คำตอบจำนวนหนึ่งแนะนำให้ใช้ 'itms' หรือ 'itms-apps' แต่ Apple ไม่แนะนำวิธีนี้โดยเฉพาะ พวกเขาเสนอวิธีต่อไปนี้เพื่อเปิด App Store เท่านั้น:

รายชื่อ 1 การ เปิดตัว App Store จากแอปพลิเคชัน iOS

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

ดูhttps://developer.apple.com/library/ios/qa/qa1629/_index.htmlอัปเดตครั้งล่าสุดเมื่อเดือนมีนาคม 2014 ตามคำตอบนี้

สำหรับแอพที่สนับสนุน iOS 6 ขึ้นไป Apple เสนอกลไกในแอพสำหรับการนำเสนอ 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
}];

โปรดทราบว่าใน iOS6 บล็อกความสมบูรณ์อาจไม่ถูกเรียกใช้หากมีข้อผิดพลาด สิ่งนี้ดูเหมือนจะเป็นข้อบกพร่องที่ได้รับการแก้ไขใน iOS 7


12

หากคุณต้องการเชื่อมโยงไปยังแอพของนักพัฒนาซอฟต์แวร์และชื่อผู้พัฒนามีเครื่องหมายวรรคตอนหรือช่องว่าง (เช่น บริษัท พัฒนา, LLC) ในรูปแบบ URL ของคุณดังนี้:

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

มิฉะนั้นจะส่งคืน "คำขอนี้ไม่สามารถดำเนินการได้" ใน iOS 4.3.3


1
หากวิธีนี้ใช้ไม่ได้กับคุณลองใช้ไวยากรณ์ต่อไปนี้: itms-apps: //itunes.com/apps/ChuckSmith/id290402113 แทนที่ชื่อของฉันด้วย บริษัท และ ID ของฉันด้วยรหัสศิลปินของคุณซึ่งคุณจะได้รับจากลิงก์ iTunes ผู้ผลิต: itunes.apple.com/linkmaker
Chuck Smith

คุณสามารถลองเข้ารหัสตัวอักษร "พิเศษ" - ie replace " กับ "% 2E"
wzs

นั่นคือคำตอบของนายอำเภอ!
Sam B

11

คุณสามารถรับลิงค์ไปยังรายการที่ต้องการได้ในร้านค้าแอพหรือ iTunes ผ่านผู้ทำลิงค์ที่: http://itunes.apple.com/linkmaker/


อันนี้ช่วยฉันได้เพราะลิงก์ในการเชื่อมต่อ iTunes ของฉันใช้งานไม่ได้และในเครื่องกำเนิดไฟฟ้าก็ทำเช่นนั้น ขอบคุณ
Dorad

9

สิ่งนี้ใช้งานได้และเชื่อมโยงโดยตรงใน ios5

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

8

นี่เป็นวิธีที่ง่ายและสั้นในการเปลี่ยนเส้นทาง / เชื่อมโยงแอปพลิเคชันอื่นที่มีอยู่ใน app store

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

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

6

สำหรับ Xcode 9.1 และ Swift 4:

  1. นำเข้า StoreKit:
import StoreKit

2. กำหนดโปรโตคอล

SKStoreProductViewControllerDelegate

3. ใช้โปรโตคอล

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. วิธีใช้:
openStoreProductWithiTunesItemIdentifier(identifier: "here_put_your_App_id")

บันทึก:

มันสำคัญมากที่จะต้องป้อน ID ที่แน่นอนของแอปของคุณ เพราะสิ่งนี้ทำให้เกิดข้อผิดพลาด (ไม่แสดงบันทึกข้อผิดพลาด แต่ไม่มีอะไรทำงานได้ดีเพราะเหตุนี้)


1
ฉันกำลังทำสิ่งเดียวกันวิ่งบนอุปกรณ์ ไม่สำเร็จ
Andrea Mugnaini

4

ฉันสามารถยืนยันได้ว่าหากคุณสร้างแอพใน iTunes เชื่อมต่อคุณจะได้รับรหัสแอพของคุณก่อนที่จะส่ง

ดังนั้น..

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

ทำงานรักษา


4

การสร้างลิงค์อาจกลายเป็นปัญหาที่ซับซ้อนเมื่อรองรับระบบปฏิบัติการหลายระบบและหลายแพลตฟอร์ม ตัวอย่างเช่น WebObjects ไม่ได้รับการสนับสนุนบน iOS 7 (บางส่วน) ลิงก์บางลิงค์ที่คุณสร้างจะเปิดอีกประเทศหนึ่งตามด้วยผู้ใช้เป็นต้น

มีห้องสมุดโอเพ่นซอร์สชื่อว่าiLinkที่สามารถช่วยคุณได้

มีข้อดีของไลบรารีนี้คือลิงก์จะถูกค้นพบและสร้างขึ้นในขณะใช้งาน (ไลบรารีจะตรวจสอบ ID แอปและระบบปฏิบัติการที่ทำงานอยู่และจะหาว่าควรสร้างลิงค์ใด) จุดที่ดีที่สุดในการนี้คือคุณไม่จำเป็นต้องกำหนดค่าเกือบทุกอย่างก่อนที่จะใช้เพื่อให้ปราศจากข้อผิดพลาดและจะทำงานตลอดเวลา ยอดเยี่ยมเช่นกันถ้าคุณมีเป้าหมายน้อยในโครงการเดียวกันดังนั้นคุณไม่จำเป็นต้องจำรหัสแอปหรือลิงก์ที่จะใช้ ไลบรารีนี้จะแจ้งให้ผู้ใช้อัปเกรดแอปหากมีเวอร์ชั่นใหม่ในร้าน (ซึ่งสร้างขึ้นภายในและคุณปิดการทำงานด้วยการตั้งค่าสถานะแบบง่าย) ชี้ไปที่หน้าอัปเกรดสำหรับแอปโดยตรงหากผู้ใช้เห็นด้วย

คัดลอกไฟล์ไลบรารี 2 ไฟล์ไปยังโครงการของคุณ (iLink.h & iLink.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.
}

และในสถานที่ที่คุณต้องการเปิดหน้าการให้คะแนนเช่นใช้:

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

อย่าลืมนำเข้า iLink.h ในไฟล์เดียวกัน

มีเอกสารที่ดีมากสำหรับห้องสมุดทั้งหมดที่นั่นและตัวอย่างโครงการสำหรับ iPhone และ Mac


4

อย่างน้อย iOS 9 ขึ้นไป

  • เปิดโดยตรงใน App Store

แอพ

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

รายการแอพของนักพัฒนา

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

appNameไม่จำเป็น.
DawnSong

4

ตามเอกสารล่าสุดของ Apple คุณต้องใช้

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

หรือ

SKStoreProductViewController 

คุณช่วยอัพเดทลิงค์ของคุณได้ไหม? ดูเหมือนว่าจะน่าสนใจทีเดียวหากไม่ได้ผล
Rémy Virin

เอกสารที่เชื่อมโยงไม่ได้พูดถึงหรือitms: itms-apps:ลิงก์ที่ใช้รูปแบบนั้นทำงานได้ดีบนอุปกรณ์ของฉันที่ใช้ iOS 12
Theo

4

แม้จะมีคำตอบมากมายที่นี่ แต่ไม่มีคำแนะนำสำหรับการลิงก์ไปยังแอพของนักพัฒนาซอฟต์แวร์ที่ดูเหมือนจะทำงานได้อีกต่อไป

เมื่อฉันเข้าชมครั้งล่าสุดฉันสามารถทำให้มันทำงานได้โดยใช้รูปแบบ:

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

สิ่งนี้ไม่ทำงานอีกต่อไป แต่การลบชื่อนักพัฒนาจะทำ:

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

3

หากคุณมีรหัสแอพสโตร์คุณจะใช้งานได้ดีที่สุด โดยเฉพาะอย่างยิ่งหากคุณในอนาคตอาจเปลี่ยนชื่อแอปพลิเคชัน

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

หากคุณไม่มี id app store id คุณสามารถสร้าง URL ตามเอกสารนี้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;
}

ผ่านการทดสอบนี้

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

คำตอบทั้งหมดล้าสมัยและไม่ทำงาน ใช้วิธีการด้านล่าง

แอพทั้งหมดของผู้พัฒนา:
itms-apps://apps.apple.com/developer/developer-name/developerId

แอปเดี่ยว:
itms-apps://itunes.apple.com/app/appId


1

มันจะเปิด App Store โดยตรง

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

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

0

ลองด้วยวิธีนี้

http://itunes.apple.com/lookup?id= "รหัสแอปของคุณที่นี่" return json จากนี้หาคีย์ " trackViewUrl " และค่าคือ url ที่ต้องการ ใช้ url นี้ (แทนที่https://ด้วยitms-apps://) มันใช้งานได้ดี

ตัวอย่างเช่นหากรหัสแอปของคุณคือ xyz ให้ไปที่ลิงก์นี้ http://itunes.apple.com/lookup?id=xyz

จากนั้นหา URL สำหรับคีย์ " trackViewUrl " นี่คือ URL สำหรับแอพของคุณใน app store และใช้ url นี้ใน xcode ลองใช้

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

ขอบคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.