功能設(shè)計 先申明一下,我是碼農(nóng),不是一個產(chǎn)品經(jīng)理,但我覺得現(xiàn)有市面上的很多App,設(shè)計的“升級提示功能”都不太友好。在此分享一下我的想法,歡迎大家討論。
這些App包括:新浪微博、網(wǎng)易微博、網(wǎng)易新聞客戶端以及大部分帶有升級提示功能的App,所以我覺得這個問題還是挺普遍的。對于該問題,一句話描述起來就是:“這些App都會在用戶剛剛使用它的時候,提示有新版本,讓用戶去AppStore上下載最新的版本”。下面是某個應(yīng)用的升級提示截圖:
為什么我認(rèn)為這是一個糟糕的設(shè)計呢?因為用戶剛剛打開你的App,明顯就是想使用你的功能。例如剛剛打開新浪微博,可能就是想看一下最新的消息或回復(fù)。剛剛打開網(wǎng)易新聞客戶端,可能就是想看看最新的新聞。這個時候,你告訴用戶有新版本,是想讓用戶暫時放棄使用該App嗎?我不知道有多少用戶會去點“升級”這個按鈕,反正我每次看到這個提示都很郁悶,因為我如果點了,我就暫時不能使用該應(yīng)用了(升級時原版本的App是無法使用的)。所以我在想,這個提示升級的時間能不能做得更友好一些?
有一次在地鐵上我想到了一個好辦法,就是讓升級提示不是出現(xiàn)在軟件剛剛打開的時候,而是用戶剛剛退出App的時候,我們可以在用戶剛剛退出App的時候,向iOS設(shè)備發(fā)一個本地的通知(Local Notification),在本地通知上顯示升級提示。當(dāng)用戶點擊這個升級提示時,我們的App在啟動后跳轉(zhuǎn)到AppStore,這樣就達(dá)到的提示升級的效果。
這樣做相比以前的好處有以下幾點:
用戶退出App的時刻,是一個訪問這個App活動的結(jié)束。在這個時候提示,用戶更有理由接受升級。 即便用戶當(dāng)前不接受升級,但這個升級提示都會存在用戶的通知中心中,用戶想升級時,點擊這個通知,就可以方便地一鍵跳到AppStore的下載頁面。而之前的方法在用戶取消后,用戶就不方便取獲下載地址了。 另外,本地通知的使用只需要iOS4.0以上版本即可,而在中國,iOS4.0以上比例 達(dá)到了99%。本地通知也不需要向用戶申請發(fā)送通知的DeviceToken,所以該方案很少被用戶禁止(用戶只能專門去通知中心將該應(yīng)用的所有通知關(guān)閉)。當(dāng)然,這個升級提示也不應(yīng)該每次都出現(xiàn),以免對用戶產(chǎn)生太多打撓,象我在粉筆網(wǎng)客戶端上設(shè)置的策略是最多半個月出現(xiàn)一次。
在我在粉筆網(wǎng)iPhone端實現(xiàn)該方案后,有一次我發(fā)現(xiàn)支付寶的iOS客戶端也采用通知的方式來提示用戶升級,看來大家都想到一塊兒了。不過從通知的發(fā)送時間來看,他們應(yīng)該不是使用的本地通知,而是通過服務(wù)器發(fā)送Push通知的方式。這種方式的好處是即使用戶安裝后一次也沒有使用你的App,你還是可以通過通知來喚醒他,可能的壞處是:
可能用戶已經(jīng)升完級了,你還把升級通知的信息發(fā)給用戶了。象我就是,支付寶都升完級了,還發(fā)通知提示我有新版可以使用。 用戶如果禁止了應(yīng)用的Push通知,你就沒辦法發(fā)送升級提醒了。 技術(shù)實現(xiàn) 再簡單說一下技術(shù)實現(xiàn),我寫了一個VersionAgent類,每24小時最多向服務(wù)器請求一次最新的App版本。然后在每次App啟動5秒后,檢查一下是否過了24小時一次的請求閾值,如下所示:
1 2 3 4 5 6 7 8 - ( void ) applicationDidBecomeActive: ( UIApplication * ) application { double delayInSeconds = 5.0 ; dispatch_time_t popTime = dispatch_time ( DISPATCH_TIME_NOW , delayInSeconds * NSEC_PER_SEC ); dispatch_after ( popTime , dispatch_get_main_queue (), ^ ( void ){ [[ VersionAgent sharedInstance ] checkVersion ]; }); }
如果版本有更新,則在AppDelegate的applicationDidEnterBackgroundl回調(diào)中,發(fā)送一個本地通知,示例代碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 - ( void ) applicationDidEnterBackground: ( UIApplication * ) application { if ([[ VersionAgent sharedInstance ] shouldShowLocalNotification ]) { dispatch_async ( dispatch_get_main_queue (), ^ { UILocalNotification * localNotification = [[ UILocalNotification alloc ] init ]; if ( localNotification ) { localNotification . fireDate = [[[ NSDate alloc ] init ] dateByAddingTimeInterval: 3 ]; localNotification . timeZone = [ NSTimeZone defaultTimeZone ]; localNotification . alertBody = @"粉筆網(wǎng)客戶端有新的版本,點擊到App Store升級。" ; localNotification . alertAction = @"升級" ; localNotification . soundName = @"" ; [ application scheduleLocalNotification: localNotification ]; } }); } }
然后通過AppDelegate的回調(diào)函數(shù),判斷App的啟動方式是否是通過用戶點擊通知中心的升級提示來啟動,如果是,則跳轉(zhuǎn)到AppStore,示例代碼如下:
1 2 3 4 5 - ( void ) application: ( UIApplication * ) application didReceiveLocalNotification: ( UILocalNotification * ) notification { // open app store link NSString * url = [ NSString stringWithFormat: @"itms-apps://itunes.apple.com/app/id%@" , APP_STO
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報 。