SwiftyiRate Github

SwiftyiRate Swift语言实现的app内评分,简单易用。

  1. Requirements
  2. Integration
  3. Usage
  4. Configuration
  5. Advanced properties
  6. Methods
  7. Delegate methods
  8. Localisation
  9. Example Projects
  10. Advanced Example
  11. Release Notes

Requirements

  • iOS 7.0+
  • Xcode 7

Integration

CocoaPods (iOS 8+)

你可以使用 Cocoapods 来安装 SwiftyiRate,添加pod

pod 'SwiftyiRate'

Podfile:

platform :ios, '8.0'
use_frameworks!

target 'MyApp' do
    pod 'SwiftyiRate', :git => 'https://github.com/PlayApple/SwiftyiRate.git'
end

Usage

Initialization

Add code in AppDelegate.swift

import SwiftyiRate
override class func initialize () {
    //configure iRate
    SwiftyiRate.sharedSwiftyiRate.daysUntilPrompt = 5
    SwiftyiRate.sharedSwiftyiRate.usesUntilPrompt = 15
}

Configuration


SwiftyiRate类里面所有可配置的参数和接口全部列举在下面:

var appStoreID: Int?

这个必须匹配你的app apple id( iTunes Connect后台中app详情下可以看到),通常情况下你无需自己设置该id,SwiftyiRate会通过网络自动从app store获取app具体数据。无网络或者app未上架则无法获取。(此时可以通过设置为其他已经上线的app id用于测试)

var appStoreGenreID: Int?

app类型id,用于区分app为应用还是游戏类型,从而显示不同的rate信息提示框。自动从app store获取app具体数据,无需自己设置。

var appStoreCountry: Int?

两个字母的设备国家码,用于本地化语言,默认读取手机所在地区。如果你想永远出现固定国家语言,则可以修改你想要的国家代码。

var applicationName: String

app名称,默认读取自info.plist。你可以自定义为其他名称。

var applicationBundleID: String?

app的bundle ID,用于获取appStoreID和appStoreGenreID,默认读取自info.plist。无需自行修改。(除非你是测试情况下)。

var daysUntilPrompt: Float

至少使用天数,距离用户首次启动app超过该天数,才会提示用户评分。支持小数,0.5表示12小时。默认值:10。

var usesUntilPrompt: Int

至少使用(启动)次数,防止长时间未使用app,启动app后就出现评分情况。至少使用天数和至少使用(启动)次数同时满足才会提示用户评分。默认值10次。

var eventsUntilPrompt: Int

可提示事件次数,应用或者游戏在某一个使用场景下适合提示用户评分的话,你可以记录一次事件,类似usesUntilPrompt,至少使用天数和可提示事件次数同时满足才会提示用户评分。默认值10次。

var usesPerWeekForPrompt: Float

平均每次使用app次数,注意SwiftyiRate会计算app总使用次数除以距离安装的时间来计算每周使用平均值,只有超过这个值,才会允许评分,长时间不使用app,可能计算出来的平均每周次数为0。默认值0。

var remindPeriod: Float

下一次提示玩家的周期天数,玩家选择稍后提醒后,下一次提示的间隔天数。默认值1天。

var messageTitle: String

评分对话框的标题,如果你不想出现标题,可以设置为空字符串。

var message: String

评分对话框的文本信息,注意不要设置特别长(体验不好)。如果你不想出现文本信息,可以设置为空字符串。

var updateMessage: String  

该文本信息用于新版本中已经在旧版本中评分过的用户,默认值用的message的值。

var cancelButtonLabel: String

评分对话框中取消评分按钮标题

var rateButtonLabel: String

评分对话框中前往评分按钮标题

var remindButtonLabel: String

评分对话框中稍后提示按钮标题,设置为空字符串则不出现该按钮。

var useAllAvailableLanguages: Bool

支持本地化语言,不管你是否已经本地化了app,SwiftyiRate默认会使用SwiftyiRate.bundle下语言包,

如果你希望使用自己的本地化文件,请设置为false。默认值为true(所使用的本地化key下面有介绍)

var promptForNewVersionIfUserRated: Bool

每个新版本都提示用户评分,由于app store会清空新版的评分,所以默认下SwiftyiRate每个版本都会提示用户评分,直到用户选择了拒绝评分。默认值false

