App Store 在 iOS 11 之前,App 排走榜不断是衡量开发者 App 活跃度的指标,但在 iOS 11 后苹果弱化了榜单功能,改为了二级入口,导致查询榜单可贵,编者经历深入调研最后实现了一个查看 App 榜单、搜索、讯歇、发布功效等昌盛功能的开源 App。
一、媒介App Store 不断以来都是 iPhone 生态的最首要一环,在初代 iPhone 商店,由于 App 比较少,那时就有 Top 25 榜单:
然后在后续的 App Store 迭代中,排走榜(Top Charts)不断是一个首要的入口,新用户基本都会从榜单下载 App,因而,榜单的首要性不容歧视。
直到 2017 年,固然占了不到 30% 的手机份额,但 iPhone 的体量已经鲜嫩大,App Store 行使数目已经达到 220 万。App Store 的展示和选举,明晰已足不了每天壮大的新 App,有越来越众的 App 期看得到关注;而另一方面,排走榜刷榜题目不断存在;还有就是 App Store 的设计已经已足不了需求!比如更新(Updates) 标签功能单一,就是负责显露需求更新的 App 列外。
因而,从 iOS 11 开始,苹果将 AppStore 重新设计,加补了 Today 和 Games 玩耍标签入口,而排走榜列外放到了 Apps 标签的二级入口中。苹果深化了自身的编辑团队选举的App,在玩耍和行使标签分类的前哨也加入了大区域的编辑选举 App,此刻已经看不到榜单了。
而如今 iOS 15 中的 App Store 加补了更众的功能,比如产品页优化、自定产品页、App 内行动(In-App Events)等,主意很清晰就是让开发者加补活跃内容,升迁 App 日活和利润。
而排走榜功能,其实已经不但单是一个榜单的作用,反复这些年的沉淀,榜单基本已经舒服。比如内行看到的 App,常年不变,而冲到榜单的 App,会获得更众的下载量。对于开发者来说,榜单不妨用来展望行使利润、运用量和下载量的一个首要指标。对于用户来说,发现一些兴趣或者炎门的 App,依然是片面老用户的民风。
因而,编者期看经历实现一个 App Store 排走榜,方便不时查看,同时查看讯歇,搜索或行使发布状态订阅等功能,解决了鲜嫩众的痛点题目。
二、成绩展示开首,吾们先来介绍一下,如今 iAppStore 实现了那些功能。
iAppStroe[1] 是一款运用 SwiftUI 打造的苹果商店工具类 App。
挑供苹果实时榜单查询,包含 iOS 和 iPad 的炎门免费榜、炎门付费榜、畅销榜,还有新上架榜、新上架免费榜、新上架付费榜等。
挑供查询 app 细密页面内容、搜索 app、订阅 app 状态等功能。
声援苹果一共国家和地区的商店,无需切换 Apple Id,即可查看!
2.1 排走榜开首,App Store 的榜单有许众,包含 iOS 和 iPad 的炎门免费榜、炎门付费榜、畅销榜,还有新上架榜、新上架免费榜、新上架付费榜等,吾们都实现了这些榜单。另外,吾们将 App Store 榜单的 UI 还原,同时,也加补了更众的讯歇展示,比如 App 所属分类等。
最首要的是,吾们把一共国家和地区的商店,都集成在一个面板中,经历下拉列外选择,实现快速切换榜单。
2.2 App 细密页App 细密页面,把开发者最关心的参数展如今最前哨。另外,复制包含或者 App ID 是一个高频的需求,App 描述和更新方案也高仿了 App Store 的成绩。预览区包含 iPhone 和 iPad 图片。点击不妨显露大图,并且不妨下载和分享大图。
搜索区,不妨输入关键字暧昧搜索,或者 App ID 精准搜索。另外,在右上角切换国家和地区,显露分歧地区的 App 搜索。
这个状态订阅是什么意思?就是不妨监听 App 在商店的状态,举例来说,App 发布了新版本,那么或许要众久才能在商店上显露呢?因而,吾们不妨经历苹果的接口,来守时的查询 App 的状态,从而明晰 App 什么时候功效。还有新 App 刚刚发布时、或者 App 需求下架了,什么时候才从商店湮灭等。
为了方便开发者运用,App 列外长依时,会弹出操作列外,不妨已经复制 App 的讯歇或者快速掀开 App Store 产品页,尽可能的敏捷获取内容!另外,还声援黑黑模式,依然精美绝伦!切换图标不妨选择自身显露的图标等。
内行想要什么功能,不妨在评论区留言啊~
三、调研办事接下来,吾们说一下要实现以上功能,需求的 API 怎么调研出来的!经历大量的网页检索,最后测试后清算成有价值的列外:
3.1 榜单接口查询排走榜的 API 示例
以上内容在苹果公开的文档,都别国查询到 API 文档。但为苹果网站到在一个页面: Apple Services Performance Partners[6],其中一项服务叫:Enterprise Partner Feed Relational[7](企业讯歇流协和朋侪?),如今这个协和相似很难申请到。因而,关联的文档链接都无法访问到,比如 affiliate.itunes.apple.com[8]。
那么以上链接中几个参数类型,由于别国文档,因而调研梳理如下:
榜单类型
更众分类,参考苹果网站的 HTML 标签:App Store[9]
国家或地区标识
更众分类标识,参考苹果网站的 HTML 标签:RSS Builder[10]
接口证明原本接口挑供 200 条数据查询,但 20221 年 9 月 2 日,苹果接口调整后,大幅裁减 App Store 行使排走数据分享,从 1500 名降至 200 名。如今 AppStore 总榜、行使、玩耍榜、分类榜只能查看前 200 个 App 的数据。
3.2 搜索接口App 搜索接口比如灵活,并且有官方文档:
iTunes Store API[11] iTunes Search API: Constructing Searches[12]接口示例:
https://itunes.apple.com/search?term=斗罗大陆&country=cn&limit=200&entity=software
term 字段就是关键词,country 字段是国家或地区的标签,跟上面的榜单接口是统一个。entity=software 固定为搜索柔件就益。细密的运用,不妨参考官方文档,这儿就不伸开了。
3.3 App 细密讯歇查询某个 App 不妨运用 lookup 接口,详明不妨查看官网文档:Lookup Examples[13]。
接口示例:
https://itunes.apple.com/cn/lookup?id=1558453472
3.4 App 评论内容查询某个 App 的用户评论内容,别国在苹果的文档中找到,但是顺从以上的调研,接口运用题目不大。
接口示例:
https://itunes.apple.com/cn/rss/customerreviews/id=989673964/sortBy=mostRecent/json
地区、App Id、sortBy 字段,就不妨搜索。伪设需求分页或者获取更众,不妨参考文末的链接。
四、开发思路有了以上的 API 接口,就能实现吾们的 App,云云运用 SwiftUI 来构建,现已开源:
iAppStore - GitHub[14]细密的实践过程就不在云云讲解了,由于 App 是工具类行使,交互的内容不众,因而并不是很复杂。天然,运用 SwiftUI 构建 UI 过程反常的快速,但是伪设要调整 UI 细节,确定需求花许众心绪。比如,SwiftUI 还不声援 WebView,因而用 SFSafariViewController 桥接的 View 在 SwiftUI 组件中显露会反常。
How do I use SFSafariViewController with SwiftUI? - Stack Overflow[15]另外,就是苹果 API 的坑,接口返回的字段 im:id、im:bundleId,包含冒号,让人思疑人生!末尾,经历自定义键值名,解决知道析映射的题目。细密,不妨参考源代码中 AppRank.swift[16] 类。
struct IDAttributes: Codable { let imBundleID, imID: String // 自定义键值名 enum CodingKeys: String, CodingKey { case imID = "im:id" case imBundleID = "im:bundleId" } }
综上,伪设是幼吾私家开发的 App,不妨开始运用 SwiftUI 来开发,毕竟原生的体验和原生的组件,用户首来也很欢欣。另外,不考虑声援矮版本编制,运用 SF Symbols[17] 挑供的图标,也鲜嫩的友益!
五、总结iAppStore 从构思到实现,花了半个月的时间,期间调研接口和调试接口花了许众时间,网上依然看到许众人问这些接口,置信许众开发者都不明晰有这些接口,因而本文也算是一个应案总结,期看这个题目从此湮灭哈~ 末尾,iAppStore 只是从编者需求来实现的一个产品,因而必然存在许众的题目,但同时它是一个开源项目,因而,伪设内行兴趣味,一首来参与,加补更众兴趣或者黑科技的体验吧!接待内行有任何思维或者提出,不妨在评论区给吾们逆馈。也不妨到 iAppStore - GitHub[18] 给吾们 Star 鼓励!感谢内行~
参考质料[1] iAppStroe:
https://github.com/37iOS/iAppStore-SwiftUI
[2] RSS Builder: https://rss.applemarketingtools.com
[3] RSS Information:
https://www.apple.com/rss/
[4] Stack Overflow:
https://stackoverflow.com/questions/29997991/how-to-get-top-400-lists-from-itunes
[5] 链接:
https://www.kalman03.com/2015/05/04/tech/appstore_affiliates_resource/
[6] Apple Services Performance Partners:
https://affiliate.itunes.apple.com/resources/
[7] Enterprise Partner Feed Relational:
https://affiliate.itunes.apple.com/resources/documentation/itunes-enterprise-partner-feed/
[8] affiliate.itunes.apple.com:
https://affiliate.itunes.apple.com/resources/documentation/itunes-store-web-service-search-api.html
[9] App Store:
https://apps.apple.com/cn/genre/ios/id36
[10] RSS Builder:
https://rss.applemarketingtools.com/
[11] iTunes Store API:
https://affiliate.itunes.apple.com/resources/documentation/itunes-store-web-service-search-api/
[12] iTunes Search API:
Constructing Searches: https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/iTuneSearchAPI/Searching.html#//apple_ref/doc/uid/TP40017632-CH5-SW1
[13] Lookup Examples:
https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/iTuneSearchAPI/LookupExamples.html#//apple_ref/doc/uid/TP40017632-CH7-SW1
[14] iAppStore - GitHub:
https://github.com/37iOS/iAppStore-SwiftUI
[15] How do I use SFSafariViewController with SwiftUI? - Stack Overflow:
https://stackoverflow.com/questions/56518029/how-do-i-use-sfsafariviewcontroller-with-swiftui
[16] AppRank.swift:
https://github.com/37iOS/iAppStore-SwiftUI/blob/main/iAppStore/Models/AppRank.swift
[17] SF Symbols:
https://developer.apple.com/sf-symbols/
[18] iAppStore - GitHub:
https://github.com/37iOS/iAppStore-SwiftUI