应用中都或多或少地会引导用户去进行应用评论,常用的方法大概有以下几种:
(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对象在最上面遮挡了界面上的所有元素,也就无法进行界面的交互.
-
该功能只能在iOS10.3之后使用;
-
调用该方法在开发模式下可以弹出交互界面,但是不能进行进行信息提交;在TestFlight模式下,调用该方法不会有任何相应;
-
在评价功能内部流程由系统根据App Store策略进行确定;
-
尽量确保应用在应用的一次启动过程中,控制调用[SKStoreReviewController requestReview]方法的次数不超过一次.否则有可能会造成界面上所有的交互无法响应事件.
-
据说同一用户在同一个应用内每年只能提交三次评论,超出次数之后调用该方法就不会有任何反应,但未找到官方文档说明.
只能通过APP内部打开网页形式,跳转到App
Store
直接编辑评论。在评分页面,可以评分和评价,评论更有价值。缺点是跳转到App
Store
,用户的操作场景的转换,会造成部分用户
使用
的困扰,可能需要花费较长的等待时间,甚至加载失败等,造成评价数量少。
iOS10.3+:
APP内评分机制是iOS 10.
extern "C"{
void _ScoreApp(const char * MyAppId){
if([
SK
Store
Re
viewController
respondsToSelector:@selector(requestReview)]){
[
SK
Store
Re
viewController
requestReview];
}else{
NSString * nsStringToOpen...
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIImageView *imageView ...
在iOS 10.3出现之前,App实现评价方式一般有两种:
(一)deep link调用。在app 链接地址后面拼上action=write-review这种方式可以实现程序内评价;
(二)App跳转。
NSURL*url=[NSURLURLWithString:
@"itms-apps://itunes.apple.com/cn/app...
Allow Users to Provide Ratings From Within Your App
在iOS 10.3之后,系统提供了一个
SK
Store
Re
viewController
类,可以帮助在app内部实现评价。App实现评价的调用方式如下:
调用方式:[
SK
Store
Re
viewController
requestReview];效果图官方注解讨论Although you shoul
App
Store
评分方式1. 通过openURL直接打开App
Store
无版本限制,可以直接跳转到评论界面。在评分页面,可以评分和评价,评论更有价值。缺点是跳转到App
Store
,需要登录,用户的操作场景的转换,会造成部分用户
使用
的困扰,可能需要花费较长的等待时间,甚至加载失败等,造成评价数量少。
12. 模态展示APP详情页iOS6+,应用内present一个控制器,展示的是APP详情
/** Request
Store
Kit to a
sk
the user for an app review. This may or may not show any UI.
* Given this may not succussfully present an alert to the user, it is not appro...
今天没事查看了下iOS 10.3 的变更功能。发现Apple修改了Review机制,提供App内直接Review弹窗。
SK
Store
Re
viewController
.requestReview()如果没有网络则无任何反应。
据说有调用次数限制,不过API
中
没有提到,我测试也没有触发这个现象。看了API说明的话,有人可能注意到了,这句话:available to the App
Store
by a
SwiftyRate
一个简单的助手,用于显示具有相似规则和行为的
SK
Store
Re
viewController
(iOS 10.3或更高版本)或自定义UIAlertController。
iOS 9.3以上
迅捷5.0+
是Cocoa项目的依赖项管理器。 只需在Pod文件
中
添加以下行,即可安装Pod
pod 'SwiftyRate'
迅捷软件包管理器
Swift软件包管理器是用于自动分发Swift代码的工具,并且已集成到swift编译器
中
。
要将swift包添加到项目
中
,只需在xCode
中
打开项目,然后单击File> Swift Packages> Add Package Dependency。 然后输入https://github.com/crashoverride777/swifty-rate.git作为存储库URL,然后完成设置向导。
另外,如果您有一个
程序内评价之
SK
Store
Re
viewController
在ios 10.3之后,系统提供了一个
SK
Store
Re
viewController
类,可以帮助在app内部实现评价。App实现评价一般有下面几种方式。
#import