亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

你一定不知道的 AppStore 秘密

標簽:
iOS

一、前言

对于 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,用户无法打开的问题:

https://img4.sycdn.imooc.com/610fd9830001c55312840783.jpg

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

https://img4.sycdn.imooc.com/610fd984000134a623841582.jpg

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

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

https://img2.sycdn.imooc.com/610fd985000165dd04340233.jpg

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

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

https://img1.sycdn.imooc.com/610fd9940001052205900636.jpg

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

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

开发者系统状态

https://img4.sycdn.imooc.com/610fd9bf0001a33412090817.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.

https://img4.sycdn.imooc.com/610fd9c00001517504810337.jpg

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

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

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

https://img2.sycdn.imooc.com/610fd9c0000133a825421488.jpg

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

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

https://img3.sycdn.imooc.com/610fd9c30001d63711840691.jpg

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

https://img1.sycdn.imooc.com/610fd9c30001df6a10560347.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:

https://img2.sycdn.imooc.com/610fd9c3000123fe19340894.jpg

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

https://img1.sycdn.imooc.com/610fd9c400015b6824720908.jpg

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

App Store 开发者页面

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

https://img3.sycdn.imooc.com/610fd9c60001197a36441978.jpg

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

https://img1.sycdn.imooc.com/610fd9c70001452422280686.jpg

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

2.4 App 评论

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

https://img3.sycdn.imooc.com/610fd9c8000184e521580606.jpg

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

https://img3.sycdn.imooc.com/610fd9ca00018acd30601268.jpg

App内评分功能注意事项

  • 仅支持 iOS 10.3+ 以上

  • 评分弹窗是标准化,不提供自定义UI或控制评分功能

  • 开发环境每次调用都会显示评分界面

  • TestFlight 环境不会显示评分界面

  • 生产环境一个用户账号最多显示3次/365天

  • 生产环境如果已经评论成功,再调用不会再弹

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

https://img4.sycdn.imooc.com/610fd9cb0001fc8e30721202.jpg

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

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

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

https://img1.sycdn.imooc.com/610fd9cc000188a217740340.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亿用户推荐,和动画一模一样的《斗罗大陆:魂师对决》7月22日正式公测!下载与万千魂师即刻对决!

        ...

        ...

        ",

"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 时再下载 或 直接使用蜂窝网络下载:

https://img1.sycdn.imooc.com/610fd9f50001f28721880992.jpg

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

https://img3.sycdn.imooc.com/610fd9f600010d6818820680.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 生效)

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

https://img3.sycdn.imooc.com/610fd9f70001927226402062.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。

这里可以直接看截图:

https://img1.sycdn.imooc.com/610fd9f80001364b29381662.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 的账户设置里进行取消:

https://img1.sycdn.imooc.com/610fd9f90001e36d23661240.jpg

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

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

https://img4.sycdn.imooc.com/610fd9fa0001015a22760994.jpg

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

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

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

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

https://img2.sycdn.imooc.com/610fda0b0001a49a08090457.jpg

如果大家熟悉 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 会显示灰色的 已预订 按钮,无法点击:

https://img1.sycdn.imooc.com/610fdb460001a47a23901138.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 进行评价。点击评分时,会提示“您必须拥有此项目”:

https://img1.sycdn.imooc.com/610fdb490001a26719760760.jpg

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

https://img1.sycdn.imooc.com/610fdb4a0001efe743742002.jpg

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

https://img1.sycdn.imooc.com/610fdb4e0001496623840672.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

https://img3.sycdn.imooc.com/610fdb4f0001d77a25321118.jpg

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

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

https://img2.sycdn.imooc.com/610fdb5000014b1d28621166.jpg

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

https://img2.sycdn.imooc.com/610fdb510001c93b24380910.jpg

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

https://img1.sycdn.imooc.com/610fdb5200013f2526821220.jpg

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

https://img2.sycdn.imooc.com/610fdb530001aec427701110.jpg

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

其他图案和指南

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

https://img3.sycdn.imooc.com/610fdb540001441a26581092.jpg

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

https://img1.sycdn.imooc.com/610fdb580001b43934503074.jpg

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

Apple Design Resources

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

https://img3.sycdn.imooc.com/610fdb5b0001af0143861436.jpg

RSS Generator

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

https://img2.sycdn.imooc.com/610fdb5e0001dbbd21781548.jpg

2.10 iOS 和 iPadOS 的使用情况

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

https://img3.sycdn.imooc.com/610fdb600001aa9433301680.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 秘密,分享您的开发者故事,就是最大的秘密!获取推荐,最终带来大量的新增用户是非常可观的方式,具体大家可以通过 欢迎告诉我们 了解更多。

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

https://img4.sycdn.imooc.com/610fdb630001f6f114962329.jpg

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

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

https://img4.sycdn.imooc.com/610fdb640001fa2517641416.jpg

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

三、总结

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

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

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

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


作者:37手游iOS技术运营团队


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消