你一定不知道的 AppStore 秘密

一、前言

对于 iOS 开发者来说 App Store 是必经之路,大家一定多多少少都会有了解。但 App Store 的功能之多,并且每年都有更新,比如上一篇文章我们讲到 《解读 AppStore 新功能:自定义产品页面和 A/B Test 工具》 ,所以本文对一些大家平时经常接触的功能,但可能忽视的一些细节进行解说,也会对一些平时大家很少接触的功能进行探索。可能不是最全的,但一定有你不知道的 App Store 秘密!

二、AppStore 秘密

我们的 SDK 包含 250,000 个 API,为您在 app 中构建高级功能提供了无限的可能性。过去 4 年发布的 iPhone 设备中 92% 都在运行 iOS 13,因此您可以放心地利用最新技术来交付功能。

来源:App Store - Apple Developer

  • 1 个生态系统。
  • 5 个平台。
  • 40 种语言。
  • 175 个地区。
  • 每周 5 亿访客。
  • 15 亿台 Apple 设备。

关于苹果 App Store 服务,大家最熟悉的包含有 App Store app、IAP(In App Purchase,应用内购买)、App 预订、App 评论搜索等。那么,我们一起来看看,有那些不为大家所知的秘密吧~

2.1 系统状态

比如上周五,苹果 App Store 出现故障,导致 无法连接 App Store,用户无法打开的问题:

16278113027218.jpg

针对以上这个情况,有没有办法可以提前预测呢?很遗憾告诉大家,目前苹果官方还没有提供实时的系统服务状态查询,在苹果官网的帮助可以查看到这样的 系统状态页面:

16278220480870.jpg

从上图可以看到,Apple BooksiTunes Store 服务在 2016-04-26 时因一些不可抗拒的原因在中国内地中断至今。而 Apple Pay & Wallet 钱包功能出现服务中断:

2021-07-23 上午7:00 - 现在,部分用户受到影响,岭南通·羊城通的持卡人可能无法使用 Apple Pay 的部分功能。

16278279533989.jpg

从这个服务中断就可以看出来,苹果的这个系统状态通知,并不是实时的公告,而是有延迟,有时候是修复后才出通知公告。

关于系统状态页面,不同地区是不同的链接,小编整理常见的列表:

国家/地区语言代号链接
中国zh_CNhttps://www.apple.com/cn/support/systemstatus/
美国en_UShttps://www.apple.com/support/systemstatus/
中国香港zh_HKhttps://www.apple.com/hk/support/systemstatus/
中国台湾zh_TWhttps://www.apple.com/tw/support/systemstatus/
韩国ko_KRhttps://www.apple.com/kr/support/systemstatus/
日本ja_JPhttps://www.apple.com/jp/support/systemstatus/
新加坡en_SGhttps://www.apple.com/sg/support/systemstatus/
俄罗斯ru_RUhttps://www.apple.com/ru/support/systemstatus/
德国de_DEhttps://www.apple.com/de/support/systemstatus/

从这里可以看到,每个国家或地区的链接中代码,那么这个语言代号可以从苹果 Choose Your Country or Region 网页的源代码中获取,这也是苹果目前支持的国家和地区。

以上是针对用户层面的服务,比如 App Store、iCloud 是否可用等,那么针对开发者来说,有没有苹果服务 API 的系统状态呢?其实也是有的。

开发者系统状态

16278329122934.jpg

从这个图片可出来,针对 App Store 的服务有很多,App Store ConnectApp Store SandboxApp Store Server NotificationsIn-App PurchasesApp Store Receipt Verification 等,从而可以看出这个页面的信息非常的重要!当然,这个目前苹果官方也没有实现的通知。比如这个:

Resolved Outage(已解决的中断)
Today, 12:58 AM - 1:07 AM
Some users were affected
Affected Services: App Store Connect, App Store Connect API, TestFlight
Users experienced a problem with this service.

16278329606100.jpg

因为这些服务目前是针对开发者服务,目前还没有分国家或地区的服务器,统一用这个 https://developer.apple.com/system-status/ 页面查看开发者系统状态。一般来说,当出现大面积的无法使用的服务时,可以通过查看状态确认是不是苹果服务器问题。比如,经常遇到苹果沙盒环境无法充值(App Store Sandbox)、线上用户无法充值(In-App PurchasesApp Store Receipt Verification),只能说,遇到问题时怀疑是苹果的服务问题,可以看看这个页面。但这个页面也不时实时刷新,出现大面积的无法使用,依然是看看大家(同行)或者新闻的消息。

注:为什么没有实时,我想是目前苹果的服务遍布全球,想要全盘实时通知,一方面是影响的时长,另一方面影响的范围,不是不可以,可能是需要时间?可以肯定苹果有内部系统报警,但如果遇到问题,马上通知开发者?评估影响时长和范围?还是应该马上修复?这里就不深入探讨,看看苹果未完待续。

既然苹果这样,那么我们来对比一下谷歌,看看有没有不一样的发现?首先是 Google 产品和服务的流量和中断记录 页面会显示:

image.png

上图可以看到谷歌服务的中断情况,网页中还有按国家、地区的筛选条件,这里就不展开了,大家想了解可以打开页面看看啊。

而谷歌常见服务出现故障甚至宕机时,在 Google Workspace 状态信息中心 页面可以查看:

16278341226786.jpg

页面底部有一个入口,Google Workspace 历史记录 可以查看某个服务的中断时间,影响时长等。相对于苹果的服务来说,还提供 RSS 和 JSON 历史记录接口,甚至是 帮助文档,显得更加完善和友好:

16278343347470.jpg

谷歌的系统状态查看服务有:Google Workspace、Google Cloud Status Dashboard、Firebase Status Dashboard、Google Ads 等,页面风格统一。Google Play Store 的系统状态,小编没有找到入口;而谷歌系统状态信息的实时性暂时没有相关资料,有懂的朋友,可以在评论区一起交流哈~

从网上资料看,谷歌服务出现故障的情况好像不多,毕业谷歌有商业化的云服务,出故障是不可能的?而苹果,一般是服微软和亚马逊的云服务,而在中国的 iCloud 服务是用云上贵州,其它的服务暂时还是统一服务器?

当然,关于实时性,也有第三方的服务监听苹果和谷歌的服务。比如 Downdetector、Google Play not working? 、Google Workspace Status 。这里就不展开了,毕竟第三方也是监听,从最优方案当然是官方支持。

