App Store에서 앱에 연결하는 방법


700

iPhone 게임의 무료 버전을 만들고 있습니다. 무료 버전 안에 버튼을 사용하여 사람들을 앱 스토어의 유료 버전으로 가져 가고 싶습니다. 표준 링크를 사용하면

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

iPhone이 Safari를 먼저 연 다음 앱 스토어를 엽니 다. 앱 스토어를 직접 여는 다른 앱을 사용했기 때문에 가능하다는 것을 알고 있습니다.

어떤 아이디어? 앱 스토어의 URL 체계는 무엇입니까?


1
: SWIFT 3.x 및 지역화 된 응용 프로그램이 응답 세력의 도움이 필요 stackoverflow.com/a/41765175/3143890
LukeSideWalker

답변:


771

2016-02-02에 편집 됨

iOS 6부터 SKStoreProductViewController 클래스가 도입되었습니다. 앱을 종료하지 않고 앱을 연결할 수 있습니다. Swift 3.x / 2.xObjective-C의 코드 스 니펫 은 여기에 있습니다 .

SKStoreProductViewController 객체 선물을 사용자가 앱 스토어에서 다른 미디어를 구입할 수있는 가게. 예를 들어 사용자가 다른 앱을 구매할 수 있도록 앱에 스토어가 표시 될 수 있습니다.


에서 뉴스 및 애플 개발자에 대한 발표 .

iTunes 링크를 통해 App Store에서 고객을 앱으로 직접 유도 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:// 받는 사용자를 보내드립니다 아이튠즈 스토어itms-apps://받는 보내기 그들과 함께 앱 스토어를!

이름 지정에 대한 정보는 Apple QA1633을 참조하십시오.

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

편집 (2015 년 1 월 기준) :

itunes.com/apps 링크는 appstore.com/apps로 업데이트되어야합니다. 업데이트 된 위의 QA1633을 참조하십시오. 새로운 QA1629 는 앱에서 스토어를 시작하기위한 다음 단계와 코드를 제안합니다.

  1. 컴퓨터에서 iTunes를 실행하십시오.
  2. 연결할 항목을 검색하십시오.
  3. iTunes에서 항목 이름을 마우스 오른쪽 단추로 클릭하거나 Control- 클릭 한 다음 팝업 메뉴에서 "iTunes Store URL 복사"를 선택하십시오.
  4. 응용 프로그램 NSURL에서 복사 한 iTunes URL을 사용하여 객체를 생성 한 다음이 객체를 UIApplication's openURL: 메소드에 전달하여 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
팁은 http : // 대신 itms : //를 사용하는 것입니다. 그러면 앱 스토어에서 바로 열립니다. iPhone에서는 http를 사용할 때 2 (!) 리디렉션을, itms를 사용할 때는 1을 리디렉션합니다. 이전 포보스 링크를 사용할 때 (위 참조) 리디렉션이 0 개 있습니다. phobos 링크를 사용하는 경우 iTunes Connect의 ID를 사용하십시오. 바이너리를 포함하지 않고 앱을 제출하도록 선택할 수 있습니다. 이렇게하면 실제 바이너리를 제출하기 전에 ID를 얻을 수 있습니다. 나는 이것을 시도하지 않았지만 그것이 효과가 있다고 들었습니다.
quano

11
참조 : developer.apple.com/library/ios/#qa/qa1633/_index.html (공백은 제거해야합니다.)
Nathan S.

8
제외 ...에 사용할 올바른 값은 무엇 appname입니까? 앱의 "번들 표시 이름"입니까? 대소 문자를 구분하지 않습니까? 공백 등은 어떻게 처리됩니까?
aroth

14
실제 장치에서 테스트해야합니다.
Protocole

7
실제 장치에서 테스트해야합니다. iPad를 연결하고 테스트하기 전에 한 시간 동안 아무 일도 일어나지 않았습니다. eh
Kalle

361

App Store에서 직접 앱을 열려면 다음을 사용해야합니다.

itms-apps : // ...

이렇게하면 먼저 iTunes로 이동하지 않고 장치에서 App Store 앱을 직접 연 다음 itms : // 만 사용하는 경우 App Store 만 엽니 다.

