App Store 在 iOS 11 之前,App 排行榜一直是衡量开发者 App 活跃度的指标,但在 iOS 11 后苹果弱化了榜单功能。

 用 SwiftUI 实现一个开源的 App Store(swiftui框架) Store 开源 第1张

App Store 在 iOS 11 之前,App 排行榜一直是衡量开发者 App 活跃度的指标,但在 iOS 11 后苹果弱化了榜单功能,改为了二级入口,导致查询榜单困难,编者通过深入调研最终实现了一个查看 App 榜单、搜索、信息、发布生效等强大功能的开源 App。

一、前言

App Store 一直以来都是 iPhone 生态的最重要一环,在初代 iPhone 商店,因为 App 比较少,当时就有 Top 25 榜单:

 用 SwiftUI 实现一个开源的 App Store(swiftui框架) Store 开源 第2张

然后在后续的 App Store 迭代中,排行榜(Top Charts)一直是一个主要的入口,新用户基本都会从榜单下载 App,所以,榜单的重要性不容忽视。

 用 SwiftUI 实现一个开源的 App Store(swiftui框架) Store 开源 第3张

直到 2017 年,虽然占了不到 30% 的手机份额,但 iPhone 的体量已经非常大,App Store 应用数量已经达到 220 万。App Store 的展示和推荐,显然满足不了每天巨大的新 App,有越来越多的 App 希望得到关注;而另一方面,排行榜刷榜问题一直存在;还有就是 App Store 的设计已经满足不了需求!比如更新(Updates) 标签功能单一,就是负责显示需要更新的 App 列表。

所以,从 iOS 11 开始,苹果将 AppStore 重新设计,增加了 Today 和 Games 游戏标签入口,而排行榜列表放到了 Apps 标签的二级入口中。苹果加强了自己的编辑团队推荐的App,在游戏和应用标签分类的前面也加入了大区域的编辑推荐 App,如今已经看不到榜单了。

 用 SwiftUI 实现一个开源的 App Store(swiftui框架) Store 开源 第4张

而现在 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 所属分类等。

 用 SwiftUI 实现一个开源的 App Store(swiftui框架) Store 开源 第5张

最重要的是,我们把所有国家和地区的商店,都集成在一个面板中,通过下拉列表选择,实现快速切换榜单。

2.2 App 详细页

App 详细页面,把开发者最关心的参数显示在最前面。另外,复制包含或者 App ID 是一个高频的需求,App 描述和更新方案也高仿了 App Store 的效果。预览区包含 iPhone 和 iPad 图片。点击可以显示大图,并且可以下载和分享大图。

 用 SwiftUI 实现一个开源的 App Store(swiftui框架) Store 开源 第6张

2.3 搜索

搜索区,可以输入关键字模糊搜索,或者 App ID 精准搜索。另外,在右上角切换国家和地区,显示不同地区的 App 搜索。

 用 SwiftUI 实现一个开源的 App Store(swiftui框架) Store 开源 第7张

2.4 应用状态订阅

这个状态订阅是什么意思?就是可以监听 App 在商店的状态,举例来说,App 发布了新版本,那么大概要多久才能在商店上显示呢?所以,我们可以通过苹果的接口,来定时的查询 App 的状态,从而知道 App 什么时候生效。还有新 App 刚刚发布时、或者 App 需要下架了,什么时候才从商店消失等。

 用 SwiftUI 实现一个开源的 App Store(swiftui框架) Store 开源 第8张

2.5 其它

为了方便开发者使用,App 列表长按时,会弹出操作列表,可以已经复制 App 的信息或者快速打开 App Store 产品页,尽可能的快捷获取内容!另外,还支持暗黑模式,依然精美绝伦!切换图标可以选择自己显示的图标等。

 用 SwiftUI 实现一个开源的 App Store(swiftui框架) Store 开源 第9张

大家想要什么功能,可以在评论区留言啊~

三、调研工作

接下来,我们说一下要实现以上功能,需要的 API 怎么调研出来的!通过大量的网页检索,最终测试后整理成有价值的列表:

3.1 榜单接口

查询排行榜的 API 示例

 用 SwiftUI 实现一个开源的 App Store(swiftui框架) Store 开源 第10张

以上内容在苹果公开的文档,都没有查询到 API 文档。但为苹果网站到在一个页面: Apple Services Performance Partners[6],其中一项服务叫:Enterprise Partner Feed Relational[7](企业信息流合作伙伴?),目前这个合作好像很难申请到。所以,相关的文档链接都无法访问到,比如 affiliate.itunes.apple.com[8]。

那么以上链接中几个参数类型,因为没有文档,所以调研梳理如下:

榜单类型

 用 SwiftUI 实现一个开源的 App Store(swiftui框架) Store 开源 第11张

应用分类

 用 SwiftUI 实现一个开源的 App Store(swiftui框架) Store 开源 第12张

 用 SwiftUI 实现一个开源的 App Store(swiftui框架) Store 开源 第13张

更多分类,参考苹果网站的 HTML 标签:App Store[9]

国家或地区标识

 用 SwiftUI 实现一个开源的 App Store(swiftui框架) Store 开源 第14张

更多分类标识,参考苹果网站的 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] 类。

  1. structIDAttributes:Codable{
  2. letimBundleID,imID:String
  3. //自定义键值名
  4. enumCodingKeys:String,CodingKey{
  5. caseimID="im:id"
  6. caseimBundleID="im:bundleId"
  7. }
  8. }

综上,如果是个人开发的 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

转载请说明出处
知优网 » 用 SwiftUI 实现一个开源的 App Store(swiftui框架)

发表评论

您需要后才能发表评论