最后,一般做用户产品的 app 都会遇到用户反馈:如果您无法连接到 App Store、iTunes Store 或其他 Apple 服务,但是文档是发生问题后的解决方案,能不能优化一下减少出问题呢?关于服务系统状态查询,它的目的是什么?肯定不是出问题后,给大家通告一下就完事吧,而应该是向更高实时性提高!加油吧苹果!

2.2 App 订阅

苹果内购订阅是很常见的类型,比如音乐、视频类 app 的持续包月,以前可能用户在 app 里订阅后,以为是一次性或者想准备到期后在取消,然后就被自动扣费了。这一招现在支付宝和微信早就学会了。还有一个原因,是以前苹果的 App Store 账号管理在首页下滚到最底部,总之经过的步骤很复杂,一般小白用户很难找。

其实,关于管理 app 订阅,以前是可能通过 https://buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/manageSubscriptions 链接打开 App Store 会自动显示用户的订阅信息界面,但一般开发者不会提供,甚至是开发者都不知道有这个链接。

现在,最新的 iOS 14 以后,App Store 用户账号很方便找到入口,在“帐户”,然后轻按“订阅”就可以管理订阅了。当然,如果开发者愿意引导用户打开订阅管理界面,可以用最新的这个苹果链接 https://apple.co/2Th4vqI。更多关于取消订阅可以参考 如何取消 Apple 提供的订阅 文档。

最后,苹果在 WWDC21 推出了在 app 里管理用户订阅项目的界面,不用在跳转到 App Store,具体可以翻看之前的文章 苹果内购 - WWDC21。

2.3 App 链接

在 2019 年以前,苹果的 app 商店链接,一直都是 itunes.apple.com,举例来说是这样的:https://itunes.apple.com/cn/app/斗罗大陆-魂师对决/id1558453472。因为 iTuens 是苹果的音乐播放和管理的软件,iPhone 可以说是从 iPod 升级而来,关于 iTuens 这里就不多说,因为苹果已经弃用并且,并转移到 Apple Music 和 Apple 播客这两个 app 中,详细可以查看 iTunes - Apple。

2019年6月14号,苹果宣布 AppStore 商店App下载地址从 itunes.apple.com 更换为 apps.apple.com。比如用 https://itunes.apple.com/cn/app/斗罗大陆-魂师对决/id1558453472 请求时,会自动跳转到 https://apps.apple.com/cn/app/斗罗大陆-魂师对决-腾讯动画正版授权/id1558453472。所以大家建议用新的链接,减少页面跳转。

当然,这个链接里有一个 cn 这个是国家或地区的标识,这个标识跟前文提到的是一样的。如果你的应用只上中国内地,那么就用 cn,用其它的也不影响中国内地账号用户访问,而其它地区的用户账号访问时会提示:目前您所在国家或地区尚不提供此App。而如果是选择全球所有的地区都发布,那么用什么地区标识都可以打开。

更进一步,不带地区也是可以,比如:https://apps.apple.com/app/斗罗大陆-魂师对决-腾讯动画正版授权/id1558453472,甚至带游戏名也不用带 https://apps.apple.com/app/id1558453472。不带这些参数的话,用电脑上打开显示 Connecting to the iTunes Store…,但是可以正常跳转到 App Store:

16279081060021.jpg

带所有的参数时,会显示 App Store 预览页面:

16279082639165.jpg

所以,关于 App 链接,最好的链接格式,应该是这样:https://apps.apple.com/cn/app/id1558453472。带有地区和 apple id 标识就可以了,游戏名可以不需要带上。

App Store 开发者页面

那么有一个问题,app 可以通过链接跳转到 App Store,那么可能通过链接跳转到 App Store 的开发者界面吗?

16279654329857.jpg

很显然是可以的!比如这个链接:https://apps.apple.com/cn/developer/khorgas-zhifan-network-technology-co-ltd/id1540746184,需要注意这个 id1540746184 是开发者账号的id,不是 app 的。那么问题来了,怎么获取这个开发者页面的链接呢?

16279656607309.jpg

答案就是,在浏览器打开开发者的某个 app 的预览页面,然后开发者名字那一栏,就是开发者页面的链接,复制一下就可以啦~

2.4 App 评论

在所有的 iOS 版本中,通过 app 链接拼接 action=write-review 时,都可以跳转到 App Store 打开评估页面。比如 https://apps.apple.com/cn/app/id1558453472?action=write-review 。需要注意的是,如果用户从来没有下载过此 app,则跳转后会提示必须拥有此项目才能评论:

16279099467349.jpg

而在 iOS 10.3 以上,苹果提供了 app 内评论的功能,方法也很简单,调用苹果的 API 接口 [SKStoreReviewController requestReview] 就可以:

16279099688237.jpg

App内评分功能注意事项

  • 仅支持 iOS 10.3+ 以上
  • 评分弹窗是标准化,不提供自定义UI或控制评分功能
  • 开发环境每次调用都会显示评分界面
  • TestFlight 环境不会显示评分界面
  • 生产环境一个用户账号最多显示3次/365天
  • 生产环境如果已经评论成功,再调用不会再弹

很多开发者如果不太留意,看到上面的弹窗,会以为只能在 App Store 才能文字评论。其实,在 app 内也可以写评论,在星级评论提交后,会显示下面的界面:

16279103951283.jpg

用户还可以选择,要不要撰写评论。当然点击”“表示不写文字评论了。

app 评分数量太少,可能会降低用户下载 app 的意愿,所以,苹果提高了这样的接口给开发者来选择。那么对于开发者来说,可以得到更多用户评论的机会,但如果不转移到 App Store 评论,就减少了 app 的曝光量。当然,好的 app 会消除了用户的顾虑,但酒香也怕巷子深,需要开发者多维度思考。

最后,从用户角度来看,如果你觉得 app 内评论影响到你的使用体验,其实你是可以在设置里关闭的:

16279110089060.jpg

在设置的 App Store 子页面中,可以选择关闭。所以,苹果的产品,确实会更多的站在用户体验来思考,不仅仅是(不)满足开发者。

2.5 iTunes Store API

苹果提供了一套 API 给开发者用来获取 iTunes Store、App Store、iBooks Store 和Mac App Store 的内容信息,包括 App、iBooks、电影、播客、音乐、音乐视频、有声读物和电视节目等。