var onlyPromptIfLatestVersion: Bool

仅在最新版本中提示用户评分,默认为true。设置为false的话,如果用户未使用最新版本,也会提示用户评分。

var onlyPromptIfMainWindowIsAvailable: Bool

mac app的提示框设置,该功能开发中…

var promptAtLaunch: Bool

是否启动app就提示用户评分(满足条件下),如果你设置为false,启动app时候不会弹出评分框,但是评分条件会继续执行并跟踪。你可以使用该选择自定义一些自己的评分框弹出时机和方式。默认值:true

var verboseLogging: Bool

是否打印log到Xcode控制台,默认false。release版注意设置为false。

var previewMode: Bool

预览模式,如果设置为true,在promptAtLaunch=true情况下会忽略弹出条件,直接弹出用户评分框,你可以用于测试。release版本注意设置为false,默认值false。

Advanced properties


如果SwiftyiRate默认规则和UI不满足你的要求,你可以通过下面的delegate协议和内部状态实现自定义。

var ratingsURL: NSURL?

app的评分网址,自动获取。

var firstUsed: NSDate?

app首次启动时间,用于daysUntilPrompt规则。

var lastReminded: NSDate?

最近一次提示用户评分的时候,用于再次提示用户。

var usesCount: Int

app启动次数

var eventCount: Int

已经记录了可触发评分事件的次数

var usesPerWeek: Float

用户平均每周使用次数

var declinedThisVersion: Bool

用户点击了取消(拒绝)评分按钮,SwiftyiRate不使用该属性,如果你自定义逻辑,可能会需要。

var declinedAnyVersion: Bool

是否拒绝任何版本的评分,如果你设置为true,SwiftyiRate将永远不会主动提示用户评分。默认false

var ratedThisVersion: Bool

标记用户是否已经评论了该版本

var ratedAnyVersion: Bool

标记用户是否评分了任何版本

weak var delegate: SwiftyiRateDelegate?

代理协议,如果你使用SwiftyiRate帮你管理评分,你无需设置。如果你希望自定义,可以实现该代理协议。后面文档会介绍。

Methods


除了上面的一些属性,SwiftyiRate还有下面一些方法

func logEvent(deferPrompt: Bool)

记录可评分事件次数,你可以在app中调用该方法,用于记录可评分事件次数,deferPrompt为true在满足条件情况下,下次启动app时弹出评分。deferPrompt为false则满足条件就立刻弹出提示。

func shouldPromptForRating() -> Bool

是否满足评分条件,如果执行了该方法则将不会执行iRateShouldPromptForRating delegate

func promptForRating()

该方法将立即显示评级提示框没有检查,如果App Store可访问并且没有调用SwiftyiRateShouldPromptForRating,如果你想修改调用该方法的时机,你可以修改其他相关属性或者直接修改promptIfNetworkAvailable 方法

func promptIfNetworkAvailable()

该方法用于检测app在app store是否有效,SwiftyiRateShouldPromptForRating协议方法会先被调用,所以你可以拦截该检测。如果app未上架,你需要手工设置appStoreID 否则该检测会失败。

func promptIfAllCriteriaMet()

如果所有条件都满足,则会弹出评分。SwiftyiRateShouldPromptForRating会先执行,你也可以拦截。

func openRatingsPageInAppStore()

用户正在打开评分网址,会先执行iRateShouldOpenAppStore 函数,如果你实现了该协议且返回false,则不会打开网址,此时你需要自己打开网址。如果打开成功会执行iRateDidOpenAppStore,打开失败会执行 iRateCouldNotConnectToAppStore

Delegate methods


的SwiftyiRateDelegate协议提供了下面的方法,可用于拦截SwiftyiRate事件和重写默认行为。所有的方法都是可选的。

optional func iRateCouldNotConnectToAppStore(error: NSError)

SwiftyiRate无法连接到app store,导致原因可能是无网络、app id不正确。

optional func iRateDidDetectAppUpdate()

SwiftyiRate检测到对比上一次启动时间,本次启动的app已经被更新。

optional func iRateShouldPromptForRating() -> Bool

已经满足条件,是否提示用户评分,返回ture则显示提示框。你可以通过该方法,拦截默认提示框,实现自定义提示逻辑。

