作者:iHTCboy
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 是一款使用 SwiftUI 打造的苹果商店工具类 App。
首先,App Store 的榜单有很多,包含 iOS 和 iPad 的热门免费榜、热门付费榜、畅销榜,还有新上架榜、新上架免费榜、新上架付费榜等,我们都实现了这些榜单。另外,我们将 App Store 榜单的 UI 还原,同时,也增加了更多的信息展示,比如 App 所属分类等。
最重要的是,我们把所有国家和地区的商店,都集成在一个面板中,通过下拉列表选择,实现快速切换榜单。
App 详细页面,把开发者最关心的参数显示在最前面。另外,复制包含或者 App ID 是一个高频的需求,App 描述和更新方案也高仿了 App Store 的效果。预览区包含 iPhone 和 iPad 图片。点击可以显示大图,并且可以下载和分享大图。
搜索区,可以输入关键字
模糊搜索,或者 App ID
精准搜索。另外,在右上角切换国家和地区,显示不同地区的 App 搜索。
这个状态订阅是什么意思?就是可以监听 App 在商店的状态,举例来说,App 发布了新版本,那么大概要多久才能在商店上显示呢?所以,我们可以通过苹果的接口,来定时的查询 App 的状态,从而知道 App 什么时候生效。还有新 App 刚刚发布时、或者 App 需要下架了,什么时候才从商店消失等。
为了方便开发者使用,App 列表长按时,会弹出操作列表,可以已经复制 App 的信息或者快速打开 App Store 产品页,尽可能的快捷获取内容!另外,还支持暗黑模式,依然精美绝伦!切换图标可以选择自己显示的图标等。
大家想要什么功能,可以在评论区留言啊~
接下来,我们说一下要实现以上功能,需要的 API 怎么调研出来的!通过大量的网页检索,最终测试后整理成有价值的列表:
查询排行榜的 API 示例
链接示例 | 链接说明 | 参考链接 |
---|---|---|
| 苹果官方提供的接口,除了 App 榜单,还支持苹果自家的 Music、Books、Podcasts 产品的榜单,目前提供前 200 条数据。 | |
| Apple RSS Feeds,苹果旧的 RSS接口,目前提供前 100 条数据。 | |
| 苹果榜单查询接口,目前提供前 100 条数据。 | |
| 苹果榜单查询接口,目前提供前 100 条数据。把地区语言放到单独成一个字段。 |
以上内容在苹果公开的文档,都没有查询到 API 文档。但为苹果网站到在一个页面:
Apple Services Performance Partners,其中一项服务叫:Enterprise Partner Feed Relational(企业信息流合作伙伴?),目前这个合作好像很难申请到。所以,相关的文档链接都无法访问到,比如 https://affiliate.itunes.apple.com/resources/documentation/itunes-store-web-service-search-api.html。
那么以上链接中几个参数类型,因为没有文档,所以调研梳理如下:
榜单类型
字段 | 英文说明 | 解析 |
---|---|---|
topFreeApplications | Top Free Applications | 热门免费应用 |
topPaidApplications | Top Paid Applications | 热门付费应用 |
topGrossingApplications | Top Grossing Applications | 畅销榜(收入最高) |
newApplications | New Applications | 新应用 |
newFreeApplications | New Free Applications | 新的免费应用 |
newPaidApplications | New Paid Applications | 新的付费应用 |
topFreeiPadApplications | Top Free iPad Applications | 热门免费 iPad 应用 |
topPaidiPadApplications | Top Paid iPad Applications | 热门付费 iPad 应用 |
topGrossingiPadApplications | Top Grossing iPad Applications | 最畅销的 iPad 应用 |
应用分类
分类 ID | 英文说明 | 解析 |
---|---|---|
6000 | Business | 商务 |
6001 | Weather | 天气 |
6002 | Utilities | 工具 |
6003 | Travel | 旅游 |
6004 | Sports | 体育 |
6005 | Social Networking | 社交 |
6006 | Reference | 参考资料 |
6007 | Productivity | 效率 |
6008 | Photo & Video | 摄影与录像 |
6009 | News | 新闻,中国区无数据⚠️ |
6010 | Navigation | 导航 |
6011 | Music | 音乐 |
6012 | Lifestyle | 生活 |
6013 | Health & Fitness | 健康健美 |
6014 | Games | 游戏 |
6015 | Finance | 财务 |
6016 | Entertainment | 娱乐 |
6017 | Education | 教育 |
6018 | Books | 图书 |
6019 | Places & Objects | 地点与物品,字段已无效⚠️ |
6020 | Medical | 医疗 |
6021 | Newsstand | 报刊杂志 |
6022 | Catalogs | 商品指南,字段已无效⚠️ |
6023 | Food & Drink | 美食佳饮 |
6024 | Shopping | 购物 |
6025 | Stickers | iMessage 贴纸,字段已无效⚠️ |
6026 | Developer_Tools | 软件开发工具 |
6027 | Graphics_And_Design | 图形和设计 |
更多分类,参考苹果网站的 HTML 标签:App Store
国家或地区标识
ID | 英文说明 | 解析 |
---|---|---|
cn | China mainland | 中国 |
hk | Hong Kong | 中国香港 |
tw | Taiwan | 中国台湾 |
mo | Macao | 中国澳门 |
us | United States | 美国 |
jp | Japan | 日本 |
kr | Korea, Republic of | 韩国 |
更多分类标识,参考苹果网站的 HTML 标签:RSS Builder
接口说明
原本接口提供 200 条数据查询,但 20221 年 9 月 2 日,苹果接口调整后,大幅削减 App Store 应用排行数据分享,从 1500 名降至 200 名。目前 AppStore 总榜、应用、游戏榜、分类榜只能查看前 200 个 App 的数据。
App 搜索接口比如简单,并且有官方文档:
接口示例:
https://itunes.apple.com/search?term=斗罗大陆&country=cn&limit=200&entity=software
term
字段就是关键词,country
字段是国家或地区的标签,跟上面的榜单接口是同一个。entity=software
固定为搜索软件就好。详细的使用,可以参考官方文档,这里就不展开了。
查询某个 App 可以使用 lookup
接口,具体可以查看官网文档:Lookup Examples。
接口示例:
https://itunes.apple.com/cn/lookup?id=1558453472
查询某个 App 的用户评论内容,没有在苹果的文档中找到,但是根据以上的调研,接口使用问题不大。
接口示例:
https://itunes.apple.com/cn/rss/customerreviews/id=989673964/sortBy=mostRecent/json
地区、App Id、sortBy
字段,就可以搜索。如果需要分页或者获取更多,可以参考文末的链接。
有了以上的 API 接口,就能实现我们的 App,这样使用 SwiftUI 来构建,现已开源:
详细的实践过程就不在这样讲解了,因为 App 是工具类应用,交互的内容不多,所以并不是很复杂。当然,使用 SwiftUI 构建 UI 过程异常的快速,但是如果要调整 UI 细节,确定需要花很多心思。比如,SwiftUI 还不支持 WebView,所以用 SFSafariViewController 桥接的 View 在 SwiftUI 组件中显示会异常。
另外,就是苹果 API 的坑,接口返回的字段 im:id
、im:bundleId
,包含冒号,让人怀疑人生!最后,通过自定义键值名,解决了解析映射的问题。详细,可以参考源代码中 AppRank.swift 类。
struct IDAttributes: Codable {
let imBundleID, imID: String
// 自定义键值名
enum CodingKeys: String, CodingKey {
case imID = "im:id"
case imBundleID = "im:bundleId"
}
}
综上,如果是个人开发的 App,可以开始使用 SwiftUI 来开发,毕竟原生的体验和原生的组件,用户起来也很快乐。另外,不考虑支持低版本系统,使用 SF Symbols 提供的图标,也非常的友好!
iAppStore 从构思到实现,花了半个月的时间,期间调研接口和调试接口花了很多时间,网上依然看到很多人问这些接口,相信很多开发者都不知道有这些接口,所以本文也算是一个答案总结,希望这个问题从此消失哈~
最后,iAppStore 只是从编者需求来实现的一个产品,所以一定存在很多的问题,但同时它是一个开源项目,所以,如果大家有兴趣,一起来参与,增加更多有趣或者黑科技的体验吧!
欢迎大家有任何想法或者建议,可以在评论区给我们反馈。也可以到 iAppStore - GitHub 给我们 Star 鼓励!感谢大家~
欢迎大家在评论区一起交流~
欢迎关注我们,了解更多 iOS 和 Apple 的动态~
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。