희망이 도움이됩니다.


편집 : APR, 2017. itms-apps : //는 실제로 iOS10에서 다시 작동합니다. 나는 그것을 테스트했다.

편집 : APR, 2013. iOS5 이상에서는 더 이상 작동하지 않습니다. 그냥 사용

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

더 이상 리디렉션이 없습니다.


2
@PEZ 오늘 현재 http : //를 사용할 때 두 가지 리디렉션이 표시됩니다. 답변은 나에게 완벽하게 작동합니다. itms-apps : // ...는 리디렉션없이 기기에서 App Store 앱을 직접 엽니 다.
Josh Brown

4
Rocotilos, 이것이 더 이상 작동하지 않습니까? 링크를 게시 할 수 있습니까?
johndodo

8
iOS에서. itms아이튠즈를 엽니 다. itms-apps앱 스토어 를 엽니 다. 이는 사용자에게 업데이트하라는 메시지를 표시 할 때 중요한 차이점입니다! (iOS 10)
mcm

2
itms-appsopenURL:iOS 10.2에서 나를 위해 App Store 앱을 엽니 다 . 문제가없는 것 같습니다.
pkamb

1
10.3부터이 방법이 작동하지만 중간에 앱 팝업으로이 URL 열기 팝업을 통과해야합니까? 참조 : blog.branch.io/…
gabry

51

SKStoreProductViewController 클래스 를 사용하여 iOS 6부터 올바른 방법으로 시작하십시오 .

스위프트 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")

스위프트 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")

다음과 같이 앱의 아이튠즈 항목 식별자를 얻을 수 있습니다 : (정적 식별자 대신)

스위프트 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)

스위프트 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")

