iTunes API,通过包ID查找?

28
有没有办法使用iTunes API根据唯一的应用程序bundleId查找信息?我有一个iPhone应用程序,想要使用API检查用户是否拥有最新版本。使用搜索功能很糟糕,因为它是模糊的(可能返回很多结果)。我不想必须在结果集中迭代查找我的bundleId。
我不是在寻找在设备端(非Objective-C)执行此操作的方法。我想在我的服务器上编写服务器端代码,以便在苹果更改API时隐藏它。
5个回答

61

2
尽管您不必将国家代码作为参数进行指定,但我认为该搜索并未搜索所有的国家代码。例如,请参见 http://itunes.apple.com/lookup?bundleId=uk.musicMagpie 和 http://itunes.apple.com/lookup?bundleId=uk.musicMagpie&country=gb 之间的差异。 - ch3rryc0ke
那正是我正在寻找的! - Pedro Góes
很不幸,'bundleId'参数是不区分大小写的,因此在开发者选择为其iOS和Mac应用程序使用相同的包ID但不同大小写的情况下,它无法区分媒体种类软件(即iOS应用程序)和mac-software(Mac应用商店应用程序)。例如,iOS应用程序com.palasoftware.MathBoard和Mac应用程序com.palasoftware.mathboard。此外,添加任何其他参数以指定媒体类型或实体类型对于此问题没有影响。 - malhal
为什么这个URL的方案是http而不是https?这不是安全的URL吗?这是否需要允许任意加载? - Hitesh

9
原来你可以使用“Apple ID”而不是bundle ID,因为每个应用程序也是唯一的。“Apple ID”在http://itunes.apple.com/lookup服务中映射到“trackId”。

7

这项服务发布的时间你有任何了解吗?顺便说一下,谢谢。 - rynop
不客气。我不知道这个功能是什么时候引入的。 - Adam
我想知道为什么这给了我一个错误。这是另一种可选的查询 - https://itunes.apple.com/lookup?id=<app-id> - sarat
昨天左右,我们所有的请求都需要查找国家是否有效。 - Pedro Góes

3

您可以使用库iVersion在应用内部查看用户是否拥有最新版本的应用。

iVersion

动态检测Mac/iPhone App Store应用程序更新的库,可在应用程序内部通知用户新版本发布情况。还可以在升级后第一次启动应用程序时通知用户有关应用程序新功能的信息。

https://github.com/nicklockwood/iVersion


抱歉,我应该说我想找一种服务器端的方法来实现它(而不是Objective C)。我想在我的服务器上编写服务器端代码,以便在苹果更改API时隐藏。我也会更新我的问题。事实证明他确实有一些服务器端代码(https://github.com/nicklockwood/iVersion/blob/master/Web%20Service/iversion.php),但是他遍历了一个结果数组。因此,可能没有一种按包ID查找的方法。 - rynop
你是否正在寻找一种方法来判断苹果何时从5.0升级到5.1? - Scott Bossak
不行。假设我在市场上有10个应用程序。所有应用程序目前都是v 1.0。我为App 1发布了2.0版本,其他应用程序仍然是1.0。我希望能够利用Web服务查找商店中最新版本的App 1,以便通知用户升级。我不是iOS开发人员,结果我可以使用苹果ID(也称为iTunes查找API中的“trackId”)。回答以下问题。 - rynop
iVersion可以直接从设备上访问苹果服务,也可以将其指向自己的Web服务,然后在服务器端进行查找。您可以查看源代码以了解它正在做什么,基本上是向http://itunes.apple.com/lookup服务发出查询,该服务返回JSON数据。 - Nick Lockwood

2

感谢以上所有回答。这是Swift 4.2的代码:

guard let info = Bundle.main.infoDictionary,
            let identifier = info["CFBundleIdentifier"] as? String,
      let url = URL(string: "http://itunes.apple.com/lookup?bundleId=\(identifier)") else { return }
    do {
      let data = try Data(contentsOf: url)
      guard let json = try JSONSerialization.jsonObject(with: data, options: [.allowFragments]) as? [String: Any] else {
        return
      }
      if let result = (json["results"] as? [Any])?.first as? [String: Any],
        let version = result["version"] as? String {
        print("version in app store", version)
      }
    } catch let erro as NSError {
      print(erro.description)
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接