optional func iRateDidPromptForRating()

已经显示了评分提示框,你可以在此方法中记录评分数据,用于数据统计分析用户评分比例。

optional func iRateUserDidAttemptToRateApp()

用户点击了前往评分按钮。该方法仅在SwiftyiRate默认行为下被调用。如果你自定义了逻辑或者使用了openRatingsPageInAppStore拦截,该协议方法不会被执行。

optional func iRateUserDidDeclineToRateApp()

用户点击了取消(拒绝)评分按钮,该方法仅在SwiftyiRate默认行为下被调用。你可以在此方法中记录评分数据,用于数据统计分析用户评分比例。

optional func iRateUserDidRequestReminderToRateApp()

用户点击了稍后评分按钮,该方法仅在SwiftyiRate默认行为下被调用。你可以在此方法中记录评分数据,用于数据统计分析用户评分比例。

optional func iRateShouldOpenAppStore() -> Bool  

SwiftyiRate将要尝试打开app store,你可以返回false用户拦截该行为。从而实现自定义逻辑。

optional func SwiftyiRateDidOpenAppStore()

SwiftyiRate已经打开了App Store评分网址

Localisation


SwiftyiRate默认使用SwiftyiRate.bundle来实现字符串本地化为多种语言。

下面是SwiftyiRate 字符串 key:

private static let SwiftyiRateMessageTitleKey = "iRateMessageTitle"
private static let SwiftyiRateAppMessageKey = "iRateAppMessage"
private static let SwiftyiRateGameMessageKey = "iRateGameMessage"
private static let SwiftyiRateUpdateMessageKey = "iRateUpdateMessage"
private static let SwiftyiRateCancelButtonKey = "iRateCancelButton"
private static let SwiftyiRateRemindButtonKey = "iRateRemindButton"
private static let SwiftyiRateRateButtonKey = "iRateRateButton"

如果你希望SwiftyiRate使用自己的本地化文件,你可以设置useAllAvailableLanguages 为false,然后添加上面的key到自己的本地化文件。

请不要直接修改SwiftyiRate.bundle,防止更新SwiftyiRate的时候出现数据丢失。

当然你可以直接修改SwiftyiRate所有字符串内容。

override class func initialize () {
    // overriding the default SwiftyiRate strings
    SwiftyiRate.sharedSwiftyiRate.messageTitle = NSLocalizedString("kMessageTitle", comment: "iRate message title")
    SwiftyiRate.sharedSwiftyiRate.message = NSLocalizedString("kMessage", comment: "iRate message")
    SwiftyiRate.sharedSwiftyiRate.cancelButtonLabel = NSLocalizedString("kCancelButtonLabel", comment: "Decline Button")
    SwiftyiRate.sharedSwiftyiRate.remindButtonLabel = NSLocalizedString("kRemindButtonLabel", comment: "Remind Button")
    SwiftyiRate.sharedSwiftyiRate.rateButtonLabel = NSLocalizedString("kRateButtonLabel", comment: "Rate Button")
}

Example Projects

所有的示例工程都设置了previewMode为true,所以会出现一启动就提示评分情况。

Advanced Example

高级示例用于测试SwiftyiRateDelegate和自定义逻辑

Release Notes

Version 1.0

  • Initial release.

