在ios 10.3之后,系統(tǒng)提供了一個(gè)SKStoreReviewController類(lèi)盛险,可以幫助在app內(nèi)部實(shí)現(xiàn)評(píng)價(jià)。App實(shí)現(xiàn)評(píng)價(jià)一般有下面幾種方式。
調(diào)用方式一:代碼直接調(diào)用
[SKStoreReviewController requestReview];
這種方式屬于程序內(nèi)評(píng)價(jià)性湿。
實(shí)現(xiàn)效果如下:
點(diǎn)贊之后效果如下:
調(diào)用方式二:支持deep link調(diào)用。在app 鏈接地址后面拼上action=write-review满败。
這種方式可以實(shí)現(xiàn)程序內(nèi)評(píng)價(jià)肤频。
調(diào)用方式三:App 跳轉(zhuǎn)。
NSURL *url = [NSURL URLWithString:@"itms-apps://itunes.apple.com/cn/app/jie-zou-da-shi/id493901993?mt=8"];
[[UIApplication sharedApplication] openURL:url];
屬于傳統(tǒng)評(píng)價(jià)方法算墨。
最終效果如下(先跳轉(zhuǎn)到App Store應(yīng)用->打開(kāi)對(duì)應(yīng)app ->模態(tài)出評(píng)論點(diǎn)贊界面):
在SKStoreReviewController出來(lái)以前我們都是通過(guò)跳轉(zhuǎn)App Store實(shí)現(xiàn)評(píng)價(jià)app 功能宵荒。實(shí)現(xiàn)方式如調(diào)用方式三。那是否意味著在10.3之后我們就一定要用SKStoreReviewController來(lái)取代之前實(shí)現(xiàn)嗎净嘀?為了解答這個(gè)問(wèn)題报咳,我們先分析各自利弊。
SKStoreReviewController的優(yōu)勢(shì):
1挖藏,用戶(hù)體驗(yàn)好(人性化)暑刃。
2,調(diào)用簡(jiǎn)單(如調(diào)用方式一)膜眠。
3稍走,支持deep link(比較贊)。
SKStoreReviewController的劣勢(shì):
1,調(diào)用方式一蘋(píng)果有限制柴底。
/** Request StoreKit to ask 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 appropriate for use
* from a button or any other user action. For presenting a write review form, a deep link is
* available to the App Store by appending the query params "action=write-review" to a product URL.
*/
+ (void)requestReview;
有個(gè)細(xì)節(jié)大家需要注意在測(cè)試的時(shí)候發(fā)現(xiàn) “提交”按鈕不能用婿脸。這里有
官方文檔說(shuō)明:
"When you call this method while your app is still in development mode, a rating/review request view is always displayed so that you can test the user interface and experience. However, this method has no effect when you call it in an app that you distribute using TestFlight."
就是說(shuō)測(cè)試的時(shí)候需要用TestFlight 測(cè)試。
2柄驻,調(diào)用方式一蘋(píng)果限制開(kāi)發(fā)者在一年最多只能向用戶(hù)調(diào)用三次評(píng)分UI狐树。但是蘋(píng)果文檔沒(méi)找到鏈接。
參考
3鸿脓,調(diào)用方式一雖然簡(jiǎn)單抑钟,但需要有網(wǎng)絡(luò)涯曲,如果沒(méi)有網(wǎng)絡(luò)調(diào)用不起作用(不會(huì)彈出UI)。
4在塔,調(diào)用方式一幻件,雖然可以給app打分,但是不能給app寫(xiě)評(píng)價(jià)語(yǔ)蛔溃。
程序內(nèi)評(píng)價(jià)UI的一些特性
1绰沥,程序內(nèi)評(píng)價(jià)UI呈現(xiàn)出來(lái)的UI顯示的優(yōu)先級(jí)比較高。
評(píng)論UI喚起的時(shí)候贺待,有一個(gè)蒙層蓋在它下面的view上徽曲。如上圖中紅色的button就不能點(diǎn)。只能點(diǎn)擊“Not Now”或者“星星”來(lái)消失這個(gè)UI麸塞。
2秃臣,程序內(nèi)評(píng)價(jià)UI是一個(gè)窗體級(jí)的UI,有點(diǎn)類(lèi)似UIAlertView哪工。
為了驗(yàn)證奥此,請(qǐng)看下面測(cè)試代碼。當(dāng)彈出評(píng)論UI的時(shí)候雁比,我再模態(tài)出一個(gè)控制器(背景灰色)
-(void)test{
NSLog(@"touch");
if (self.presentingViewController) {
[self dismissViewControllerAnimated:YES completion:NULL];
}else{
[SKStoreReviewController requestReview];
[self performSelector:@selector(present) withObject:nil afterDelay:10];
}
}
- (void)present{
ViewController *vc =[[ViewController alloc] init];
vc.view.backgroundColor = [UIColor colorWithRed:0.3 green:0.3 blue:0.3 alpha:0.5];
[self presentViewController:vc animated:NO completion:NULL];
}
具體效果(評(píng)論UI顯示后得院,后面模態(tài)出來(lái)一個(gè)灰色的view(控制器))如下:
根據(jù)效果可以推測(cè),評(píng)論UI不是簡(jiǎn)單模態(tài)出來(lái)章贞,如果是模態(tài),我們后面模態(tài)出來(lái)的view 應(yīng)該能夠蓋住評(píng)論UI非洲。評(píng)論UI是一個(gè)窗體級(jí)的UI(和UIAlertView有點(diǎn)相似鸭限,但是UIAlertView是蓋在評(píng)論UI上面的)。
補(bǔ)充截圖:
彈出評(píng)論UI前后視圖層級(jí)對(duì)比(多了好幾個(gè)window):
沒(méi)有彈出評(píng)論UI
彈出評(píng)論UI后