SKStoreReviewController 使用中的坑

应用中都或多或少地会引导用户去进行应用评论,常用的方法大概有以下几种:

(1)使用deep link。在app地址链接后边拼接上action=write-review可以直接跳转到App Store应用中对应的应用评价界面进行评价.

.

(2) 使用SKStoreReviewController。在iOS10.3之后,iOS 提供了一种新的评价方式,可以不用跳转出应用在应用内就完成应用的星级评价以及文字评价.在api文档里,该类只有一个方法,看上去使用很简单.但是坑点还是挺多,

2.1 调用了该方法不一定会有弹窗供用户交互操作

从这段说明里,我们就看出官方给出的主意点:

  • 该方法在iOS 10.3之后才可以使用,所以在使用时需要进行版本控制;
  • 这个方法主要用于申请用户评分,但这个方法不一定会显示UI,也就是说即使你调用了该方法也不一定会有评级弹窗显示,最终是否有显示主要有App Store的相关政策决定,所以这个方法不适用于任何来自按钮或者其他用户直接交互的操作;
  • 在开发模式下,调用该方法一定会展示UI弹窗以供开发测试(不过提交按钮在开发模式下不能提交文本提交),但是如果你使用了TestFlight进行测试,会发现调用该方法没有任何反应;
  • 当调用这个方法进行用户评价时,交互的全过程由系统进行控制(这一交互的整个过程,不允许自定义进行控制).

2.2 如果在一次启动中多次出发了该方法,且没有出现交互UI,会咋样?

在正常情况下,应用的主要有两个window,UIWindow对象只要防止基本视图,UITextEffectsWindow主要用来出来键盘的输入视图.

在第一次正常弹出评价视图时,视图层发生了变化:
 

 

  • 应用层对出了一个UITextEffectsWindow对象和UIRemoteKeyboardWindow对象.UITextEffectsWindow这个对象主要是用来展示评价层UI的,而UIRemoteKeyboardWindow很有可能是一个新的输入层(因为UITextEffectsWindow在视图最前边,所以原来的输入层不能正常显示,需要新的输入层来为评价层评价提供输入源).尤其需要注意的是UITextEffectsWindow视图层上还有_UITextEffectsRemoteView对象,而这个对象的userInteractionEnabled属性是NO,所以只要这个层存在,视图是无法与界面进行交互的.
  • 在用户完成了评价操作之后,UITextEffectsWindow视图层上的_UITextEffectsRemoteView对象会被移除,所以用户与界面的交互可以正常进行.

如果在第一次弹出之后,又调用了一次[SKStoreReviewController requestReview]该方法,有可能会不弹出任何交互UI,同时我们发现与界面所有的交互都没有反应了.这是为什么呢?

  • 查看一下视图层级之后,我们发现视图没有发生变化,但是由于没有交互UI的显示,所以UITextEffectsWindow视图层上的_UITextEffectsRemoteView对象在最上面遮挡了界面上的所有元素,也就无法进行界面的交互.

结论:

 

  1. 该功能只能在iOS10.3之后使用;
  2. 调用该方法在开发模式下可以弹出交互界面,但是不能进行进行信息提交;在TestFlight模式下,调用该方法不会有任何相应;
  3. 在评价功能内部流程由系统根据App Store策略进行确定;
  4. 尽量确保应用在应用的一次启动过程中,控制调用[SKStoreReviewController requestReview]方法的次数不超过一次.否则有可能会造成界面上所有的交互无法响应事件.
  5. 据说同一用户在同一个应用内每年只能提交三次评论,超出次数之后调用该方法就不会有任何反应,但未找到官方文档说明.

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值