比如获取 app 的最新信息,请求 https://itunes.apple.com/cn/lookup?id=1558453472 可以获取到:

{"resultCount": 1,"results": [{"advisories": ["偶尔/轻微的卡通或幻想暴力", "偶尔/轻微的现实暴力"],"appletvScreenshotUrls": [],"artistId": 1540746184,"artistName": "Khorgas Zhifan Network Technology Co., Ltd.","artistViewUrl": "https://apps.apple.com/cn/developer/khorgas-zhifan-network-technology-co-ltd/id1540746184?uo=4","artworkUrl100": ".../100x100bb.jpg","artworkUrl512": "https://is2-ssl.mzstatic.com/image/thumb/Purple115/v4/67/ac/7e/67ac7e2b-765c-ac94-9a60-215e975312e4/source/512x512bb.jpg","artworkUrl60": ".../60x60bb.jpg","averageUserRating": 4.5312200000000002475530891388189047574,"averageUserRatingForCurrentVersion": 4.5312200000000002475530891388189047574,"bundleId": "com.khorgas.hsdj","contentAdvisoryRating": "12+","currency": "CNY","currentVersionReleaseDate": "2021-07-20T15:01:04Z","description": "———2亿魂师推荐,真3D战斗手游———
21年度国民级IP战斗手游巨作,由阅文集团和腾讯动画正版授权,2亿用户推荐,和动画一模一样的《斗罗大陆:魂师对决》722日正式公测!下载与万千魂师即刻对决!......","features": ["iosUniversal"],"fileSizeBytes": "1441496064","formattedPrice": "免费","genreIds": ["6014", "7014", "7017"],"genres": ["游戏","角色扮演","策略"],"ipadScreenshotUrls": ["https://is4-ssl.mzstatic.com/image/thumb/PurpleSource125/v4/33/6f/ee/336fee4b-ced2-a41c-7e53-45ab6ad8e446/86ac5fcd-ba9d-41ee-8a20-63899b6b7697_2732x2048-1.jpg/552x414bb.jpg",...],"isGameCenterEnabled": false,"isVppDeviceBasedLicensingEnabled": true,"kind": "software","languageCodesISO2A": ["ZH"],"minimumOsVersion": "10.0","price": 0.0,"primaryGenreId": 6014,"primaryGenreName": "Games","releaseDate": "2021-07-20T07:00:00Z","releaseNotes": "1.斗罗大世界全新打造,真实天气交互,沉浸式的斗罗大陆,还每个斗罗迷一个真斗罗!
2.随机融合技玩法,觉醒你的专属武魂,深度培养,自由成长变异,挑战斗罗大陆最强的魂技策略组合!
3.其他优化:引擎、兼容性、画面等全面优化,提升游戏最佳体验!","screenshotUrls": ["https://is3-ssl.mzstatic.com/image/thumb/PurpleSource125/v4/65/7c/25/657c25a0-3fc7-cab5-b3f3-e46f8ece74d4/440d205f-827a-4446-9b28-2dcce8bef01e_2208x1242-1.jpg/406x228bb.jpg",...],"sellerName": "Khorgas Zhifan Network Technology Co., Ltd.","supportedDevices": [...],"trackCensoredName": "斗罗大陆:魂师对决-腾讯动画正版授权","trackContentRating": "12+","trackId": 1558453472,"trackName": "斗罗大陆:魂师对决-腾讯动画正版授权","trackViewUrl": "https://apps.apple.com/cn/app/%E6%96%97%E7%BD%97%E5%A4%A7%E9%99%86-%E9%AD%82%E5%B8%88%E5%AF%B9%E5%86%B3-%E8%85%BE%E8%AE%AF%E5%8A%A8%E7%94%BB%E6%AD%A3%E7%89%88%E6%8E%88%E6%9D%83/id1558453472?uo=4","userRatingCount": 44061,"userRatingCountForCurrentVersion": 44061,"version": "2.0.2","wrapperType": "software"}]
}

详细的内容字段,这里就不解析了,看就明白了。对于开发者来说,很方便通过苹果这个链接的数据获取一些信息,比如 app 的图标 artworkUrl512 字段获取,或者是 app 的版本号,可以通过这个信息来判断是否有新版本等。

根据小编经验,一般发布一个新版本后,大概 15 分钟这样,这个链接的数据才会更新,并且这个链接的数据更新后,App Store 才会显示可更新的版本。所以,对于发布新版本对外后,app 何时生效,通过监听这个链接的变动,目前是一个高效的方式,毕竟 app 发布后苹果只保证 24 小时内生效。

因为我们国内用苹果音乐、视频 TV 等比较少,所以这里就不介绍了,详细可以参考:iTunes Search API 和 iTunes Store API 文档。

2.6 App 下载

对于游戏来说,包体一般都是在 1 GB 以上,AppStore 使用蜂窝移动下载的应用包最大多少MB呢?

  • 2017年9月,蜂窝流量下载限制从 100M 扩大到 150M
  • 2019年5月下旬, 蜂窝流量下载限制从 150M 扩大到 200M
  • 2019年9月,iOS 13 正式版发布,可以选择使用蜂窝网络下载(不限制大小)。

所以,低于 iOS 13 的设备,可以使用蜂窝网络下载大小不超过 200 MB 的 App,否则,只能通过 WiFi(手机开热点也可以。)。

对于 iOS 13 以上,如果下载超过 200MB 的应用时,会提示链接 WiFi 时再下载 或 直接使用蜂窝网络下载:

16279156714109.jpg

选项可以在设置中更改,请前往“设置” -> “App Store” -> “App下载”:

16279157529555.jpg

如上图,在 iOS 13+ 有三个可选项:

  1. 始终允许
  2. 超过 200 MB 时请求许可
  3. 始终询问

所以,2019年9月后,蜂窝流量下载的限制应该是算没有了,苹果不在通过 AppStore 强制来控制,而是把选择权交回给用户。对于开发者来说,这也是一个好消息。

2.7 App 预订

App 预订功能大家应该都有了解过,那么你知道以下几个问题的答案吗?

  • 预订后的发布时间对应北京时间是几点?
  • 用户预订 app 后能取消预订吗?
  • app 上线后怎么区分那些用户是预订过的?
  • app 能像谷歌一样给预订的用户发奖励吗?

App 预订功能为什么这么多问题,原因有几个方面,一是开启 App 预订的前提条件有 2 个:

  1. app 未曾上架商店
  2. app 过审已经通过,等待开发者发布

这 2 个条件已经难道一批开发者,最重要的是测试环境!苹果没有提供 App 预订的测试环境!或者测试的方案!完成让你在生产环境上搞,所以,第一次吃螃蟹的人都是勇(辣)敢(鸡)的战(苹)士(果)!

预订后的发布时间对应北京时间是几点?
这个问题,所有有预订 app 的开发者可能会有这样的疑问。从苹果官方文档中,目前获取不到答案。从经验来说,一般是北京时间 23 点时默认预定发布;当然,开发者可以在苹果后台手动选择马上发布,而跳过系统自动定时发布。那么这个预订发布时间到底是什么时间呢?

假设预订时间是: 2020-10-16
那么真实预订生效时间:2020-10-15 北京时间 22:00 生效(或 23:00 生效)

首先,我们想到的是从苹果后台网页的源码查找:

16278752890505.jpg

上图的时间戳 1551168000000(毫秒) 转成北京时间为 2019-02-26 16:00:00 。显然不符合预期时间,所以,到底是什么时间?

最后在从苹果的 iTunes Search API 接口获取到 app 的信息(小编注:此接口下文会详细讲解,此处先略过。),接口返回的 Json 数据里有一个字段 releaseDate,大概的内容是这样 "releaseDate": "2021-09-23T07:00:00Z"(预订发布时间是2021年9月23日推出。)。刚开始小编也认为这个时间是 UTC/GMT 时间,最近根据北京时间 22:00 生效(或 23:00 生效)节点,推测苹果的 releaseDate 字段的时间是太平洋时间。那么太平洋时间是什么呢?

从维基百科 太平洋时区 查看:

太平洋时区(Pacific Time Zone)是在美国、加拿大及墨西哥西海岸靠近太平洋地区使用的时区。

  • 太平洋时区:也被称为太平洋时间(Pacific Time,PT)。
  • 其标准时间(冬季)称为太平洋标准时间(Pacific Standard Time,PST),UTC-8;
  • 夏令时间(夏季)称为太平洋夏令时间(Pacific Daylight Time,PDT),UTC-7。

这里可以直接看截图:

16278762021317.jpg

这是小编之前在公司内部分享《游戏出海本地化概述》的PPT(预告:下一篇文章会整理分享给大家。)

简单来说,中国标准时间(CST)比世界协调时间(UTC)早 8 小时,而太平洋夏令时间(PDT)比世界协调时间(UTC)晚 7 小时,也就是太平洋夏令时间(PDT)比中国标准时间(CST)晚 15 小时。

所以,太平洋夏令时间 7:00 (7:00 AM) = 北京时间 22:00 (10:00 PM) 。时间是对上了,但是日期没有对上!"releaseDate": "2021-09-23T07:00:00Z",所以这个至今还是一个迷,小编猜想苹果的服务器时间可能历史原因,还是用太平洋时间为基准,比如每年圣诞节暂时审核的时间也是太平洋时间。所以,这个问题有知道的朋友,可以在评论区一起讨论哈~

最后,关于 GMT/UTC/PST 这些时间,夏令时中国也实行过,本文就暂不深入展开,有时候会在单独梳理一篇关于时间的文章,敬请大家期待哈~

1986年至1991年,中华人民共和国在全国范围实行了六年夏令时,每年从4月中旬的第一个星期日2时整(北京时间)到9月中旬第一个星期日的凌晨2时整(北京夏令时)。除1986年因是实行夏令时的第一年,从5月4日开始到9月14日结束外,其它年份均按规定的时段施行。夏令时实施期间,将时间向后调快一小时。1992年4月5日后不再实行。

用户预订 app 后能取消预订吗?

答案是肯定可以啊。具体可以在 App Store app 的账户设置里进行取消:

16278789480428.jpg

其它方式可以参考 官方文档,另外,如果应用是付费下载的方式,那么预订时并不会马上收取费用,在应用发布后,系统会从你的付款方式中收取费用,并且会发一封电子邮件通知你。(注:如果付费应用,在预订期间调整 App 的价格,则会在顾客接受预订的价格和发布当日的价格中,选择较低的价格向顾客收取。)

而预订的用户,在应用发布后,系统是否会自动下载到用户的设备上?如果该用户 启用自动下载,则该 App 也会下载至该用户的所有其他设备上。启用自动下载的开关如下图:

16278850982545.jpg

app 上线后怎么区分那些用户是预订过的?

曾经一度认为苹果的没有标识预订用户的接口,然后在苹果 营销您的 App 页面的最下面看到一段不起眼的话:

您可以通过收据中的 “preorder_date (英文)” (预订日期) 字段来识别已预订您 app 的顾客。您可以使用此信息为预订用户解锁奖励 (如额外的游戏币),或在 app 内显示感谢购买的信息。

根据苹果的文档 responseBody.Receipt,苹果提供了三个用户预约 app 时间的字段(三个不同时间格式):

字段作用(英文)作用(中文)
preorder_dateThe time the user ordered the app available for pre-order, in a date-time format similar to ISO 8601.用户订购可用于预订的 app 的时间,采用类似于 ISO 8601 的日期时间格式。
preorder_date_msThe time the user ordered the app available for pre-order, in UNIX epoch time format, in milliseconds. This field is only present if the user pre-orders the app. Use this time format for processing dates.用户订购可用于预购的 app 的时间,以 UNIX 纪元时间格式,以毫秒为单位。此字段仅在用户预订应用程序时出现。使用此时间格式处理日期。
preorder_date_pstThe time the user ordered the app available for pre-order, in the Pacific Time zone.用户在太平洋时区订购可供预订的 app 的时间。

如果大家熟悉 receipt data,那么肯定会有这样的疑问?通过内购的收据查用户预订状态???对的!从目前的苹果 API 来看,还没有一个针对用户 App Store 信息的库或者一套 API,所以可能苹果工程师从简单的角度来看,预订的数据是 App Store 的数据,而 App Store 的内购又是一套通用的 API,所以直接放在 receipt 里面 ??!!

一切都是这么的(不)合理!为了拿到用户的预订时间,而这么复杂化的流程,并且 receipt 数据比较大,所以,苹果工程师估计也是知道的,所以在 WWDC21 推出了 StoreKit 2,但苹果并没有针对预订状态查询提供新的接口,具体可以翻看之前的文章 苹果内购 - WWDC21。

说了这么多,那么开始说点技术的内容啊,首先是获取苹果 Receipt 收据的接口:

NSString *receiptString = [[NSString alloc] initWithData:[[NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]] base64EncodedDataWithOptions:0] encoding:NSUTF8StringEncoding];

那么问题来了,这个获取的数据,在沙盒环境下,并没有 preorder_date 字段,因为在测试环境下,app 无法模拟预订的过程,所以辣鸡!这时候就是脑洞大开的时间了,那就下载一些之前预订的 app,获取它的 Receipt 数据,看看 preorder_date 的时间就好啦!(还好 App Store 有很多预订中的 app,所以大家用户自己开发一个新 app 然后送审,在然后预订下载,不然这样一个流程下来,估计已经花一个月以上了!)

通过越狱设备,下载预订的 app,然后 Cycript 命令工具,执行 cycript -p 进程名 或者 cycript -p 进程ID,然后执行下面的代码,就可以得到 Receipt 数据:

[[NSString alloc] initWithData:[[NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]] base64EncodedDataWithOptions:0] encoding:NSUTF8StringEncoding]

