利用 fir.im 接口实现应用的自动检测更新和安装

编者按:本文转载自 fir.im 用户@字母B一路向北,原文链接在此


本文章简述如何通过 fir.im 接口直接在 app 内做到版本更新提示以及版本迭代!为了更佳方便,本次分享为大家分别提供 swift 版和 OC 版本。

一、我们先获得自身app的版本号,代码如下:

//OC
    NSString *localVersion = [[[NSBundle mainBundle]infoDictionary] objectForKey:@"CFBundleVersion"];
    self.LocalVersion = localVersion;
//swift
   let localVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion")

二、获取上传到 fir.im 上 app 的版本号 API 如下:

参考文档:https://fir.im/docs/version_detection

 curl http://api.fir.im/apps/latest/xxx?api_token=xxx #使用 `id` 请求

通过解析 version 获得 fir上 的版本号

self.NewVersion = model.version  

注:

latest/xxx 是 app 的 bundleId;

api_token 需要 在 fir.im 账号下生成。

三、那么我们来通过比较版本的大小作判断

但是版本号一般类似于1.1.1与1.1.2,这样转换解析后是比较麻烦的,给大家提供一个好的建议,降序比较:

//OC
if ([self.NewVersion compare:self.LocalVersion] == NSOrderedDescending) {  
}
//swift
 ifself.NewVersion?.compare(self.LocalVersion!) == ComparisonResult.orderedDescending{
        }

四、获得download_token

curl "http://api.fir.im/apps/:id/download_token?api_token=xxxxx"  

我们可以直接用浏览器打开获得 download_token

五、第二步 安装应用 ( iOS )

在应用中, 直接 openURL 以下地址即可弹出系统安装提示:

itms-services://?action=download-manifest&url=https://download.fir.im/apps/:id/install?download_token=xxxxxx  

不过,url 后面的链接地址需要 URLEncode 进行转义,方法如下:

//OC
NSString * urlString = @"https://download.fir.im/apps/:id/install?download_token=xxxxxx";  
              NSString *URLencodeString = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)urlString, NULL, CFSTR(":/?#[]@!$ &'()*+,;=\"<>%{}|\\^~`"), CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding)));
              NSString *installURL = [NSString stringWithFormat:@"itms-services://?action=download-manifest&url=%@", URLencodeString];
              NSURL *openURL = [NSURL URLWithString:installURL];
              [[UIApplication sharedApplication] openURL:openURL];
//swift
 let originalString = "https://download.fir.im/apps/:id/install?download_token=xxxxxx"
 let customAllowedSet = CharacterSet(charactersIn: ":/?#[]@!$ &'()*+,;=\"<>%{}|\\^~`").inverted
 let escapedString = originalString.addingPercentEncoding(withAllowedCharacters: customAllowedSet)!
 let installURL: String = "itms-services://?action=download-manifest&url=\(String(describing: escapedString))"
 let openURL = URL(string:installURL)
                    UIApplication.shared.openURL(openURL!)

注:这个需要手机自带的Safari才能打开,因为只有手机自带的Safari才会识别itms-services://?action=download-manifest&url=的拼接方式

好了,基本介绍就这么多,我们可以根据自己的需求来部署要展现的alert,如果需要实时展示的话我们可以放在 AppDelegate 中调用

//oc
- (void)applicationWillEnterForeground:(UIApplication *)application {
ZyzAuxiliary * aulia = [[ZyzAuxiliary alloc]init];  
[aulia checkVersion];
}
//swift  
func applicationWillEnterForeground(_ application: UIApplication) {  
      let aulia = ZyzAuxiliary()
        aulia.checkVersion()
    }

在此也特别鸣谢 fir.im 技术人员的大力支持!


以上是「用户说」之@字母B一路向北的分享,希望对你有用。

fir.im

fir.im - Meng

尺度中蕴含本质