web-dev-qa-db-ja.com

ITunesがURLを確認し、iOS 7(ユーザーにアプリの評価を依頼)AppStoreに空白ページが表示される

ユーザーがアプリを評価し、評価ページで直接App Storeを開くようにユーザーに求める手法がiOS 7でまだ機能しているかどうかは誰にもわかりますか?

私は自分のアプリからこのURLを開いていました:

itms-apps://iTunes.Apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=353372460&onlyLatestVersion=true&pageNumber=0&sortOrdering=1&type=Purple+Software

しかし、もう機能していないようです(AppStoreには空白のページが表示されます)。私はまた、このURLを運なしで試しました:

http://iTunes.Apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?pageNumber=0&sortOrdering=1&type=Purple+Software&mt=8&id=353372460
158
Samuel

IOS7以降、URLが変更されており、レビューページにリダイレクトできませんが、アプリにのみリダイレクトできます

itms-apps://iTunes.Apple.com/app/idAPP_ID

APP_IDをアプリケーションIDに置き換える必要がある場合。質問のアプリIDに基づくと、次のようになります

itms-apps://iTunes.Apple.com/app/id353372460

数字の前にあるidに注意してください...文字列は353372460ではなくid353372460です

IOS7より前のバージョンでは、「古い」URLを使用する必要があります。その場合のみ、レビューページに直接アクセスできます。また、これらの呼び出しはデバイス上でのみ機能することに注意してください。シミュレータにはApp Storeアプリがインストールされていないため、シミュレータで実行しても何も起こりません。


実装については、たとえばAppiraterをご覧ください。 https://github.com/arashpayan/appirater

Phonegapの詳細については役に立たない(使用したことはない)。ただし、基本的には、ユーザーが実行しているiOSバージョンを確認してから、古いURLを使用するか、新しいiOS7 URLを使用します。

198
Frank

次のURLはiOS 7.1で完全に機能します。

http://iTunes.Apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=xxxxxxxx&pageNumber=0&sortOrdering=2&type=Purple+Software&mt=8

ここで、xxxxxxxxはアプリIDです。

UPDATE。 iOS 9.3.4およびiOS 10で動作しますGM(by Jeet)

165
mkll

これは私の側で機能します(Xcode 5-iOS 7-デバイス!):

itms-apps://iTunes.Apple.com/app/idYOUR_APP_ID

IOS 7より前のバージョンでは、古いバージョンを使用します。

itms-apps://iTunes.Apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=YOUR_APP_ID
47
Idan

コードの1行の単純な代替: **以下のシミュレーターのコメントも参照してください**

http://iTunes.Apple.com/app/idAPP_ID

編集:iOS 7.1ではApp Storeの[レビュー]タブへの直接リンクが可能になったため、コードを追加して直接アクセスする価値があります。他の回答は他の回答をご覧ください。

ここで使用しているhttp:の代わりにitms-apps:iOSに残りの作業をさせます

IOS 6.1および7デバイス(iPad/iPhone/iPod touch 4)で同じ結果をテストできます

具体的には、このショートカットは、iOS 6の場合、ユーザーをDetailsタブではなく、Reviewsタブに移動します。

Purple+Softwareリンクにより、ユーザーはiOS 6の[レビュー]タブに移動します。これは、OSの確認方法を知っている場合に明らかに推奨されます。

重要な注意:これにより、iOS 5.1、6.1、および7のシミュレーターでエラーが発生します。
ページを開くことができませんSafariはアドレスが無効であるため、ページを開くことができません(シミュレーターの外部、任意のブラウザーで有効なURLであることがわかっています)

明確にするだけ:iOS 7の場合:http://は、itms-apps:と同じエクスペリエンスを、顕著な遅延なしで提供します。

*上記のシミュレーターの動作に注意してください。これは、シミュレータを介してカメラにアクセスしようとすることとはまったく異なりません。シミュレータは、カメラをテストする場所ではありません。 *

18

IOS7では、アプリから直接レビューページを開くことができます。次のURLを使用してください...