注:Cycript 由 Cydia 创始人 Saurik 推出的一款脚本语言,它混合了 Objective-C 与 JavaScript 语法解释器,能够探测和修改运行中的应用程序。Cycript 主要用于注入目标进程来实现运行时调试,它的优点是重启程序后所有的修改都会失效,对原生程序或代码完全无副作用。关于越狱更多知识,大家自行查阅相关资料啊,这里也不展开了。

最后,把获取到的 Receipt 数据,通过苹果的 verifyReceipt 接口验证,获取到收据的内容:

{environment = Production;receipt =     {"adam_id" = 1558453472;"app_item_id" = 1558453472;"application_version" = 14;"bundle_id" = "com.khorgas.hsdj";"download_id" = 111070588400817;"in_app" =         ();"original_application_version" = 14;"original_purchase_date" = "2021-07-20 15:39:32 Etc/GMT";"original_purchase_date_ms" = 1626795572000;"original_purchase_date_pst" = "2021-07-20 08:39:32 America/Los_Angeles";"preorder_date" = "2021-05-03 03:34:56 Etc/GMT";"preorder_date_ms" = 1620012896000;"preorder_date_pst" = "2021-05-02 20:34:56 America/Los_Angeles";"receipt_creation_date" = "2021-08-02 02:32:58 Etc/GMT";"receipt_creation_date_ms" = 1627871578000;"receipt_creation_date_pst" = "2021-08-01 19:32:58 America/Los_Angeles";"receipt_type" = Production;"request_date" = "2021-08-02 07:18:50 Etc/GMT";"request_date_ms" = 1627888730021;"request_date_pst" = "2021-08-02 00:18:50 America/Los_Angeles";"version_external_identifier" = 843086210;};status = 0;
}

