iOS应用更新通知

pprl5pva  于 2023-04-22  发布在  iOS
关注(0)|答案(3)|浏览(130)

iOS应用程序更新机制是如何工作的?如何告诉用户Appstore上的应用程序已更新?我是否必须在代码中编写功能来显示更新弹出框,或者由Appstore处理以向用户显示应用程序已更新的通知。苹果是否提供了任何文档?

toiithl6

toiithl61#

可以使用Harpy:当App Store上有新版本的应用时,此模块会触发UIAlertView。
Harpy现在已被废除。Siren是从Harpy移植而来的,因为SirenHarpy是由同一个开发人员维护的。截至2018年12月,Harpy已被弃用,转而支持Siren

lsmepo6l

lsmepo6l2#

  1. Apple提供了一个现有的API,用于从App Store上的应用获取最新的应用信息:http://itunes.apple.com/jp/lookup/?id=app_id
    例如:http://itunes.apple.com/jp/lookup/?id=1005582646
    例如,对于美国应用程序:http://itunes.apple.com/lookup/?id=myAppIDNumberFromTheAppStore
    请注意,这是独立于App Store Connect API的。如果您使用它,则需要在发出请求之前生成令牌。请首先查看API的文档,否则您将获得空结果的响应。
https://developer.apple.com/documentation/appstoreconnectapi

https://developer.apple.com/documentation/appstoreconnectapi/generating_tokens_for_api_requests

iTunes API的响应有一个"version"字段,该字段位于"results"字段内。它具有App Store上最新版本的版本号。
AppDelegate->didFinishLaunchingWithOptions中,可以调用上述API。
1.在用户设备上获取当前版本的方法:
目标C

NSString *currentAppVersion = [[[NSBundle mainBundle]
    infoDictionary] objectForKey:@"CFBundleShortVersionString"];

Swift(4.2)

var currentAppVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String

现在,您可以比较版本号1和2,以便在App Store上有更新的应用时向用户显示警报或通知。

juud5qan

juud5qan3#

你可以在这里找到解决方案。在你的home viewController中编写这个函数。

func viewDidLoad()
{
    DispatchQueue.global().async {
        do {
            let update = try self.isUpdateAvailable()
            DispatchQueue.main.async {
                if update{
                    self.popupUpdateDialogue();
                    //you can show a popup to notify the user
                }
            }
        } catch {
            print(error)
        }
    }
}

func isUpdateAvailable() throws -> Bool {
    guard let info = Bundle.main.infoDictionary,
          let currentVersion = info["CFBundleShortVersionString"] as? String,
          let identifier = info["CFBundleIdentifier"] as? String,
          let url = URL(string: "http://itunes.apple.com/lookup?bundleId=\(identifier)") else {
        throw VersionError.invalidBundleInfo
    }
    let data = try Data(contentsOf: url)
    guard let json = try JSONSerialization.jsonObject(with: data, options: [.allowFragments]) as? [String: Any] else {
        throw VersionError.invalidResponse
    }
    if let result = (json["results"] as? [Any])?.first as? [String: Any], let version = result["version"] as? String {
        appStoreVersion = version
        return version != currentVersion
    }
    throw VersionError.invalidResponse
}

相关问题