[ios] كيفية الربط بالتطبيقات في متجر التطبيقات



10 Answers

إذا كنت تريد فتح تطبيق مباشرةً على App Store ، يجب عليك استخدام:

itms ل-التطبيقات: // ...

وبهذه الطريقة سيتم فتح تطبيق App Store مباشرة في الجهاز ، بدلاً من الذهاب إلى iTunes أولاً ، ثم فتح متجر التطبيقات فقط (عند استخدام فقط itms: //)

امل ان يساعد.

تعديل: أبريل ، 2017. itms-apps: // في الواقع يعمل مرة أخرى في iOS10. اختبرت ذلك.

تعديل: أبريل ، 2013. هذا لم يعد يعمل في iOS5 وما فوق. مجرد استخدام

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

وليس هناك المزيد من عمليات إعادة التوجيه.

Question

أقوم بإنشاء نسخة مجانية من لعبة iPhone الخاصة بي. أرغب في الحصول على زر داخل النسخة المجانية التي تنقل الأشخاص إلى الإصدار المدفوع في متجر التطبيقات. إذا استخدمت رابطًا قياسيًا

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

يفتح iPhone متصفح Safari أولاً ، ثم متجر التطبيقات. لقد استخدمت تطبيقات أخرى تفتح متجر التطبيقات مباشرة ، لذا أعلم أنه ممكن.

أيه أفكار؟ ما هو مخطط عنوان URL لمتجر التطبيقات؟




لقد نجحت في ذلك تمامًا باستخدام معرّف APP فقط:

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

عدد عمليات إعادة التوجيه هو صفر.




بدءً من نظام iOS 6 ، الطريقة الصحيحة للقيام بذلك عن طريق استخدام فئة SKStoreProductViewController .

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 الخاص بالتطبيق) على 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]];



إذا كنت تريد الارتباط بتطبيقات المطور ، وكان اسم المطور يحتوي على علامات ترقيم أو مسافات (مثل شركة تطوير ، LLC) من عنوان URL الخاص بك مثل:

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

وإلا فسيرجع "يتعذر معالجة هذا الطلب" على نظام التشغيل iOS 4.3.3




إذا كان لديك الرقم التعريفي لمتجر التطبيقات ، فمن الأفضل لك استخدامه. خاصة إذا كنت في المستقبل قد تغير اسم التطبيق.

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

إذا لم يكن لديك رقم تعريف لمتجر التطبيقات ، يمكنك إنشاء عنوان 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);
}






وفقا QA1629 itms-apps: itms: أو itms: لن ينجح. تحتاج إلى استخدام

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

أو

SKStoreProductViewController 



بالنسبة لـ Xcode 9.1 و Swift 4:

  1. استيراد مخزن كيت:
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")

ملحوظة:

من المهم جدًا إدخال معرّف التطبيق الخاص بك بالضبط. لأن هذا يسبب خطأ (لا تظهر سجل الأخطاء ، ولكن لا شيء يعمل بشكل جيد بسبب هذا)




لصيف عام 2015 فصاعدا ...

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

استبدل "id1234567890" بـ "id" و "رقمك المكون من عشرة أرقام"

  1. هذا يعمل تماما على جميع الأجهزة .

  2. لا يذهب مباشرة إلى متجر التطبيقات ، ولا توجد عمليات إعادة توجيه.

  3. هو موافق لجميع المتاجر الوطنية .

  4. يجب عليك الانتقال إلى استخدام loadProductWithParameters ، ولكن إذا كان الغرض من هذا الرابط هو تحديث التطبيق الذي تكون داخله بالفعل ، فمن الأفضل استخدام هذا الأسلوب "القديم".




يمكنني التأكيد على أنه في حالة إنشاء تطبيق في 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];

يعمل علاج




هذا يعمل وربط مباشرة في ios5

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



Related