那么就可以获取到预订的时间:

  • “original_purchase_date” = “2021-07-20 15:39:32 Etc/GMT”;
  • “original_purchase_date_ms” = 1626795572000;
  • “original_purchase_date_pst” = “2021-07-20 08:39:32 America/Los_Angeles”;

综上,这就是判断一个用户是否为预订用户的方法,是不是感觉绕了一圈子!这也是目前唯一的方法了。另外,如果没有 preorder_date 字段,那么这个用户就是非预订用户,是在预订时间后才下载应用的。

app 能像谷歌一样给预订的用户发奖励吗?

像游戏,一般会给预订的用户,在开服当天发送奖励,那么实现这个预订的用户发放奖励,流程是怎么样?

先说一下 Google Play Store,从 为应用开放预注册服务以提升用户认知度 文档可以看到,开发者可选择提供预注册奖励,只需要在 Play 后台设置状态的商品(内购品项)。整个预订的用户判断和发奖流程,都是谷歌统一来处理和管理,不需要开发者操心!正如我们上一篇文章说的 解读 AppStore 新功能:自定义产品页面和 A/B Test 工具,Apple & Google、iOS & Android、App Store & Play Store,相互学习相互借鉴,至少目前来说,苹果苹果需要向谷歌学习的地方确实还有很好!加油苹果~

那么 iOS 怎么给预订的用户发送奖励呢?从上面的流程,大家可能已经感受到了。用户是否为预约用户,要先从用户下载的 app 里调用苹果接口获取 Receipt 收据,发送给服务端向苹果验证这个收据,响应的收据信息里,有 preorder_date 字段,判断用户预约的时间,然后就可以判断用户发放奖励等处理逻辑。

详细的发奖励流程,这里就不详细展开了,但这里需要注意一点是防止用户恶意刷取,因为刚刚说了,有没有这个字段是跟用户的 apple id 账号关联的,而一个 apple id 账号是可以登陆多个设备的。可以感受到,苹果的这个预订奖励功能有多烂,没有对比就没有伤害。谷歌的预订奖励是谷歌服务来控制,谷歌可以控制一个谷歌Play用户只能领取一次!

其它的坑点

苹果新后台刚刚改版时,出现了很多问题,其中一个就是预订时间无法更改的Bug,导致了想延迟预订时间都没有办法。不得不吐槽一下苹果,当出现 bug 时,一般是通过邮件或者电话联系开发者当地的客服,而一般开发者反馈的问题都不会得到重视,导致了一些问题让开发者很煎熬!

遇到这种问题时,只能默默选择下架应用,那么下架后,担心已经预订的用户是不是收到下载通知?苹果的文档 有解析:如果您将 App 预订从 App Store 中移除,除非在发布日期之前您再次使其支持预订,否则已经预订了您 App 的顾客将不会收到该 App,且不会向顾客收取费用。此外,一旦发布日期已过,您便不能再次将 App 以预订形式发布。

最后一个问题就是,预订状态的生效时间。用户预订应用后,App Store 会显示灰色的 已预订 按钮,无法点击:

16278916831006.jpg

然而,有一些用户就是没有开启自动下载功能,这时候,其实用户是不会自动下载的。然后因为苹果服务器应用发布生效时间只保证 24 小时内,所以,导致这部分用户在 App Store 下载不了的问题!