SwiftyiRate中文说明的更多相关文章

  1. win10 环境 gitbash 显示中文乱码问题处理

    gitbash 是 windows 环境下非常好用的命令行终端,可以模拟一下linux下的命令如ls / mkdir 等等,如果使用过程中遇到中文显示不完整或乱码的情况,多半是因为编码问题导致的,修改 ...

  2. 网页提交中文到WEB容器的经历了些什么过程....

    先准备一个网页 <html><meta http-equiv="Content-Type" content="text/html; charset=gb ...

  3. opencv在图像显示中文

    在图像定位和模式识别时,经常需要把结果标注到图片上,标注内容可以是数字字母.矩形框等(opencv支持的)或者是中文汉字(借助freetype). 1.显示数字/矩形框 #include <op ...

  4. solr服务中集成IKAnalyzer中文分词器、集成dataimportHandler插件

    昨天已经在Tomcat容器中成功的部署了solr全文检索引擎系统的服务:今天来分享一下solr服务在海量数据的网站中是如何实现数据的检索. 在solr服务中集成IKAnalyzer中文分词器的步骤: ...

  5. Windows server 2012 添加中文语言包(英文转为中文)(离线)

    Windows server 2012 添加中文语言包(英文转为中文)(离线) 相关资料: 公司环境:亚马孙aws虚拟机 英文版Windows2012 中文SQL Server2012安装包,需要安装 ...

  6. java中文乱码解决之道(一)-----认识字符集

    沉寂了许久(大概有三个多月了吧),LZ"按捺不住"开始写博了! java编码中的中文问题是一个老生常谈的问题了,每次遇到中文乱码LZ要么是按照以前的经验修改,要么则是baidu.c ...

  7. Sublime Text 3中文乱码解决方法以及安装包管理器方法

    一般出现乱码是因为文本采用了GBK编码格式,Sublime Text默认不支持GBK编码. 安装包管理器 简单安装 使用Ctrl+`快捷键或者通过View->Show Console菜单打开命令 ...

  8. MAC下 mysql不能插入中文和中文乱码的问题总结

    MAC下 mysql不能插入中文和中文乱码的问题总结 前言 本文中所提到的问题解决方案,都是基于mac环境下的,但其他环境,比如windows应该也适用. 问题描述 本文解决下边两个问题: 往mysq ...

  9. 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇一:WPF常用知识以及本项目设计总结

    篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblog ...

随机推荐

  1. vue2.0+ 从插件开发到npm发布

    vue: V2.5.11 此篇尽量详细,清楚的讲解vue插件的开发到npm的发布,想想将你自己做的东西展示给广大"网民",心里还是有点小激动的...-^_^ 先上一下插件效果图-- ...

  2. UltraISO安装centos7系统

    1. 使用最新版UltraISO将ISO镜像刻录到U盘一定要是最新版,试用版都可以,按下图操作: 2. U盘启动电脑进入安装界面正常情况下你应该会看到下面的这个界面: 选择第一项,然后按TAB键(在评 ...

  3. PHP 实例 AJAX 与 MySQL

    AJAX 数据库实例 下面的实例将演示网页如何通过 AJAX 从数据库读取信息: 实例   Person info will be listed here... 实例解释 - MySQL 数据库 在上 ...

  4. 实验与作业(Python)-02 Python函数入门与温度转换程序

    截止日期 实验目标 学会定义函数,使用函数.学会导入在某个文件中定义的函数. input获得值,然后通过eval或者int.float将其转换为相应的类型. 学会使用列表:访问列表.append.遍历 ...

  5. SQL Server 虚拟化(2)——理想的SQL Server虚拟机架构

    本文属于SQL Server虚拟化系列 搭建SQL Server虚拟机,在各个组织之间都有自己的标准和最佳实践.从第一眼看去,光物理配置就有过百种,所有的这些细微差别都有可能为后续日常管理过程中故障侦 ...

  6. chrome浏览器不兼容jQuery Mobile问题解决

    最近在学习jQuery Mobile.第一次运行例子的时候发现chrome总是等待,查看后台报错.错误如下所示: 最后在stackoverflow上找到一个解决方案:将以下代码放在 jquery.mo ...

  7. 计算机网络之IP协议族

    网际协议IP 与IP协议配套使用的还有三个协议: 地址解析协议 ARP   (Address Resolution Protocol) 网际控制报文协议 ICMP  (Internet Control ...

  8. Android TV开发总结(三)构建一个TV app的焦点控制及遇到的坑

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52835829 前言:上篇中,&l ...

  9. PHP学习(3)—在HTML中嵌入PHP

    我们以一个提交订单和显示订单信息的例子为学习PHP的开始.这个例子包含两个文件.一个提交订单的html文件:orderform.html,一个显示订单信息的php文件:processorder.php ...

  10. 设置 NSZombieEnabled 定位 EXC_BAD_ACCESS 错误

    我们做 iOS 程序开发时经常用遇到 EXC_BAD_ACCESS 错误导致 Crash,出现这种错误时一般 Xcode 不会给我们太多的信息来定位错误来源,只是在应用 Delegate 上留下像 T ...