IOSアプリケーションの実行からアプリストアIDを取得する方法はありますか? (ユーザーに評価してもらい、アプリストアへのリンクを提供するため。)
はい、そうです。 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
使用する
NSString* appID = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"];
@zaheerのコメントで回答を更新する
NSBundle.mainBundle().infoDictionary?["CFBundleIdentifier"] as? NSString
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で直接開きます。
以下の関数を使用できます。注:この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()
}
AppIdの場合のみ、コンポーネントごとにバンドルID文字列を区切り、最後のコンポーネントを取得するだけです。
NSString appId = [[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"] componentsSeparatedByString:@"."] lastObject];
または、完全な文字列を適宜処理しますが、全体のバンドル識別子が含まれます。