这时候,除了让用户等苹果应用生效后在手动下载,还有一个方式,就是让用户取消预订应用!具体可以参考文档 取消应用预订,然而,这里需要注意一下,如果游戏是开启了预订奖励,那么让用户取消预订在下载,就可能导致用户的预订奖励无法领取啦!

通过这些细节的探究,App Store 功能之多,每一个小功能,都紧密联系,所以导致系统庞大而臃肿,牵一发而动全身,希望苹果能看到这些问题,做的更加好~

2.8 促销代码(兑换码)

借助在 App Store Connect 中配置的促销代码,让媒体和有影响力的用户率先体验您的 app 或 App 内购买项目。您可以为一款 app 在不同平台的每个版本提供最多 100 个促销代码;每款 App 内购买项目也能提供最多 100 个促销代码。

促销代码概述

促销代码可能大家习惯叫兑换码。促销代码的作用,从苹果的角度来看,是让开发者方便给媒体和有影响力的用户率先体验和评测 app。所以,苹果对促销代码的限制比较多,每个 App 内购买项目提供至多 100 个促销代码,每个 App 的 App 内购买项目代码在每六个月内的总上限均为 1000 个(在1月1日和7月1日重置)。这些代码用于非商业用途,并会在请求代码的 28 天之后过期。

促销代码对于开发者来说,唯一的好处是 app 在 App Store 上架之前使用。也就是说,app 过审后,如果没有发布对外,在 App Store 是无法查看的,但通过促销代码,可以在 App Store 里进行兑换下载。并且对兑成功后,这个 app 可以永久下载,但是,苹果会区分促销代码下载的用户,这部分用户无法对 app 进行评价。点击评分时,会提示“您必须拥有此项目”:

16279577944052.jpg

2014 年,Apple 收购了 TestFlight,所以现在苹果主力的测试分发方式改为了 TestFlight。但 TestFlight 也有明显无法满足的需求,因为苹果最终还是想让用户通过 App Store 下载 app。所以 TestFlight 发布的 app 每个版本只有 90 天测试时间,如果开发者在 90 天内没有更新,那么用户就无法从 TestFlight 中下载该应用。而已经下载到设备的 app,也会在下载之日起的第 90 天后失效。在某个版本失效或被开发者主动移除前,用户可以随意在应用的不同版本中切换,用于对比版本间的差异。

16279585748731.jpg

然后,目前在国区,促销代码代码也换出很多花样,变成一个第三方分发的方式。

16279588662691.jpg

最后,除了以上的促销代码,苹果在 iOS 14 时,推出了 订阅优惠代码,优惠代码让您能以优惠价格或限时免费形式来提供订阅,可以帮助您获取、留存和赢回订阅用户。苹果对于内购的营销方式支持力度一直是重点,特殊是游戏类是内购的大头。

使用 iOS 14 和 iPadOS 14 及更高版本的顾客可以通过一个一次性代码兑换 URL 在 App Store 上兑换优惠代码;如果开发者在 app 实现了 presentCodeRedemptionSheet (英文) API,用户也可以在 app 内直接兑换。

综上,兑换码本身是可以方便开发者为用户提供测试的机会,随着业务需求的变化,开发者更多的是希望通过兑换码,来吸引用户进行下载 app!毕竟,现在让用户下载一个 app 是非常难的事情。

2.9 App Store 工具

说了这么多,对于苹果和开发者来说,App Store 的利益是共赢(至少是不亏),所以推广开发者的 app,对于苹果或者是开发者来说,都是头等大事。对于大公司来说,会有很多营销或者创意进行推广,但对于一般的开发者来说,特别是独立开发者来说,是一种非常不容易的事。所以,我们一起来看看,苹果为开发者提供了那些推广 app 的工具吧~

App Store Marketing Tools

16279598657980.jpg

Market with App Store 是一个非常棒的工具,让开发者快速生成需要的推广素材。生成可打开您 App Store 产品页面的短链接或嵌入式代码,并显示您的 app 图标、二维码或 App Store 徽章。

简单来说,开发者通过 Market with App Store 搜索自己的 app,然后就可以点击打开素材的页面:

16279604843988.jpg

Content Link 是 app 的下载链接,App Icon 点击左边的 Copy Embed 是一段 html 的代码,效果是如图一样的一个 icon 的图标,点击图标时会跳转到 app 下载链接。右边是下载当前的 icon 图标(分辨率是1000x1000,自动切成苹果的圆角)。

16279607760231.jpg

这个是 App Store 下载的徽章,支持白色和黑色风格,还有“下载”方案是支持多语言定义。

16279608629386.jpg

最后是 QR Code 二维码,支持黑色、白色、蓝色三种风格,嵌入 app 图标等。这个功能至少来说还是很方便的~

16279621769632.jpg

除了 app 的推广素材,还有 Books、Music、News、Podcasts、TV 等,大家有兴趣的可以自行研究哈,这里就不展开了。

其他图案和指南

为了方便开发者,在网站、电子邮件和社交媒体中展示 app,同时显示 Apple 产品图像和 App Store 徽章等。苹果在 营销资源和识别标志指南 页面里提供了很多素材下载。

16279611453135.jpg

App Store 徽章提供了下载和预下载的样式,App Store、Mac App Store、Apple TV 三个平台。对于素材来说,所有本地化语言都包含,下载的每个语言文件夹下有 EPSSVG 二种格式的矢量图片。

16279612522994.jpg

苹果非常注重品牌的推广和营销,所以开发者的营销材料中使用 Apple 提供的产品图像,苹果建议始终使用 app 当前开发所针对的最新一代产品图像。在 营销资源和识别标志指南 页面还有非常多的详细规范和准则,感兴趣的朋友可以看看哈~

Apple Design Resources

在苹果 Apple Design Resources 页面,可以下载苹果的标准 UI 素材,包括 Sketch、Photoshop 和 XD 模板等格式,方便开发者快速准确地设计 app 效果图。

16279637326714.jpg

RSS Generator

通过这个 RSS Feed 生成工具 页面,可能获取 App Store 榜单的应用排名情况,并且是有 Feed 链接可以获取数据,大家有兴趣可以看看。

16279641356168.jpg

2.10 iOS 和 iPadOS 的使用情况

在 App Store - 支持 页面,苹果提供了最新的 iOS 和 iPadOS 的占比数据:

16279628002579.jpg

