[ios] App Store에서 앱에 연결하는 방법

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

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

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

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



답변

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


답변

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

itms-apps : // …

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

희망이 도움이됩니다.


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

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

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

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


답변

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


답변

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 , 하지만 링크의 목적은 응용 프로그램을 업데이트하는 경우 실제로 내부 있습니다 : 그것은이 “구식”접근 방식을 사용하는 것이 가능 낫다.


답변

애플은 방금 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


답변

이 코드는 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];


답변

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

  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