它將不會收到任何以後的更新或錯誤修復。如果您正在使用它,請遷移到另一個解決方案。
Irate是一個庫,可通過提示用戶在使用該應用程序幾天后對用戶進行評分來幫助您推廣iPhone和Mac App Store應用程序。這種方法是通過僅針對普通用戶(大概喜歡該應用程序,或者他們不會繼續使用它)來獲得正面應用程序評論的最佳方法之一。
注意:“支持”意味著該庫已通過此版本進行了測試。 “兼容”意味著該庫應在此OS版本上使用(即它不依賴於任何不可用的SDK功能),但不再對兼容性進行測試,並且可能需要調整或錯誤修復才能正確運行。
從1.7版開始,憤怒需要弧線。如果您想在非ARC項目中使用IRATE,只需將-FOBJC-ARC編譯器標誌添加到Irate.m類。為此,請轉到目標設置中的“構建階段”選項卡,打開編譯源組,雙擊列表中的iRate.m,然後輸入-fobjc-arc中的copover。
如果您希望將整個項目轉換為ARC,請在iRate.m中註釋#Error行,然後運行編輯>重構>轉換為Xcode中的objection-c arc ...檢查(包括iRate.m)的使用弧。
憤怒使用內部使用線程來避免阻止UI,但是憤怒的外部接口都不是線程安全,除了主線程外,您不應調用任何方法或設置Irate上的任何屬性。
要將iRate安裝到您的應用中,請將iRate.h,.m和.bundle Files拖到項目中。如果您對本地化文本不感興趣,則可以省略.Bundle。
Irate通常根本不需要配置,並且只需使用應用程序的捆綁包ID即可自動運行。
注意:如果您在Mac和iOS App商店上都有具有匹配捆綁ID的應用程序(即使它們使用不同的資本化),查找機制將無法正常工作,因此您需要手動設置AppStoreID屬性,這是一個設置應用程序後,可以在iTunes Connect中找到的數字ID。另外,如果要創建一個沙盒Mac應用程序,並且您的應用程序不請求網絡訪問權限,則需要設置AppStoreID,因為它無法從iTunes服務中檢索。
如果您確實想自定義憤怒,那麼最好的時間是在您的AppDelegate的-[application:didFinishLaunchingWithOptions:]
方法中。以後應用配置可能不起作用,因為該提示可能已經顯示了這一點:
#import "iRate.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//configure iRate
[iRate sharedInstance].daysUntilPrompt = 5;
[iRate sharedInstance].usesUntilPrompt = 15;
return YES;
}
為了配置憤怒,憤怒類的許多屬性可以改變憤怒的行為和外觀。這些應該主要是自我解釋的,但是它們在下面記錄在下面:
@property (nonatomic, assign) NSUInteger appStoreID;
這應該匹配應用程序的iTunes應用ID,設置應用程序後可以從iTunes連接中獲得。此值通常不是必需的,通常只有在您在Mac和iOS應用程序的捆綁ID之間或SandBoxed Mac應用程序之間存在上述衝突,如果您的應用程序沒有網絡許可,則需要此值。能夠使用iTunes服務自動獲取AppStoreID。
@property (nonatomic, assign) NSUInteger appStoreGenreID;
這是用於確定評級對話框的默認文本的應用類型。這是通過調用iTunes服務自動設置的,因此您無需為大多數目的手動設置它。如果您確實希望覆蓋此值,則將其設置為iRateAppStoreGameGenreID
常數將導致Irate使用評級對話框的“遊戲”版本,並將其設置為任何其他值,將使用評級對話框的“應用程序”版本。
@property (nonatomic, copy) NSString *appStoreCountry;
這是用於指定要檢查哪個iTunes存儲的兩個字母的國家代碼。它是從設備語言環境首選項中自動設置的,因此在大多數情況下不需要更改。如果您願意,您可以將其覆蓋以指向美國商店或其他特定商店,如果您的應用僅在某些國家 /地區可用,這可能是一個好主意。
@property (nonatomic, copy) NSString *applicationName;
這是Irate警報中顯示的應用程序的名稱。它是從應用程序的信息中自動設置的。
@property (nonatomic, copy) NSString *applicationBundleID;
這是應用程序包ID,用於從iTunes檢索appStoreID
和appStoreGenreID
。這是從應用程序的info.plist自動設置的,因此除了測試目的外,您不需要更改它。
@property (nonatomic, assign) float daysUntilPrompt;
這是用戶在提示將應用程序對其進行評級之前必須安裝的天數的數量。時間是從應用程序啟動的第一次來衡量。這是一個浮點值,因此可以用來指定分數的天數(例如0.5)。默認值為10天。
@property (nonatomic, assign) NSUInteger usesUntilPrompt;
這是用戶在提示對其進行評級之前必須啟動該應用程序的最小次數。這樣可以避免用戶一次運行該應用程序的情況,而不會在數週內查看它,然後再啟動它,只是要立即提示它進行評分。最小使用計數可確保僅提示頻繁的用戶。該提示只有在指定的天數之後才會出現並已達到用途。此默認為10使用。
@property (nonatomic, assign) NSUInteger eventsUntilPrompt;
對於某些應用程序,啟動並不是使用的好指標。例如,該應用程序可能是一個持續運行的守護程序,或者在用戶達到特定級別之前不能編寫知情評論的遊戲。在這種情況下,您可以手動記錄重要事件,並在預定數量的這些事件中出現提示。像使用UnuntilPrompt設置一樣,該提示只有在指定的天數和事件數之後出現,但是一旦達到一天的閾值,如果達到事件閾值或使用閾值,則會出現提示。這默認為10個事件。
@property (nonatomic, assign) float usesPerWeekForPrompt;
如果您不太關心使用該應用程序的總數,但希望使用應用程序使用的頻率,則可以使用usesPerWeekForPrompt
屬性來設置用戶必須啟動的次數的最小閾值每週(平均)顯示提示的應用程序。請注意,這是自應用程序安裝以來的平均值,因此,如果用戶長時間不運行應用程序,則可能會丟掉平均值。默認值為零。
@property (nonatomic, assign) float remindPeriod;
應用程序在選擇“稍後提醒我”選項(以幾天的測量)之後,該應用程序應等待多長時間。零值意味著該應用將提醒用戶下一個啟動。請注意,此值取代了其他條件,因此即使在此期間發布了新版本,該應用程序也不會在提醒期間提示評級。這默認為1天。
@property (nonatomic, copy) NSString *messageTitle;
標題顯示為評級提示。如果您不想顯示標題,請將其設置為@""
;
@property (nonatomic, copy) NSString *message;
評級提示消息。這應該是有禮貌和禮貌的,但不太言行。如果您不想顯示消息,請將其設置為@""
;
@property (nonatomic, copy) NSString *updateMessage;
這是一條消息,適用於以前對應用程序進行評分的用戶,並鼓勵他們重新速率。這使您可以自定義這些用戶的消息。如果您不為此情況提供自定義消息,則將使用標準消息。
@property (nonatomic, copy) NSString *cancelButtonLabel;
按鈕標籤的按鈕可刪除評級提示,而無需對應用程序進行評級。
@property (nonatomic, copy) NSString *rateButtonLabel;
如果用戶想對應用程序進行評分,則按下按鈕的按鈕標籤。
@property (nonatomic, copy) NSString *remindButtonLabel;
如果用戶不想立即對應用程序進行評分,則按下按鈕的按鈕標籤,但希望將來提醒它。將其設置為@""
如果您不想顯示提醒我按鈕 - 例如,如果您沒有屏幕上的空間。
@property (nonatomic, assign) BOOL useAllAvailableLanguages;
默認情況下,即使在不支持本地化的應用程序中使用,irate也會使用iRate.bundle中的所有可用語言。如果您寧願限制Irate僅使用應用程序已經支持的相同語言集,請將此屬性設置為否。 (默認為是)。
@property (nonatomic, assign) BOOL promptForNewVersionIfUserRated;
由於iTunes評分是特定於版本的,因此您理想地希望用戶對應用程序的每個新版本進行評分。真正喜歡您的應用程序的用戶可能願意更新其新版本的評論。 SET PINST promptForNewVersionIfUserRated
to YES
,IRATE每次安裝更新時都會再次提示用戶拒絕對應用程序進行評分。如果他們拒絕,他們將不會再次被要求。
@property (nonatomic, assign) BOOL onlyPromptIfLatestVersion;
即使用戶未運行該應用程序的最新版本,也將其設置為“否”啟用額定提示。這默認為“是”,因為那種用戶不會因您已經修復的錯誤而不會留下不良評論。
@property (nonatomic, assign) BOOL onlyPromptIfMainWindowIsAvailable;
此設置僅適用於Mac OS。默認情況下,在Mac OS上,Irate警報顯示為主窗口上的表格。某些應用程序沒有主窗口,因此此方法不起作用。對於此類應用程序,將此屬性設置為no,以允許將憤怒的警報顯示為常規模態窗口。
@property (nonatomic, assign) BOOL promptAtLaunch;
將其設置為否,以便在應用程序啟動或從後台返回時自動出現評級提示。評級標準將繼續進行跟踪,但是在此設置有效時,提示將不會自動顯示。如果您想手動控制評級提示符的顯示,則可以使用此選項。
@property (nonatomic, assign) BOOL verboseLogging;
此選項將導致Irate將詳細日誌發送到有關及時決策過程的控制台。如果您的應用程序未正確提示您期望的評級,這將幫助您弄清楚原因。默認情況下,在調試構建上啟用了詳細的記錄,並在發布和部署構建中禁用。
@property (nonatomic, assign) BOOL previewMode;
如果設置為“是”,Irate將始終在啟動時顯示評級提示,無論應用程序已經使用了多長時間還是最新版本(除非您已明確禁用了promptAtLaunch
選項)。使用此操作來校對您的消息,並在測試過程中檢查您的配置是否正確,但將其禁用以獲取最終版本(默認為no)。
@property (nonatomic, assign) BOOL useUIAlertControllerIfAvailable;
默認情況下,iRate將在iOS上使用uialertview來顯示評級提示。 UialertView在ios8中被棄用,並由UialertController取代。不幸的是,與UialerTview不同,使用UialertController表示警報會干擾該應用程序顯示其他控制器的能力,並且由於The Orate可以在應用程序一生中的任何時刻在任何時刻顯示警報,因此它可能與應用程序試圖呈現另一個視圖控制器的應用程序發生衝突。因此,默認情況下禁用了UialertController的使用。如果您確定它不會與您的應用程序邏輯發生衝突(例如,如果您已禁用自動評級提示,或者您的應用不使用任何模態視圖控制器),則應將此屬性設置為YES。
@property (nonatomic, assign) BOOL useSKStoreReviewControllerIfAvailable;
默認情況下,Irate將使用SkstoreReViewController在iOS 10.3及以上請求評論。為了禁用此功能,SET seet useSKStoreReviewControllerIfAvailable
為NO
。
如果默認的憤怒行為不符合您的要求,則可以使用高級屬性,方法和委託來實現自己的要求。下面的屬性使您訪問內部狀態並覆蓋它:
@property (nonatomic, strong) NSURL *ratingsURL;
該應用程序將引導用戶到達應用程序的URL,以便他們為應用程序編寫評級。這是為給定平台自動設置為正確的值。在iOS 6及以下上方,將用戶直接進入評級頁面,但是在iOS 7和Mac OS上,它將用戶帶到主應用程序頁面(如果有一種直接鏈接到這些平台上的評分頁面的方法,那麼我尚未找到它)。如果您要實現自己的評級提示,則可能應該使用openRatingsPageInAppStore
方法,尤其是在Mac OS上,因為打開Mac App Store的過程比僅打開URL更為複雜。
@property (nonatomic, strong) NSDate *firstUsed;
用戶啟動該應用程序當前版本的第一個日期。這用於計算是否滿足DaysuntilPrompt標準。
@property (nonatomic, strong) NSDate *lastReminded;
用戶上次要求提醒的日期稍後對應用程序進行評分。
@property (nonatomic, assign) NSUInteger usesCount;
當前版本的應用程序已使用(啟動)的次數。
@property (nonatomic, assign) NSUInteger eventCount;
自當前版本安裝以來已記錄的重要應用程序事件的數量。這是通過logevent方法遞增的,但也可以直接操縱。查看事件演示,以了解該操作系統的使用方式。
@property (nonatomic, readonly) float usesPerWeek;
該應用程序當前版本的平均次數已被使用(啟動)。
@property (nonatomic, assign) BOOL declinedThisVersion;
此標誌指示用戶是否拒絕對當前版本(是)(否)進行評分。憤怒提示邏輯當前尚未使用此功能,但可能對實現自己的邏輯有用。
@property (nonatomic, assign) BOOL declinedAnyVersion;
此標誌指示用戶是否已拒絕對應用程序的任何先前版本(是)(否)進行評分。如果將其設置為“是”,IRATE不會自動提示用戶。
@property (nonatomic, assign) BOOL ratedThisVersion;
此標誌指示用戶是否已經對當前版本(是)(否)進行了評分。
@property (nonatomic, readonly) BOOL ratedAnyVersion;
此(ROADONLY)標誌指示用戶以前是否已對應用程序的任何版本(是)(否)進行了評級。
@property (nonatomic, assign) id<iRateDelegate> delegate;
您提供的對象實現了下面記錄的iRateDelegate
協議。使用此操作來檢測和/或覆蓋Irate的默認行為。這將默認為應用程序委託,因此,如果您將應用程序委派作為憤怒委託,則無需設置此屬性。
除了配置外,Irate還具有以下方法:
- (BOOL)shouldPromptForRating;
返回是,如果達到及時標準,則否,如果沒有返回。如果您在應用程序啟動時禁用了自動顯示,則可以使用它來決定何時顯示評級提示。調用此方法不會呼叫iRateShouldPromptForRating
代表方法。
- (void)promptForRating;
此方法將立即觸發評級提示,而無需檢查App Store是否可用,並且無需調用IrateshouldShouldFormptForrated委託法。請注意,此方法取決於appStoreID
和applicationGenre
屬性,這些屬性僅在輪詢iTunes服務器後才檢索,因此,如果您打算直接調用此方法,則需要事先設置這些屬性,或者使用promptIfNetworkAvailable
方法。
- (void)promptIfNetworkAvailable;
此方法將檢查App Store是否可用,如果是,則將向用戶顯示評級提示。在顯示警報之前,將調用Irateshould -hould授予授權的委託方法,以便您可以攔截它。請注意,如果您的應用程序是沙盒,並且沒有網絡訪問權限,則此方法將忽略網絡可用性狀態,但是在這種情況下,您需要手動設置appStoreID
或IRATE無法運行。
- (void)promptIfAllCriteriaMet;
此方法將檢查是否滿足了所有提示條件,以及App Store是否可用,如果是,則將向用戶顯示評級提示。在顯示警報之前,將調用Irateshould -hould授予授權的委託方法,以便您可以攔截它。
- (void)openRatingsPageInAppStore;
此方法會跳過用戶警報,並在Mac或iPhone應用程序商店中打開應用評級頁面,具體取決於Irate正在運行的平台。此方法沒有執行任何檢查以驗證機器具有網絡訪問或應用程序存儲是否可用。它也不稱為-iRateShouldOpenAppStore
委託法。您應該使用此方法打開評級頁面,而不是評級屬性,因為在許多情況下,啟動App Store的過程比僅打開URL更為複雜。請注意,此方法取決於appStoreID
僅在輪詢iTunes服務器後才檢索。如果您在不先進行更新檢查的情況下調用此方法,則需要事先設置appStoreID
屬性,或者風險該方法可能需要一些時間進行網絡調用,或者完全失敗。關於成功,此方法將調用-iRateDidOpenAppStore
委託方法。在失敗時,它將調用-iRateCouldNotConnectToAppStore:
委託方法。
- (void)logEvent:(BOOL)deferPrompt;
該方法可以從應用程序中的任何地方(在配置了憤怒之後)調用,並增加了憤怒的事件計數。當達到預定義的事件數量時,將顯示評級提示。可選的延遲參數用於確定是否會立即顯示提示(否)或應用程序將等到下一個啟動(是)。
- (void)remindLater;
此方法重置提醒期。
Indedelegate協議提供了以下方法,這些方法可以使用,這些方法可以使用截取的生氣事件並覆蓋默認行為。所有方法都是可選的。
- (void)iRateCouldNotConnectToAppStore:(NSError *)error;
如果iRate無法連接到App Store,則通常是因為網絡連接關閉。如果您的應用程序由於沙盒權限而無法訪問網絡,則可能會觸發,在這種情況下,您需要手動設置AppStoreId,以使Irate仍然可以運行。
- (void)iRateDidDetectAppUpdate;
如果iRate檢測到該應用程序自上次啟動以來已經更新了該應用程序,則調用此方法。
- (BOOL)iRateShouldPromptForRating;
在將評級提示顯示給用戶之前,該方法立即調用。除了標準規則外,您還可以使用此方法來實現自定義提示邏輯。您還可以使用此方法阻止標準提示警報並以不同的方式顯示評級提示,或者完全繞過它。
- (void)iRateDidPromptForRating;
在顯示額定提示之前,該方法立即調用。如果您使用分析來跟踪哪些用戶查看提示,然後轉到App Store,這將很有用。這可以幫助您微調何時/如何顯示提示的情況。
- (void)iRateUserDidAttemptToRateApp;
當用戶按評級提示符中的速率按鈕時,這就是調用。如果您想記錄用戶與憤怒的互動,這將很有用。僅當您使用標準的iRate警報視圖提示符時,才調用此方法,並且如果您提供自定義評級實現或直接調用openRatingsPageInAppStore
方法,則不會自動調用此方法。
- (void)iRateUserDidDeclineToRateApp;
當用戶拒絕評級應用程序時,這就是調用。如果您想記錄用戶與憤怒的互動,這將很有用。僅當您使用標準iRate警報視圖提示符時,此方法才會調用,並且在提供自定義評級實現時不會自動調用。
- (void)iRateUserDidRequestReminderToRateApp;
當用戶要求提醒用戶對應用程序進行評分時,這就是調用。如果您想記錄用戶與憤怒的互動,這將很有用。僅當您使用標準iRate警報視圖提示符時,此方法才會調用,並且在提供自定義評級實現時不會自動調用。
- (BOOL)iRateShouldOpenAppStore;
在憤怒嘗試打開App Store之前,該方法立即調用。如果您想實現自己的評分頁面顯示邏輯,請返回否。
- (void)iRateDidOpenAppStore;
憤怒打開App Store之後,此方法立即被調用。
憤怒的默認字符串已經針對多種語言進行了本地化。默認情況下,憤怒將使用憤怒中的所有本地化。即使在不是本地化的應用程序中,或者僅本地化與憤怒支持的語言的子集。憤怒的字符串鍵是:
static NSString *const iRateMessageTitleKey = @"iRateMessageTitle";
static NSString *const iRateAppMessageKey = @"iRateAppMessage";
static NSString *const iRateGameMessageKey = @"iRateGameMessage";
static NSString *const iRateUpdateMessageKey = @"iRateUpdateMessage";
static NSString *const iRateCancelButtonKey = @"iRateCancelButton";
static NSString *const iRateRemindButtonKey = @"iRateRemindButton";
static NSString *const iRateRateButtonKey = @"iRateRateButton";
如果您希望Irate僅使用應用程序中啟用的本地化(因此,如果您的應用僅支持英語,法語和西班牙語,那麼即使irate包括德語,也將自動對這些語言進行本地化,但不適合德語語言文件),將useAllAvailableLanguages
選項設置為NO。
不建議您修改iRate.bundle中的字符串文件,因為它會使更新到較新版本的irate更加複雜。這個例外是,如果您想向Github上的Irate項目中的本地化提交其他語言,改進或更正(非常感謝)。
如果您想在應用程序中添加irate的其他語言而不將其提交給GitHub項目,則可以將這些字符串直接添加到項目文件夾中的適當的lotizable.strings文件中。如果您想替換某些或全部默認的憤怒字符串,最簡單的選項是將這些字符串僅複製到您自己的interizable.strings.strings文件中,然後對其進行修改。憤怒將自動使用主應用程序捆綁包中的字符串,而不是憤怒束中的字符串,因此您可以以這種方式覆蓋任何字符串。
如果您不想使用任何默認的本地化,則可以完全忽略irate.bundle。請注意,如果您只想支持憤怒支持的一部分語言,則無需從iRate.bundle中刪除其他字符串文件 - 只需將useAllAvailableLanguages
設置為否,而Irate只會使用您的應用程序已經支持的語言。
仍然支持通過使用單個設置器方法(請參見下文)覆蓋Irate的默認字符串的舊方法,但是推薦的方法現在是將這些字符串添加到您的項目的Lentizable.strings.strings.strings文件中,該文件將自動檢測到Irate。
+ (void)initialize
{
//overriding the default iRate strings
[iRate sharedInstance].messageTitle = NSLocalizedString(@"Rate MyApp", @"iRate message title");
[iRate sharedInstance].message = NSLocalizedString(@"If you like MyApp, please take the time, etc", @"iRate message");
[iRate sharedInstance].cancelButtonLabel = NSLocalizedString(@"No, Thanks", @"iRate decline button");
[iRate sharedInstance].remindButtonLabel = NSLocalizedString(@"Remind Me Later", @"iRate remind button");
[iRate sharedInstance].rateButtonLabel = NSLocalizedString(@"Rate It Now", @"iRate accept button");
}
首次構建並運行基本的Mac或iPhone示例項目時,它將顯示一個警報,要求您對應用程序進行評分。這是因為設置了PreviewMode選項。
禁用PreviewMode選項並使用其他設置播放,以查看應用程序在實踐中的行為。
高級示例演示了您如何使用IratedElegate方法實現完全定制的憤怒界面。自動提示被禁用,而用戶可以選擇通過按“評分此應用程序”按鈕來評估應用程序。
按下時,該應用首先檢查App Store是否可用(如果計算機沒有Internet Connection或Apple.com關閉),然後啟動Mac App Store。
該示例是用於MAC OS的,但是可以在iOS上應用相同的原理。
版本1.12.2
版本1.12.1
版本1.12
版本1.11.7
版本1.11.6
版本1.11.5
版本1.11.4
canOpenURL:
版本1.11.3
版本1.11.2
版本1.11.1
版本1.11
promptIfCriteriaMet
便利方法NSNotificationCenter
通知作為代表的替代UIAlertController
而不是UIAlertView
如果有)版本1.10.3
版本1.10.2
版本1.10.1
版本1.10
daysUntilPrompt
期間的評級彈出窗口promptForNewVersionIfUserRated
選項,以重新提交以前額定的用戶(默認為OFF)updateMessage
屬性,以與promptForNewVersionIfUserRated
選項一起使用1.9.3版
版本1.9.2
版本1.9.1
版本1.9
promptAgainEachVersion
選擇選項版本1.8.3
版本1.8.2
版本1.8.1
版本1.8
版本1.7.5
版本1.7.4
版本1.7.3
版本1.7.2
版本1.7.1
版本1.7
版本1.6.2
版本1.6.1
版本1.6
版本1.5.3
版本1.5.2
版本1.5.1
1.5版
版本1.4.9
版本1.4.8
版本1.4.7
版本1.4.6
版本1.4.5
版本1.4.4
版本1.4.3
版本1.4.2
版本1.4.1
版本1.4
版本1.3.5
版本1.3.4
iRateDidDetectAppUpdate
代表方法版本1.3.3
版本1.3.2
版本1.3.1
版本1.3
版本1.2.3
版本1.2.2
版本1.2.1
MAC_APP_STORE_REFRESH_DELAY
升至5秒,以支持舊機器版本1.2
版本1.1
1.0版