通过这个数据,可以了解到最新的占比。当然对于不同的地区或者国家,不同的 app,如果要说明产品或者老板 app 不支持 iOS 12 了? 可能还是从自家的产品的数据监控为准吧,毕竟苹果这个只是 App Store 的数据,不是苹果的所有设备的系统数据。

2.11 App 侵权争议

开发者开发的 app,可能会面临侵权风险,这个侵权不单单是大家想到的内容抄袭、素材盗用等,比如起的 app 名字,可能别人申请了商标,而你当初起名字时,可能也没有太在意等。随着 App Store 越来越大,其中的利益竟争也必然越来越被重视。开发者在 app 的元数据和内容方面,也需要特别注意。

最后,如果你发现有争议的 app 时,可以通过苹果 Apple - Legal - iTunes App Store Content Dispute 页面进行申诉。这个申诉,苹果不会马上对争议的 app 进行处理,而是会给争议双方发送电子邮件,以便双方直接沟通,解决争议。如果你收到苹果的争议邮件,也需要特别注意,及时回复邮件,否则苹果会认为你对争议没有异议,然后将你的 app 下架处理。

2.12 分享您的故事

入选 App Store 精选推荐

App Store 拥有一支全球营销团队,专注于提升 app 的曝光度和用户的参与度。他们会打造各种营销活动和计划,为用户提供帮助、信息和灵感,同时帮助您提升自己 app 和游戏的下载次数与重新下载次数。我们的全球编辑团队根据用户所使用设备的不同,为他们量身打造专属的 App Store app 选购体验,从而在合适的时间和地点,将您的 app 呈现给合适的用户。

如果您的 app 背后有独特的故事,想与我们的编辑团队分享,欢迎告诉我们。如果您准备推出新的 app 或重大更新,请在发布的 6 至 8 周前告知我们。

除了刚刚说到的 App Store 秘密,分享您的开发者故事,就是最大的秘密!获取推荐,最终带来大量的新增用户是非常可观的方式,具体大家可以通过 欢迎告诉我们 了解更多。

最后,我们主要是来说说,假如被苹果推荐后,经常会有同学这样问到,这些素材通过什么方式给苹果呢? 格式和标准尺寸是怎么样?

16279676460575.png

如果 app 被推荐,苹果会在 App Store Connect 开放对应的入口 Promotional Artwork,因为苹果的推荐位有很多种类型,具体可以查看这个 文件的格式 文档。

特别说一下,苹果推荐目前是没有分级或者分账号显示不同的内容,所有的账号显示的推荐内容是一样的。所以,一般最好是老少皆宜的内容,推广素材需要特别注意,举例来说:

16279683051475.jpg

详细可以参考这个 App Store 推广图案准则 文档,苹果列举了非常全面的准则和教程,这里就不展开了。

三、总结

文章有点长了,终于总结了 12 个可能是秘密的秘密?不知道大家有没有认真看完,但希望大家有所收获哈~

最后,从开发者角度来说,每个公司的业务都不一样,大家接触的 App Store “秘密”也不尽相同。所以,小编只是从接触过的视角跟大家一起分享,如果大家有更多“秘密”欢迎与我们一起分享,一起交流,一起进步~

欢迎大家一起在评论区交流~

欢迎关注我们,了解更多 iOS 和 Apple 的动态~

四、参考

  • Apple - Support - System Status
  • Choose your country or region - Apple
  • System Status - Apple Developer
  • 如果您无法连接到 App Store、iTunes Store 或其他 Apple 服务 - Apple 支持 (中国)
  • Google 产品和服务的流量和中断记录 – Google 透明度报告
  • Google Workspace 状态信息中心
  • Google Cloud Status Dashboard
  • 查看 Google Workspace 服务的当前状态 - Google Workspace 管理员帮助
  • Firebase Status Dashboard
  • Google Ads 状态信息中心
  • 为您的 App 提供预订 - App Store - Apple Developer
  • 将您的 App 以预订形式发布 - App Store Connect 帮助
  • 在 App Store、iTunes Store 和 Apple Books 中预订应用、影片、音乐和图书 - Apple 支持
  • responseBody.Receipt | Apple Developer Documentation
  • verifyReceipt | Apple Developer Documentation
  • 如何在 Apple 设备上手动更新 App - Apple 支持 (中国)
  • App Store 链接更新 - Apple Developer
  • 为应用开放预注册服务以提升用户认知度 - Play 管理中心帮助
  • 太平洋时区 - 维基百科
  • 苹果iOS内购三步曲:App内退款、历史订单查询、绑定用户防掉单!— WWDC21
  • 解读 AppStore 新功能:自定义产品页面和 A/B Test 工具
  • App Store - 功能 - Apple Developer
  • 评分、评论和回复 - App Store - Apple Developer
  • iTunes - Apple
  • iTunes Search API: Overview
  • iTunes Store API
  • 如何取消 Apple 提供的订阅 - Apple 支持 (中国)
  • 从 App Store 下载 App 和游戏 - Apple 支持
  • 如果无法在 iPhone 或其他 Apple 设备上下载或更新 App - Apple 支持
  • 入选 App Store 精选推荐 - App Store - Apple Developer
  • 探索 App Store 和 Mac App Store - App Store - Apple Developer
  • 促销代码概述 - App Store Connect 帮助
  • 为订阅优惠代码做好准备 - 新闻 - Apple Developer
  • 自动续期订阅 - App Store - Apple Developer
  • Market with App Store
  • 营销资源和识别标志指南 - App Store - Apple Developer
  • App Store 推广图案准则
  • App Store - 支持 - Apple Developer
  • Apple - Legal - iTunes App Store Content Dispute
  • Apple Design Resources - Apple Developer

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/254922.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

APP爬虫技术总结

一、APP常用抓包技术 工具 Charles,fiddler,burpsuite,Packet Capture等,具体操作可以查找百度抓包方法 a.常规操作直接抓 b.使用XposedJustTrustMe关闭SSL证书验证抓包 关闭SSL证书校验之前抓包 关闭SSL证书校验之后抓包 c.使…

H5 引用vue 打开app(如何该手机内有某个app则直接打开app,如果没有则跳转app下载页面)