itms-apps://iTunes.Apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=YOUR_APP_ID

これは間違いなく機能します。

17
Murali

これがサポートされているiOSのバージョンは明確ではありませんが、iOS 10.3の一部として、URLに追加できる 新しいクエリパラメーター があります:action=write-review。これをiOS 10.2および9.3.5でテストしましたが、動作します。ただし、iOS 7.1.2では機能しないため、iOS 8.0と9.3.5の間にサポートが追加されました。さらなる調査が必要です!

例: https://iTunes.Apple.com/app/id929726748?action=write-review&mt=8

これは、単にレビュータブを表示するのではなく、「レビューを書く」ダイアログを開きます

16
Joseph Duffy

IOS9でレビューリンクが再び壊れました。いくつかの実験を行った結果、AppleがiOS7以前の状態に戻っていることがわかりました。だからあなたはする必要があります:

itms-apps://iTunes.Apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=247423477&onlyLatestVersion=true&pageNumber=0&sortOrdering=1&type=Purple+Software

247423477は9桁のアプリIDです(主な違いは、アプリIDの後に&onlyLatestVersion=true&pageNumber=0&sortOrdering=1&type=Purple+Softwareを追加する必要があることです)。

9
Ser Pounce
+ (NSString *)getReviewUrlByAppId:(int)appId
{ 
    NSString *templateReviewURL = @"itms-apps://ax.iTunes.Apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=APP_ID";
    NSString *templateReviewURLiOS7 = @"itms-apps://iTunes.Apple.com/app/idAPP_ID";
    NSString *templateReviewURLiOS8 = @"itms-apps://iTunes.Apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=APP_ID&onlyLatestVersion=true&pageNumber=0&sortOrdering=1&type=Purple+Software";

    //ios7 before
    NSString *reviewURL = [templateReviewURL stringByReplacingOccurrencesOfString:@"APP_ID" withString:[NSString stringWithFormat:@"%d", appId]];

    // iOS 7 needs a different templateReviewURL @see https://github.com/arashpayan/appirater/issues/131
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0 && [[[UIDevice currentDevice] systemVersion] floatValue] < 7.1) 
    {
        reviewURL = [templateReviewURLiOS7 stringByReplacingOccurrencesOfString:@"APP_ID" withString:[NSString stringWithFormat:@"%d", appId]];
    }
    // iOS 8 needs a different templateReviewURL also @see https://github.com/arashpayan/appirater/issues/182
    else if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
    {
        reviewURL = [templateReviewURLiOS8 stringByReplacingOccurrencesOfString:@"APP_ID" withString:[NSString stringWithFormat:@"%d", appId]];
    }

    return reviewURL;
}
9
Will

上記の回答はすべて廃止されました(iOS 7、ただし動作​​する可能性があります)。したがって、Appleがアプリへのリンクを提供することを推奨する新しい方法を提供します。アプリのリンクはiTunesからのものです(リンクのコピーを使用)。これはコードでの使用をお勧めします。

Swift 3.

let path = URL(string: "https://iTunes.Apple.com/us/app/calcfast/id876781417?mt=8")
UIApplication.shared.open(path!)

あるいは、オプションを正しく処理し、リンクに到達できない可能性を処理します。

if let path = URL(string: "https://iTunes.Apple.com/us/app/calcfast/id876781417?mt=8") {
    UIApplication.shared.open(path) {
        (didOpen:Bool) in
        if !didOpen {
            print("Error opening:\(path.absoluteString)")
        }
    }
}

Objective-C

#define APP_URL_STRING  @"https://iTunes.Apple.com/us/app/calcfast/id876781417?mt=8"

次に、コードでAPP_URL_STRINGを呼び出すことができます。

[[UIApplication sharedApplication] openURL:[NSURL URLWithString: APP_URL_STRING] options:@{} completionHandler:nil];

リダイレクトリンクを処理する以前の方法は推奨されておらず、サポートされていないため、これは現在Appleによって推奨されている方法であることに注意してください。

複数のアプリがある場合は、すべてのアプリのリンク:

#define MYCOMPANY_URL_PATH @"http://appstore.com/mycompany"
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: MYCOMPANY_URL_PATH] options:@{} completionHandler:nil];

上記のアプリリンクは、ユーザーに直接表示されないコードまたはリンクで使用することをお勧めします。ユーザーが表示および記憶できるリンクを提供する場合は、次を使用します。http://appstore.com/calcfast

5

このURLを使用することは、私にとって完璧なソリューションでした。ユーザーをWrite a Review sectionに直接連れて行きます。 @Joseph Duffyのクレジット。

サンプルコードについては、これを試してください。

Swift 3、Xcode 8.2.1:

 let openAppStoreForRating = "itms-apps://iTunes.Apple.com/gb/app/id1136613532?action=write-review&mt=8"
 if UIApplication.shared.canOpenURL(URL(string: openAppStoreForRating)!) {
      UIApplication.shared.openURL(URL(string: openAppStoreForRating)!)
 } else {
      showAlert(title: "Cannot open AppStore",message: "Please select our app from the AppStore and write a review for us. Thanks!!")
 }

ここで、showAlertはUIAlertControllerのカスタム関数です。

4

製品IDを自動的に取得するを取得してApp Storeのレビューと製品ページのリンクを生成するためにこれがあります。

- (void) getAppStoreLinks {
productID = [[NSUserDefaults standardUserDefaults] objectForKey:@"productID"]; //NSNumber instance variable
appStoreReviewLink = [[NSUserDefaults standardUserDefaults] objectForKey:@"appStoreReviewLink"]; //NSString instance variable
appStoreLink = [[NSUserDefaults standardUserDefaults] objectForKey:@"appStoreLink"]; //NSString instance variable

if (!productID || !appStoreReviewLink || !appStoreLink) {
    NSString *iTunesServiceURL = [NSString stringWithFormat:@"https://iTunes.Apple.com/lookup?bundleId=%@", [NSBundle mainBundle].bundleIdentifier];
    NSURLSession *sharedSes = [NSURLSession sharedSession];
    [[sharedSes dataTaskWithURL:[NSURL URLWithString:iTunesServiceURL]
              completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

                  NSInteger statusCode = ((NSHTTPURLResponse *)response).statusCode;

                  if (data && statusCode == 200) {

                      id json = [[NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingOptions)0 error:nil][@"results"] lastObject];

                      //productID should be NSNumber but integerValue also work with NSString
                      productID = json[@"trackId"];

                      if (productID) {
                          appStoreReviewLink = [NSString stringWithFormat:@"itms-apps://iTunes.Apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=%d&pageNumber=0&sortOrdering=2&type=Purple+Software&mt=8",productID.integerValue];
                          appStoreLink = [NSString stringWithFormat:@"itms-apps://iTunes.Apple.com/app/id%d",productID.integerValue];

                          [[NSUserDefaults standardUserDefaults] setObject:productID forKey:@"productID"];
                          [[NSUserDefaults standardUserDefaults] setObject:appStoreReviewLink forKey:@"appStoreReviewLink"];
                          [[NSUserDefaults standardUserDefaults] setObject:appStoreLink forKey:@"appStoreLink"];

                      }
                  } else if (statusCode >= 400) {
                      NSLog(@"Error:%@",error.description);
                  }
              }
      ] resume];
}
}

アプリのレビューページを開く

- (IBAction) rateButton: (id)sender {
   NSString *appStoreReviewLink = appStoreReviewLink;
   [[UIApplication sharedApplication] openURL:[NSURL URLWithString:appStoreReviewLink]];
}

アプリのApp Storeページを開く

 - (IBAction) openAppPageButton: (id)sender {
   NSString *appStoreLink = appStoreLink;
   [[UIApplication sharedApplication] openURL:[NSURL URLWithString: appStoreLink]];
 }
3
Tibidabo

このバグはiOS7.1で修正されると言われています。 こちらをご覧ください コロナフォーラム、および ここでiPhoneDevSDKをご覧ください .

2
Joselito