objective-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과 같이 (앱의 아이튠즈 항목 식별자)를 얻을 수 있습니다 : (정적 식별자 대신)

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
신속하게 가져오고 위임하는 것을 잊지 마십시오. import StoreKit 클래스 RateMeViewController : UIViewController, SKStoreProductViewControllerDelegate {
djdance

이것은 여전히 ​​작동하지만, 가서 리뷰 쓰기를 클릭하면 작동하지 않습니다. 상단 모서리에있는 Store 버튼을 클릭 한 다음 리뷰 작성을 클릭해야합니다. 누구나 해결 방법을 알고 있습니까 ??
socca1157

"리뷰 작성"은 다른 모달을 열려고하지만 이미 모달로 표시되어 있기 때문에 실패합니다. 그러나 애플은 그것을 강요한다. 따라서 검토를 수행 할 적절한 방법이없는 것 같습니다. 이 전체 개념을 무효로 만듭니다.
AmitP

그 json은 항상 데이터를 반환하지 않으며 때로는 0을 반환합니다. 제출하기 전에 앱 ID를 얻는 것이 신뢰할 수 없습니다.
Amber K

41

2015 년 여름 이후 ...

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

'id1234567890'을 'id'및 '10 자리 숫자 '로 바꾸십시오.

  1. 이것은 모든 장치에서 완벽하게 작동 합니다 .

  2. 리디렉션없이 앱 스토어 로 바로 이동 합니다.

  3. 모든 전국 매장에 적합 합니다.

  4. 그것은 당신이해야 사실 사용으로 이동 loadProductWithParameters , 하지만 링크의 목적은 응용 프로그램을 업데이트하는 경우 실제로 내부 있습니다 : 그것은이 "구식"접근 방식을 사용하는 것이 가능 낫다.


또한 개발자 페이지로 안내하기 위해 (사용자에게 앱 카탈로그를 표시하려는 경우) 다음을 사용할 수 있습니다. NSString * simple = @ "itms-apps : //itunes.com/apps/YOUR_COMPANY_NAME";
TheBestBigAl

2
이 ID는 어디에서 찾을 수 있습니까?
mcfly soft

1
여름 2015 ?! 전 세계가 같은 나라에 사는 것처럼 :(
nacho4d

39

애플은 방금 appstore.com URL을 발표했다.

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

iOS 앱 용과 Mac Apps 용의 두 가지 형태로 App Store Short Links에는 세 가지 유형이 있습니다.

회사 이름

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 Short Link가 있습니다. 이 정식 URL은 특정 문자를 변경하거나 제거하여 만들어집니다 (많은 문자가 불법이거나 URL에서 특별한 의미를 갖습니다 (예 : "&")).

App Store Short Link를 만들려면 회사 또는 앱 이름에 다음 규칙을 적용하십시오.

공백을 모두 제거

모든 문자를 소문자로 변환

모든 저작권 (©), 상표 (™) 및 등록 상표 (®) 기호를 모두 제거하십시오.

앰퍼샌드 ( "&")를 "and"로 바꾸십시오.

문장 부호를 대부분 제거합니다 (목록은 목록 2 참조).

악센트 및 기타 "장식 된"문자 (ü, å 등)를 기본 문자 (u, a 등)로 바꿉니다.

다른 모든 문자는 그대로 두십시오.

Listing 2 문장 부호 문자를 제거해야한다.

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

다음은 발생하는 변환을 보여주는 몇 가지 예입니다.

앱 스토어

회사 이름 예

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

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

첸의 사진 및 소프트웨어 => http://appstore.com/chensphotographyandsoftware

앱 이름 예

오카리나 => http://appstore.com/ocarina

페리는 어디에 있습니까? => http://appstore.com/wheresmyperry

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


1
이것은 실제로 맥 스토어에서 최소한 여전히 신뢰할 수있는 유일한 것입니다
Radu Simionescu

이에 대해 알아두면 좋지만, 불행히도 iOS에서는 Safari를 통해 리디렉션됩니다 (추악한 "서버 ID를 확인할 수 없습니다"메시지가 표시됨).
sudo make install

아니. 읽어보세요- "이 App Store Short Links는 편의상 제공되며 특정 앱이나 회사에 연결되도록 보장하지 않습니다." 기본적으로 무작위로 제공됩니다.
durazno

30

이 코드는 iOS에서 App Store 링크를 생성합니다.

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를 Mac에서 http로 바꾸십시오.

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

iOS에서 열린 URL :

[[UIApplication sharedApplication] openURL:appStoreURL];

맥:

[[NSWorkspace sharedWorkspace] openURL:appStoreURL];

이것은 작동하지만 앱 이름에서 대시와 같은 특수 문자를 제거해야합니다.
Macondo2Seattle

주셔서 감사합니다 @ 3 회전 속도를 올린다 및 @BlackRider
가네 Guturi을

개발자가 업로드 한 모든 앱을 한 페이지에 열어서 표시 할 수 있습니까?
Imran

이것은 최소 리디렉션 및 앱 이름 공백 처리를 극대화하는 유일한 드롭 인 솔루션이었습니다.
LordParsley

29

리디렉션없이 직접 연결하려면

  1. iTunes 링크 메이커 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
itunes.apple.com/linkmaker의 경우 +1, 시뮬레이터에없는 장치의 링크를 모두 테스트하면 시뮬레이터 테스트에 시간을 낭비하게됩니다.
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를 여는 방법은 다음과 같습니다.

Listing 1 iOS 애플리케이션에서 App Store 시작

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 년 3 월 최종 업데이트를 참조 하십시오 .

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

개발자의 앱에 연결하고 개발자 이름에 구두점이나 공백이있는 경우 (예 : Development Company, LLC) 다음과 같이 URL을 형성하십시오.

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

그렇지 않으면 iOS 4.3.3에서 "이 요청을 처리 할 수 ​​없습니다"를 반환합니다.


1
그래도 문제가 해결되지 않으면 다음 구문을 시도해보십시오. itms-apps : //itunes.com/apps/ChuckSmith/id290402113 내 이름을 회사로 바꾸고 내 ID를 iTunes 링크에서 얻을 수있는 아티스트 ID로 바꿉니다. 메이커 : itunes.apple.com/linkmaker
척 스미스

"특수"문자를 인코딩 할 수도 있습니다 (예 : "."). "% 2E"와 함께
wzs

그게 정답입니다!
Sam B

11

http://itunes.apple.com/linkmaker/ 의 링크 메이커를 통해 앱 스토어 또는 iTunes의 특정 항목에 대한 링크를 얻을 수 있습니다.


itunes-connect의 링크가 작동하지 않고 생성기에서 작동하기 때문에 이것이 도움이됩니다. 감사합니다
Dorad

9

이것은 ios5에서 작동하고 직접 연결됩니다.

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

8

이는 앱 스토어에서 기존의 다른 애플리케이션을 리디렉션 / 링크하는 간단하고 짧은 방법입니다.

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

노트 :

APP의 정확한 ID를 입력하는 것이 매우 중요합니다. 이로 인해 오류가 발생하기 때문에 (오류 로그를 표시하지 않지만 이로 인해 아무것도 작동하지 않음)


1
장치에서 실행되는 동일한 작업을 수행하고 있습니다. 아무도 성공하지
안드레아 Mugnaini

4

iTunes connect에서 앱을 생성하면 제출하기 전에 앱 ID를 얻었음을 확인할 수 있습니다.

따라서..

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

여러 OS 및 여러 플랫폼을 지원할 때 링크를 만드는 것은 복잡한 문제가 될 수 있습니다. 예를 들어, WebObjects는 iOS 7 (일부)에서 지원되지 않으며, 생성 한 일부 링크는 다른 국가 저장소를 연 다음 사용자 등을 엽니 다.

iLink 라는 오픈 소스 라이브러리가 있습니다.

이 라이브러리의 장점은 링크가 런타임에 찾아서 생성된다는 것입니다 (라이브러리는 앱 ID 및 실행중인 OS를 확인하고 어떤 링크를 작성해야하는지 파악합니다). 이것의 가장 좋은 점은 사용하기 전에 거의 아무것도 구성하지 않아도되므로 오류가 없으며 항상 작동한다는 것입니다. 동일한 프로젝트에 대상이 거의 없으므로 사용할 앱 ID 또는 링크를 기억할 필요가 없습니다. 또한이 라이브러리는 사용자가 동의하면 앱의 업그레이드 페이지를 직접 가리키는 스토어에 새 버전이있는 경우 (내장되어 있으며 간단한 플래그로이 기능을 끄면) 앱을 업그레이드하라는 메시지를 표시합니다.

2 개의 라이브러리 파일을 프로젝트 (iLink.h & iLink.m)에 복사하십시오.

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

링크를 업데이트 하시겠습니까? 이것이 효과가 없다면 꽤 흥미로운 것 같습니다.
레미 비린

링크 된 문서는 언급하지 않는 itms:itms-apps:. 이 체계를 사용하는 링크는 iOS 12를 실행하는 장치에서 제대로 작동합니다.
Theo

4

여기에 많은 답변이 있지만 개발자 앱에 연결하기위한 제안은 더 이상 작동하지 않는 것 같습니다.

마지막으로 방문했을 때 형식을 사용하여 작동시킬 수있었습니다.

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

더 이상 작동하지 않지만 개발자 이름을 제거하면 다음과 같습니다.

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

3

앱 스토어 ID가 있다면 사용하는 것이 가장 좋습니다. 특히 나중에 응용 프로그램의 이름이 변경 될 수 있습니다.

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

앱 스토어 ID가 없으면이 설명서 https://developer.apple.com/library/ios/qa/qa1633/_index.html을 기반으로 URL을 만들 수 있습니다.

+ (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= "여기에서 앱 ID"는 json을 반환합니다. 여기서 " trackViewUrl " 키를 찾고 값은 원하는 URL입니다. (단지 대체이 URL을 사용 https://하여 itms-apps://) .This가 잘 작동합니다.

예를 들어, 앱 ID가 xyz 인 경우이 링크 http://itunes.apple.com/lookup?id=xyz 로 이동하십시오.

그런 다음 키 " trackViewUrl " 의 URL을 찾으십시오. 이것은 앱 스토어의 앱 URL이며 xcode 에서이 URL을 사용하려면 이것을 시도하십시오

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.