H5 引用vue 打开app(如何该手机内有某个app则直接打开app,如果没有则跳转app下载页面) **ps: 一定一定一定一定先向 ios要 ( ios下载地址 和 ios对应的app协议 ),找安卓要( android…

使用uni-app开发App简易教程

使用uni-app开发App简易教程 前言app端开发步骤1、 申请uniapp开发者账号2、登录后开始新建应用3、下载安装 HBuildder X 。4、新建项目5、开启webview,在pages-index里面写一点点代码6、配置mainifest.json7、打包 h5工程配置在html中引入uniapp-sdk解决后退问题 上…

instant app入门和开发指南

本文由玉刚说写作平台提供写作赞助,赞助金额:300元原作者:AndroFarmer版权声明:未经本公众号许可,不得转载 概述 instant app 是谷歌推出的类似于微信小程序(或者说小程序类似于instant app)的一…

逆向技巧-快速定位App请求协议加密解密位置的方法

在App的逆向破解或者渗透测试过程中,经常会遇到网络请求协议被加密的情况,这个时候如果不对请求协议封包进行解密,找到其加密解密方法,就无法再进行下一步的操作。之前还好,大多数APP的加密解密方式为国际通用的算法&a…

uniApp实现h5页面唤醒app

如果想app跳app看这篇文章:app跳转app 说一下最近公司的需求 公司目前需要后台向每个用户发送一个带链接的短信,然后点击链接唤醒app。 注意 app配置ios,androi。app记得打包h5需要window.location.href进入 逻辑 当用户点击链接进入h5…

app采集的10个经典方法

app采集的抓取数据、app抓包、网页爬虫、采集网站数据、app数据采集软件、python爬虫、HTM网页提取、APP数据抓包、APP数据采集、一站式网站采集技术、BI数据的数据分析、数据标注等成为大数据发展中的热门技术关键词。那么app采集数据的方法有哪些呢?我给大家分享一…

辣椒app软件测试,testflight辣椒视频APP

辣椒视频test flight其实是一款关于系统类型的工具软件,看起来很像是影视播放器但其实并不是。testflight辣椒视频最近非常的红包,不少的小伙伴都想要知道辣椒视频test flight邀请码、兑换码,一起来看看吧~ 辣椒视频test flight简介 testflig…

app反编译

在进行安卓开发或者爬虫开发过程中,偶尔会遇到需要将app进行反编译分析参考源码的需求,接下来,笔者将自己实践过程记录下来,給需要的朋友一个参考。仅供学习之用,勿做坏事儿,哈哈哈! 准备工作&…

这些旅行必备APP,你知道几个?

虽说疫情还在继续,但是有时候我们仍然会控制不住自己想要旅游想要呼吸其他地方空气的心情。在了解知悉目的地的防疫政策并做好充足的防疫准备后,我们不妨来一场告别已久的旅行。但在旅行前,请先马住这些旅游必备app。 1.穷游行程助手 行程攻…

APP启动流程解析

前言 当我们点击手机屏幕上的软件图标时,就可以打开这个软件,看似很简单的过程其实包含了许多的底层交互,看了还不明白,欢迎来打我。 一 . 启动流程简介 首先要知道的是,手机屏幕其实就是一个Activity,我…

uniapp实现app跳转app

需要H5唤醒App看这篇文章:H5唤醒App 需求:公司的app跳转公司的另一个app 注意看注释!!! 注意看注释!!! 注意看注释!!! 如何实现呢,…

【Spring】— 动态SQL :<if>元素

动态SQL &#xff1a;元素 在MyBatis中&#xff0c;<if>元素是常用的判断语句&#xff0c;主要用于实现某些简单的条件选择。在实际应用中&#xff0c;我们可能会通过多个条件来精确地查询某个数据。 【示例8-1】下面通过一个具体的案例来演示元素的使用。 &#xff0…

数组及详解冒泡排序

数组及详解冒泡排序 一维数组的创建和初始化一维数组的创建一维数组的初始化一维数组的应用一维数组在内存中的存储 二维数组的创建和初始化二维数组的创建二维数组的初始化二维数组的应用二维数组在内存中的存储 数组越界问题数组作为函数参数数组名的含义及特殊两个例子 冒泡…

chatgpt赋能python:Python中累乘的作用和用法

Python中累乘的作用和用法 在Python编程语言中&#xff0c;累乘指的是连续乘法&#xff0c;或者说是一系列数字的乘积。累乘的概念非常简单&#xff0c;但是实际上它在编程中有着广泛的应用。 累乘在Python中的实现方式 Python中&#xff0c;累乘可以通过多种方式来实现&…

25条关于人生感悟的经典句子

1.活得糊涂的人&#xff0c;容易幸福&#xff1b;活得清醒的人&#xff0c;容易烦恼。这是因为&#xff0c;清醒的人看得太真切&#xff0c;一较真&#xff0c;生活中便烦恼遍地&#xff1b;而糊涂的人&#xff0c;计较得少&#xff0c;虽然活得简单粗糙&#xff0c;却因此觅得…

佛家经典禅语语录句子

【1】&#xff1a;在天地之间觅得一方安详&#xff0c;听风雨&#xff0c;听山语&#xff0c;听禅语。 【2】&#xff1a;心是一方砚&#xff0c;不空亦不满。眼是一片天&#xff0c;不奢亦不贪。字是一盘餐&#xff0c;不腻亦不淡。深邃梅婷花向晚&#xff0c;零落幻影墨里寒。…

知足常乐--每日十问

如果你想走出常规&#xff0c;放松心情&#xff0c;以积极的的心态开始新的一天&#xff0c;那就很有必要以自问的方式开始一天&#xff0c;这些问题会给我们带来力量和好心情. 1、我拥有什么&#xff1f; 通常我们会为自己没有的东西而苦恼&#xff0c;却看不到自己拥有的&…

chatgpt赋能python:Python中的“5“+“5“:了解运算符重载和字符串拼接

Python中的 “5”“5”: 了解运算符重载和字符串拼接 Python中的运算符重载允许我们自定义类型的操作符行为。当我们使用加号运算符将两个对象相加时&#xff0c;Python会动态地确定该使用哪种类型的操作符行为。在使用字符串时&#xff0c;加号可以用于字符串的连接&#xff…

chatgpt赋能python:Python中的提取函数——数据清洗中必不可少的利器

Python中的提取函数——数据清洗中必不可少的利器 数据清洗是数据分析过程中不可或缺的一步&#xff0c;而Python中的提取函数则是数据清洗中必不可少的利器。本文将重点介绍一些Python中常用的提取函数&#xff0c;以帮助数据分析师更好地应对实际问题。 什么是提取函数&…