web-dev-qa-db-ja.com

プログラムでiOSアプリケーションからアプリIDを取得することは可能ですか?

IOSアプリケーションの実行からアプリストアIDを取得する方法はありますか? (ユーザーに評価してもらい、アプリストアへのリンクを提供するため。)

23
breakp01nt

はい、そうです。 appstore app id(Apple IDと呼ばれます)をオフラインで取得することはできませんが、リクエストすることはできますiTunes Search Apiを使用して、次のリンクのコンテキストをダウンロードします。

http://iTunes.Apple.com/lookup?bundleId=YOUR_APP_BUNDLE_ID

"trackId":YOUR_APP_ID Key-Valueを含むJSON応答が返されます。ブラウザでお試しください!

私の答えは別の答えに基づいています:https://stackoverflow.com/a/11626157/30504

14
kelin

使用する

NSString* appID = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"];

@zaheerのコメントで回答を更新する

NSBundle.mainBundle().infoDictionary?["CFBundleIdentifier"] as? NSString
12
Gaurav Vaish

Apple iTunes Link Maker を使用して、アプリ(またはそのためのアプリ)を検索し、App StoreのURLを取得できます。そこから、あなたはあなたのアプリケーションのために同じままであるあなたのアプリケーションURLを手に入れ、あなたのアプリケーションにそれを置くことができます。 http://の代わりにitms://を使用すると、App Storeアプリで直接開きます。

たとえば、TwitterアプリのURLを使用したい場合、リンクメーカーから次のURLが通知されます。

http://iTunes.Apple.com/us/app/Twitter/id333903271?mt=8&uo=4

Itmsトリックを実行します。

itms://iTunes.Apple.com/us/app/Twitter/id333903271?mt=8&uo=4

そして、Safari経由でApp Storeにリダイレクトするよりも、App Storeで直接開きます。

3
Suhail Patel

以下の関数を使用できます。注:このAPIはAppleでは文書化されていません。

//MARK: To get app iTunes id and app name 

func getAppDetailsFromServer() {

    var bundleIdentifier: String {
        return Bundle.main.infoDictionary?["CFBundleIdentifier"] as! String
    }
    let baseURL: String = "http://iTunes.Apple.com/lookup?bundleId=\(bundleIdentifier)"
    let encodedURL = baseURL.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)

    // Creating URL Object
    let url = URL(string:encodedURL!)

    // Creating a Mutable Request
    var request = URLRequest.init(url: url!)

    //Setting HTTP values
    request.httpMethod = "GET"
    request.timeoutInterval = 120

    let configuration = URLSessionConfiguration.default

    let session = URLSession(configuration: configuration)

    let downloadTask = session.dataTask(with: request, completionHandler: { (data, response, error) -> Void in

        //API Call over,getting Main queue
        DispatchQueue.main.async(execute: { () -> Void in

            if error == nil
            {

                if data != nil {

                    do {

                        let resultDictionary:NSDictionary! = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! NSDictionary

                        if resultDictionary != nil && resultDictionary.count > 0 {
                            if (resultDictionary.object(forKey: "results") as! NSArray).count != 0 {
                                let AppName = "\(((resultDictionary.object(forKey: "results") as! NSArray).object(at: 0) as! NSDictionary).object(forKey: "trackCensoredName")!)"
                                let AppId = "\(((resultDictionary.object(forKey: "results") as! NSArray).object(at: 0) as! NSDictionary).object(forKey: "trackId")!)"
                                print("AppName : \(AppName) \nAppId: \(AppId)")
                            }
                        } else {
                            print("Unable to proceed your request,Please try again")
                        }
                    } catch {
                        print("Unable to proceed your request,Please try again")

                    }
                } else {
                    print("Unable to proceed your request,Please try again")
                }
            } else {
                print("Unable to proceed your request,Please try again")
            }
        })

    })
    downloadTask.resume()
}
3
Vimalkumar N.M.

AppIdの場合のみ、コンポーネントごとにバンドルID文字列を区切り、最後のコンポーネントを取得するだけです。

NSString appId = [[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"] componentsSeparatedByString:@"."] lastObject];

または、完全な文字列を適宜処理しますが、全体のバンドル識別子が含まれます。

0
A Salcedo