本文首发于 你一定不知道的 AppStore 秘密 - 掘金,欢迎关注我们 @37手游iOS技术运营团队 。
一、前言
对于 iOS 开发者来说 App Store 是必经之路,大家一定多多少少都会有了解。但 App Store 的功能之多,并且每年都有更新,比如上一篇文章我们讲到 《解读 AppStore 新功能:自定义产品页面和 A/B Test 工具》 ,所以本文对一些大家平时经常接触的功能,但可能忽视的一些细节进行解说,也会对一些平时大家很少接触的功能进行探索。可能不是最全的,但一定有你不知道的 App Store 秘密!
二、AppStore 秘密
我们的 SDK 包含 250,000 个 API,为您在 app 中构建高级功能提供了无限的可能性。过去 4 年发布的 iPhone 设备中 92% 都在运行 iOS 13,因此您可以放心地利用最新技术来交付功能。
- 1 个生态系统。
- 5 个平台。
- 40 种语言。
- 175 个地区。
- 每周 5 亿访客。
- 15 亿台 Apple 设备。
关于苹果 App Store 服务,大家最熟悉的包含有 App Store app、IAP(In App Purchase,应用内购买)、App 预订、App 评论搜索等。那么,我们一起来看看,有那些不为大家所知的秘密吧~
2.1 系统状态
比如上周五,苹果 App Store 出现故障,导致 无法连接 App Store
,用户无法打开的问题:
针对以上这个情况,有没有办法可以提前预测呢?很遗憾告诉大家,目前苹果官方还没有提供实时的系统服务状态查询,在苹果官网的帮助可以查看到这样的 系统状态页面:
从上图可以看到,Apple Books
和 iTunes Store
服务在 2016-04-26 时因一些不可抗拒的原因在中国内地中断至今。而 Apple Pay & Wallet
钱包功能出现服务中断:
2021-07-23 上午7:00 - 现在,部分用户受到影响,岭南通·羊城通的持卡人可能无法使用 Apple Pay 的部分功能。
从这个服务中断就可以看出来,苹果的这个系统状态通知,并不是实时的公告,而是有延迟,有时候是修复后才出通知公告。
关于系统状态页面,不同地区是不同的链接,小编整理常见的列表:
国家/地区 | 语言代号 | 链接 |
---|---|---|
中国 | zh_CN | https://www.apple.com/cn/support/systemstatus/ |
美国 | en_US | https://www.apple.com/support/systemstatus/ |
中国香港 | zh_HK | https://www.apple.com/hk/support/systemstatus/ |
中国台湾 | zh_TW | https://www.apple.com/tw/support/systemstatus/ |
韩国 | ko_KR | https://www.apple.com/kr/support/systemstatus/ |
日本 | ja_JP | https://www.apple.com/jp/support/systemstatus/ |
新加坡 | en_SG | https://www.apple.com/sg/support/systemstatus/ |
俄罗斯 | ru_RU | https://www.apple.com/ru/support/systemstatus/ |
德国 | de_DE | https://www.apple.com/de/support/systemstatus/ |
从这里可以看到,每个国家或地区的链接中代码,那么这个语言代号可以从苹果 Choose Your Country or Region 网页的源代码中获取,这也是苹果目前支持的国家和地区。
以上是针对用户层面的服务,比如 App Store、iCloud 是否可用等,那么针对开发者来说,有没有苹果服务 API 的系统状态呢?其实也是有的。
开发者系统状态
从这个图片可出来,针对 App Store 的服务有很多,App Store Connect
、App Store Sandbox
、App Store Server Notifications
、In-App Purchases
、App 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.
因为这些服务目前是针对开发者服务,目前还没有分国家或地区的服务器,统一用这个 https://developer.apple.com/system-status/ 页面查看开发者系统状态。一般来说,当出现大面积的无法使用的服务时,可以通过查看状态确认是不是苹果服务器问题。比如,经常遇到苹果沙盒环境无法充值(App Store Sandbox
)、线上用户无法充值(In-App Purchases
、App Store Receipt Verification
),只能说,遇到问题时怀疑是苹果的服务问题,可以看看这个页面。但这个页面也不时实时刷新,出现大面积的无法使用,依然是看看大家(同行)或者新闻的消息。
注:为什么没有实时,我想是目前苹果的服务遍布全球,想要全盘实时通知,一方面是影响的时长,另一方面影响的范围,不是不可以,可能是需要时间?可以肯定苹果有内部系统报警,但如果遇到问题,马上通知开发者?评估影响时长和范围?还是应该马上修复?这里就不深入探讨,看看苹果未完待续。
既然苹果这样,那么我们来对比一下谷歌,看看有没有不一样的发现?首先是 Google 产品和服务的流量和中断记录页面会显示:
可以看到谷歌服务的中断情况,网页中还有按国家、地区的筛选条件,这里就不展开了,大家想了解可以看看啊。
而谷歌常见服务出现故障甚至宕机时,在 Google Workspace 状态信息中心 页面可以查看:
页面底部有一个入口,Google Workspace 历史记录 可以查看某个服务的中断时间,影响时长等。相对于苹果的服务来说,还提供 RSS 和 JSON 历史记录接口,甚至是 帮助文档,显得更加完善和友好:
谷歌的系统状态查看服务有: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:
带所有的参数时,会显示 App Store 预览页面:
所以,关于 App 链接,最好的链接格式,应该是这样:https://apps.apple.com/cn/app/id1558453472
。带有地区和 apple id 标识就可以了,游戏名可以不需要带上。
App Store 开发者页面
那么有一个问题,app 可以通过链接跳转到 App Store,那么可能通过链接跳转到 App Store 的开发者界面吗?
很显然是可以的!比如这个链接:https://apps.apple.com/cn/developer/khorgas-zhifan-network-technology-co-ltd/id1540746184
,需要注意这个 id1540746184
是开发者账号的id,不是 app 的。那么问题来了,怎么获取这个开发者页面的链接呢?
答案就是,在浏览器打开开发者的某个 app 的预览页面,然后开发者名字那一栏,就是开发者页面的链接,复制一下就可以啦~
2.4 App 评论
在所有的 iOS 版本中,通过 app 链接拼接 action=write-review
时,都可以跳转到 App Store 打开评估页面。比如 https://apps.apple.com/cn/app/id1558453472?action=write-review
。需要注意的是,如果用户从来没有下载过此 app,则跳转后会提示必须拥有此项目才能评论:
而在 iOS 10.3 以上,苹果提供了 app 内评论的功能,方法也很简单,调用苹果的 API 接口 [SKStoreReviewController requestReview]
就可以:
App内评分功能注意事项
- 仅支持 iOS 10.3+ 以上
- 评分弹窗是标准化,不提供自定义UI或控制评分功能
- 开发环境每次调用都会显示评分界面
- TestFlight 环境不会显示评分界面
- 生产环境一个用户账号最多显示3次/365天
- 生产环境如果已经评论成功,再调用不会再弹
很多开发者如果不太留意,看到上面的弹窗,会以为只能在 App Store 才能文字评论。其实,在 app 内也可以写评论,在星级评论提交后,会显示下面的界面:
用户还可以选择,要不要撰写评论。当然点击”好“表示不写文字评论了。
app 评分数量太少,可能会降低用户下载 app 的意愿,所以,苹果提高了这样的接口给开发者来选择。那么对于开发者来说,可以得到更多用户评论的机会,但如果不转移到 App Store 评论,就减少了 app 的曝光量。当然,好的 app 会消除了用户的顾虑,但酒香也怕巷子深,需要开发者多维度思考。
最后,从用户角度来看,如果你觉得 app 内评论影响到你的使用体验,其实你是可以在设置里关闭的:
在设置的 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
可以获取到:
1 | { |
详细的内容字段,这里就不解析了,看就明白了。对于开发者来说,很方便通过苹果这个链接的数据获取一些信息,比如 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 时再下载 或 直接使用蜂窝网络下载:
选项可以在设置中更改,请前往“设置” -> “App Store” -> “App下载”:
如上图,在 iOS 13+ 有三个可选项:
- 始终允许
- 超过 200 MB 时请求许可
- 始终询问
所以,2019年9月后,蜂窝流量下载的限制应该是算没有了,苹果不在通过 AppStore 强制来控制,而是把选择权交回给用户。对于开发者来说,这也是一个好消息。
2.7 App 预订
App 预订功能大家应该都有了解过,那么你知道以下几个问题的答案吗?
- 预订后的发布时间对应北京时间是几点?
- 用户预订 app 后能取消预订吗?
- app 上线后怎么区分那些用户是预订过的?
- app 能像谷歌一样给预订的用户发奖励吗?
App 预订功能为什么这么多问题,原因有几个方面,一是开启 App 预订的前提条件有 2 个:
- app 未曾上架商店
- app 过审已经通过,等待开发者发布
这 2 个条件已经难道一批开发者,最重要的是测试环境!苹果没有提供 App 预订的测试环境!或者测试的方案!完成让你在生产环境上搞,所以,第一次吃螃蟹的人都是勇(辣)敢(鸡)的战(苹)士(果)!
预订后的发布时间对应北京时间是几点?
这个问题,所有有预订 app 的开发者可能会有这样的疑问。从苹果官方文档中,目前获取不到答案。从经验来说,一般是北京时间 23 点时默认预定发布;当然,开发者可以在苹果后台手动选择马上发布,而跳过系统自动定时发布。那么这个预订发布时间到底是什么时间呢?
假设预订时间是: 2020-10-16
那么真实预订生效时间:2020-10-15 北京时间 22:00 生效(或 23:00 生效)
首先,我们想到的是从苹果后台网页的源码查找:
上图的时间戳 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。
这里可以直接看截图:
这是小编之前在公司内部分享《游戏出海本地化概述》的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 的账户设置里进行取消:
其它方式可以参考 官方文档,另外,如果应用是付费下载的方式,那么预订时并不会马上收取费用,在应用发布后,系统会从你的付款方式中收取费用,并且会发一封电子邮件通知你。(注:如果付费应用,在预订期间调整 App 的价格,则会在顾客接受预订的价格和发布当日的价格中,选择较低的价格向顾客收取。)
而预订的用户,在应用发布后,系统是否会自动下载到用户的设备上?如果该用户 启用自动下载,则该 App 也会下载至该用户的所有其他设备上。启用自动下载的开关如下图:
app 上线后怎么区分那些用户是预订过的?
曾经一度认为苹果的没有标识预订用户的接口,然后在苹果 营销您的 App 页面的最下面看到一段不起眼的话:
您可以通过收据中的 “preorder_date (英文)” (预订日期) 字段来识别已预订您 app 的顾客。您可以使用此信息为预订用户解锁奖励 (如额外的游戏币),或在 app 内显示感谢购买的信息。
根据苹果的文档 responseBody.Receipt,苹果提供了三个用户预约 app 时间的字段(三个不同时间格式):
字段 | 作用(英文) | 作用(中文) |
---|---|---|
preorder_date |
The time the user ordered the app available for pre-order, in a date-time format similar to ISO 8601. | 用户订购可用于预订的 app 的时间,采用类似于 ISO 8601 的日期时间格式。 |
preorder_date_ms |
The 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_pst |
The 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 收据的接口:
1 | 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 数据:
1 | [[NSString alloc] initWithData:[[NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]] base64EncodedDataWithOptions:0] encoding:NSUTF8StringEncoding] |
注:Cycript 由 Cydia 创始人 Saurik 推出的一款脚本语言,它混合了 Objective-C 与 JavaScript 语法解释器,能够探测和修改运行中的应用程序。Cycript 主要用于注入目标进程来实现运行时调试,它的优点是重启程序后所有的修改都会失效,对原生程序或代码完全无副作用。关于越狱更多知识,大家自行查阅相关资料啊,这里也不展开了。
最后,把获取到的 Receipt 数据,通过苹果的 verifyReceipt 接口验证,获取到收据的内容:
1 | { |
那么就可以获取到预订的时间:
- “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 会显示灰色的 已预订
按钮,无法点击:
然而,有一些用户就是没有开启自动下载功能,这时候,其实用户是不会自动下载的。然后因为苹果服务器应用发布生效时间只保证 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 进行评价。点击评分时,会提示“您必须拥有此项目”:
2014 年,Apple 收购了 TestFlight,所以现在苹果主力的测试分发方式改为了 TestFlight。但 TestFlight 也有明显无法满足的需求,因为苹果最终还是想让用户通过 App Store 下载 app。所以 TestFlight 发布的 app 每个版本只有 90 天测试时间,如果开发者在 90 天内没有更新,那么用户就无法从 TestFlight 中下载该应用。而已经下载到设备的 app,也会在下载之日起的第 90 天后失效。在某个版本失效或被开发者主动移除前,用户可以随意在应用的不同版本中切换,用于对比版本间的差异。
然后,目前在国区,促销代码代码也换出很多花样,变成一个第三方分发的方式。
最后,除了以上的促销代码,苹果在 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
Market with App Store 是一个非常棒的工具,让开发者快速生成需要的推广素材。生成可打开您 App Store 产品页面的短链接或嵌入式代码,并显示您的 app 图标、二维码或 App Store 徽章。
简单来说,开发者通过 Market with App Store 搜索自己的 app,然后就可以点击打开素材的页面:
Content Link 是 app 的下载链接,App Icon 点击左边的 Copy Embed
是一段 html 的代码,效果是如图一样的一个 icon 的图标,点击图标时会跳转到 app 下载链接。右边是下载当前的 icon 图标(分辨率是1000x1000,自动切成苹果的圆角)。
这个是 App Store 下载的徽章,支持白色和黑色风格,还有“下载”方案是支持多语言定义。
最后是 QR Code 二维码,支持黑色、白色、蓝色三种风格,嵌入 app 图标等。这个功能至少来说还是很方便的~
除了 app 的推广素材,还有 Books、Music、News、Podcasts、TV 等,大家有兴趣的可以自行研究哈,这里就不展开了。
其他图案和指南
为了方便开发者,在网站、电子邮件和社交媒体中展示 app,同时显示 Apple 产品图像和 App Store 徽章等。苹果在 营销资源和识别标志指南 页面里提供了很多素材下载。
App Store 徽章提供了下载和预下载的样式,App Store、Mac App Store、Apple TV 三个平台。对于素材来说,所有本地化语言都包含,下载的每个语言文件夹下有 EPS
和 SVG
二种格式的矢量图片。
苹果非常注重品牌的推广和营销,所以开发者的营销材料中使用 Apple 提供的产品图像,苹果建议始终使用 app 当前开发所针对的最新一代产品图像。在 营销资源和识别标志指南 页面还有非常多的详细规范和准则,感兴趣的朋友可以看看哈~
Apple Design Resources
在苹果 Apple Design Resources 页面,可以下载苹果的标准 UI 素材,包括 Sketch、Photoshop 和 XD 模板等格式,方便开发者快速准确地设计 app 效果图。
RSS Generator
通过这个 RSS Feed 生成工具 页面,可能获取 App Store 榜单的应用排名情况,并且是有 Feed 链接可以获取数据,大家有兴趣可以看看。
2.10 iOS 和 iPadOS 的使用情况
在 App Store - 支持 页面,苹果提供了最新的 iOS 和 iPadOS 的占比数据:
通过这个数据,可以了解到最新的占比。当然对于不同的地区或者国家,不同的 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 秘密,分享您的开发者故事,就是最大的秘密!获取推荐,最终带来大量的新增用户是非常可观的方式,具体大家可以通过 欢迎告诉我们 了解更多。
最后,我们主要是来说说,假如被苹果推荐后,经常会有同学这样问到,这些素材通过什么方式给苹果呢? 格式和标准尺寸是怎么样?
如果 app 被推荐,苹果会在 App Store Connect 开放对应的入口 Promotional Artwork
,因为苹果的推荐位有很多种类型,具体可以查看这个 文件的格式 文档。
特别说一下,苹果推荐目前是没有分级或者分账号显示不同的内容,所有的账号显示的推荐内容是一样的。所以,一般最好是老少皆宜的内容,推广素材需要特别注意,举例来说:
详细可以参考这个 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 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