使用 Android 備份和恢復功能留住使用者
隨著移動裝置廠商不斷推出新的型號,使用者更換裝置的頻率也越來越頻繁。替換新機時,最讓使用者頭疼的問題之一就是資料遷移了。那麼不完善的資料遷移會給使用者帶來哪些糟糕體驗呢?我們從下面的案例來看看使用者的煩惱。
Sally 的煩惱
她叫 Sally,Sally 是一位食品微生物學家,她有一份很棒的工作,這份工作讓她很忙碌,甚至精疲力盡。
在實驗室辛苦工作一天後回到家,她最喜歡的就是在手機上玩休閒遊戲。
Sally 喜歡她的手機,她在 2017 年買了這部手機,方便她在上下班路上刷美劇 The Good Place (善地)。不過現在她主要在手機上玩遊戲。然而這部手機已經沒有之前那麼好用了。
Sally 去了當地的手機專賣店,經驗豐富的店員 Hakeem 向她推薦了一款非常棒的新款 Android 手機。
Sally 回到家後就馬上開始設定新手機,她很輕鬆地就將舊手機中的所有應用、照片、訊息和設定傳輸到了新手機, 這讓她感到很高興。
傳輸完成後,她想看看喜歡的一些遊戲在這部很棒的新手機上的執行效果。她最喜歡的休閒遊戲是 Super Soccer Goalie Catch 2。她花了幾個月時間才達到 123 級,迫不及待地想在新手機上打通這一關。
不幸的是,當她開啟遊戲時發現所有遊戲進度都沒有了。Sally 需要花幾天時間才能升到原來的級別,她感到很灰心喪氣,她覺得不值得付出這麼多時間回到原等級。於是解除安裝了這款遊戲,並安裝了該遊戲的主要競爭對手 Soccer Goalie 3D 應用。
Sally 並沒有氣餒,她打開了 Protein Shake Tracker 應用。Sally 喜歡喝蛋白粉,喜歡給它們打分,並跟蹤自己攝入了多少營養。當 Sally 開啟該應用時系統提示她登入,但 Sally 不記得自己的登入資訊,也沒有使用密碼管理器。她也很確定自己已經更換過電子郵件地址。她有些不知所措。
相信大家已經猜到了,Sally 解除安裝了該應用並決定嘗試另一款名為 ProteinMate 的新的出色應用。這款應用在她的 Instagram 動態訊息上投放了大量廣告。
Sally 喜歡她的新手機也喜歡手機上的大多數應用,但部分應用無法傳輸之前的資料,這讓她很失望。
Javier 遇到的困惑
這是 Javier,Javier 使用 iPhone 給晚輩們發訊息。他的手機中有很多晚輩們的照片,這對他來說意味著一切。
Javier 喜歡嚐鮮,並且經常會購買新款手機。他很喜歡新買的可摺疊 Android 手機的外觀,這樣的設計使他有更多的螢幕空間來發訊息和玩遊戲,並且可以向朋友們炫耀。
Javier 將他的所有應用、聯絡人和照片從 iPhone 手機傳輸到新的可摺疊 Android 手機上。傳輸完成後,他馬上打開了所用的即時通訊應用,希望在大螢幕上看看晚輩們的照片。
但他發現這款即時通訊應用並沒有將 iPhone 上的訊息傳輸過來,這讓他很受打擊。他在想,或許應該換一款即時通訊應用。
現在,您可能會認為所有這些都是在散佈恐慌。但在 Google 我們對切換體驗進行了大量研究,結果顯示使用者對切換體驗並不滿意。
這是衛報近期刊登的一篇文章中的一段話,與我們的研究結果相吻合。
△ 真實的使用者反饋
這位使用者將手機忘在了車頂上,當他發現遊戲進度沒有傳輸到新裝置上時,就解除安裝了這款遊戲。我們在研究中聽到很多類似的聲音。
△ 研究成果摘要
這是我們研究結果的總結。讓使用者感到不解的是,應用不能延續舊手機原有的狀態。他們對自己的個人資料丟失感到不安,使用者不會責怪 Android 或 OEM,而會責怪應用或他們自己。
在新機配置過程中只有 30% 的裝置以新裝置進行設定,絕大多數使用者希望能夠將舊手機中的資料傳輸到新裝置。如果不能這樣做,使用者會感到不安,從而導致 Play 商店中的應用評分降低,並直接造成使用者流失。
不要像這位開發者一樣,完全不瞭解為什麼使用者會流失。這些使用者是您一開始努力爭取到的,當用戶更換新裝置時,一定要留住他們。
幸運的是,在 Android 上將應用資料傳輸到新裝置非常簡單,甚至可以免費將資料備份到雲端,通過使用者信任的高質量應用,幫助您擴大使用者群,最終增加收入。
關於 Android 備份和恢復
我們來看兩種用例: 從 iOS 切換到 Android 和從 Android 切換到 Android。
如果使用者之前使用的是 iOS 手機,可以用資料線將舊手機連線到新的 Android 裝置,然後進行裝置到裝置的遷移,簡稱 D2D。在 D2D 期間我們將檢視使用者的 iOS 裝置上有哪些應用,然後嘗試在 Play 商店中找到對應的 Android 應用,並自動安裝這些應用。對於部分應用,還可以傳輸應用資料。如果您對 iOS 和 Android 版應用之間的資料傳輸感興趣,請通過該 電子郵件地址 聯絡我們。
△ 通過資料線連線裝置進行備份和恢復
對於從 Android 切換到 Android 的用例,使用者也可以通過資料線連線裝置。我們將重新下載使用者的所有應用,併為每個參與備份和恢復的應用傳輸多達 2GB 的資料。
△ 雲備份中恢復資料
如果使用者的舊裝置目前不在身邊,則可以從之前建立的雲備份中恢復資料。這是因為 Android 裝置上的應用資料會定期備份到雲端。這些應用資料備份在執行 Android Pie 及更高版本的裝置上受到端到端加密保護,前提是使用者已設定用於解鎖螢幕的 PIN 碼、圖案或密碼。在這種模式下,我們將為裝置上的每個相關應用備份多達 25MB 的資料。
Android M 及更高版本上的所有應用都已啟用了備份和恢復,除非您明確選擇禁用該功能。您可以很輕鬆地控制和自定義所需的行為,我們將在稍後介紹如何做到這一點。
在這裡您可能會想,我已經使用某種解決方案來保持使用者資料同步到雲端。比如 Firebase 或自定義後端,為什麼還需要備份和恢復?
首先,為了使用應用內雲同步功能使用者需要登入到您的應用。而備份和恢復功能處理的資料在此之前就已經可用,因為我們已經通過使用者的 Google 帳號識別使用者的身份。
其次,也許是更重要的一點,有很多資料是裝置獨有的,而不屬於應用中的帳號。應用通常不會將這些資料同步到雲端。例如,假設您有一個入門教程,在每個裝置上顯示一次而不是每個帳號中如此。或者,假設您的應用中有一個設定螢幕,使用者可以通過設定自定義應用在此特定裝置上的外觀和行為。這樣的例子還有很多。
但重點在於,當用戶首次在新手機上啟動應用時,他們真的希望所有這些首選項都已經正確配置。現在,我們來看看如何為 Android 應用配置備份和恢復。
自動備份 (Auto Backup)
預設情況下,所有應用都參與自動備份。這意味著,您的大部分應用資料將包含在雲備份和 D2D 傳輸中。我們將只排除快取目錄和特殊的非備份資料夾,您可以在其中放置不希望備份或傳輸的內容。
自定義自動備份
這是自動備份中可以自定義的配置:
- 設定規則規定雲備份或裝置傳輸中應包含哪些檔案或目錄
- 指定只有當裝置支援端到端 (E2E) 加密時,才需要進行雲備份
- 為雲端和 D2D 設定不同的規則
要完成所有這些任務,只需建立一個包含所需配置的 XML 檔案。
<data-extraction-rules>
<cloud-backup disableIfNoEncryptionCapabilities=”true”>
<exclude path=”my_prefs/device_specific_prefs”/>
<exclude path=”downloaded/temp” />
</cloud_backup>
<device-transfer>
<exclude path=”my_prefs/device_specific_prefs” />
</device-transfer>
</data-extraction-rules>
如上述程式碼所示,該配置包含兩個部分: 一部分用於雲備份,另一部分用於裝置傳輸。在每個部分中,可以設定要排除或包含哪些檔案或目錄的規則。
<data-extraction-rules>
<cloud-backup disableIfNoEncryptionCapabilities=”true”>
<exclude path=”files/my_firebase_token”/>
<exclude path=”files/downloaded” />
</cloud_backup>
<device-transfer>
<exclude path=”my_prefs/device_specific_prefs” />
</device-transfer>
</data-extraction-rules>
在本例中,我們將 Firebase 推送令牌排除在雲備份之外,因為它在任何其他裝置上都無法使用。將特定裝置之外無法複用的資料排除是非常合理的。我們還排除了一個較大的可下載檔案,如果可以很容易地從某個位置重新下載特定的資料,那麼將其包含到雲備份中毫無意義。
此外,對於雲備份,我們已將 disableIfNoEncryptionCapabilities 標誌設定為「true」。這意味著,除非提供端到端加密,否則不會將資料備份到雲端。
最後,我們為裝置到裝置傳輸定義了更寬鬆的配置,因為在這個過程中不涉及雲端儲存。
<uses-sdk android:targetSdkVersion=”31” />
<application
...
android:dataExtractionRules=”my_rules.xml”>
完成配置後,需要使用 dataExtractionRules 屬性在 AndroidManifest 檔案中指向該配置。另外,不要忘了將 Android 12 作為目標平臺,因為該屬性是從這個版本才引入的。
如需獲取有關配置自動備份的更詳細說明,請參閱 官方文件 。
鍵值對備份 (Key/Value Backup)
接下來,我們簡單看一下我前面提到的另一種方法,即鍵值對備份 (K/V backup)。
void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data,
ParcelFileDescriptor newState) {
boolean isEncrypted = data.getTransportFlags
& BackupAgent.FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED
boolean isD2d = data.getTransportFlags
& BackupAgent.FLAG_IS_DEVICE_TO_DEVICE_TRANSFER
if (isEncrypted || isD2d) {
//在這裡包含需要備份的資料:要麼使用端到端加密,要麼不上傳任何資料到雲端
}
}
在這裡,需要擴充套件一個名為 BackupAgent 的類,並實現您希望的備份和恢復行為。作為備份事件的一部分您可以檢查相同的條件,比如是否提供端到端加密以及當前正在進行的操作是雲備份還是裝置傳輸,以便更好地確定應該包括哪些鍵值對。
<application
...
android:backupAgent=”MyBackupAgent”>
同樣,當備份代理就緒後,不要忘了在 AndroidManifest 中指向該代理。如果您對鍵值對備份感興趣,請參閱 實現鍵值對備份的分佈指南。
使用 BlockStore 傳輸使用者憑證
接下來我們介紹一個特定類別的應用資料。當用戶在新裝置上啟動一款應用時,面臨的最大障礙之一是再次登入。使用者甚至有可能不記得自己的登入名和密碼。如果您的應用能夠自動識別使用者,讓他們能夠從舊裝置上離開應用的位置繼續,這不是很好嗎?
為了實現這一點可以使用 BlockStore。它允許您將識別使用者身份所需的任何登入憑據傳輸到新裝置作為裝置到裝置遷移的一部分。BlockStore 不依賴自動備份和鍵值對備份等功能。即使您不使用備份和恢復進行任何其他操作,仍可以使用 BlockStore 來傳輸身份驗證令牌。我們快速瞭解一下它是如何工作的。
val client = Blockstore.getClient(this)
val data = StoreBytesData.Builder()
.setBytes(/* 二進位制陣列 */)
.build()
client.storeBytes(data)
.addOnSuccessListener{ result ->
Log.d(TAG, “Stored: ${result.getBytesStored()}”)
}
每當使用者登入到您的應用並生成一個身份驗證令牌或任何其他登入憑據時,只需將這些資料儲存到 BlockStore 中,BlockStore 將對這些資料進行加密並安全儲存。
val client = Blockstore.getClient(this)
client.retrieveBytes()
.addOnSuccessListener{ result ->
Log.d(TAG, “Retrieved: ${String(result)}”)
}
在完成裝置到裝置遷移後,當您的應用在新裝置上啟動時,您可以向 BlockStore 請求之前儲存的憑據,並在不要求使用者輸入登入名和密碼的情況下登入應用。
如需瞭解有關 BlockStore 的更多資訊,請參閱。
測試
在您根據需要完成所有配置後,無論是使用自動備份還是鍵值對備份,都應進行一些測試,以確保在恢復後首次啟動應用時,獲得所需的狀態,這一點非常重要。
測試非常簡單,您可以通過特殊的工作流使用單個裝置或模擬器專門模擬應用的雲備份和裝置到裝置傳輸。
如需獲得關於測試的詳細說明,請參閱 官方文件。
持續更新您的實現方式
最後,使您的配置保持最新版本同樣很重要。隨著應用不斷演化並增加新功能,請確保備份和恢復涵蓋新增的內容。如果您使用的是自動備份可能不需要執行任何操作,預設情況下會包含所有新資料。如果您使用的是鍵值對備份,請更新 BackupAgent 以包含任何相關的資訊。
關於 Android 12 的重要更新
應用開發者向我們反饋,他們擔心 adb 備份會導致應用資料輕易被提取。為了解決這個問題,我們已經關閉了所有應用的 adb 備份。因此,啟用備份和恢復不會使您的應用受到 adb 備份的影響。但您仍然可以根據需要將 adb 備份用於測試和開發目的。
其次,我們引入了 dataExtractionRules 配置,作為控制自動備份的新方法。我們正在逐步淘汰舊的方法,即 allowBackup 標誌和 fullBackupContent 配置。建議您在 Android 12 及更高版本中使用 dataExtractionRules。同時為早期作業系統版本保留 fullBackupContent 配置。
如需獲得上述更新的詳細說明,請參閱 官方文件。
總結
我相信當您的應用資料同步到新裝置上時是十分令人振奮的。好訊息是,目前已有超過 20 億臺 Android 裝置支援免費備份到雲端。從 2022 年 1 月起 Wi-Fi 和資料線傳輸將擴充套件到所有新的 Android 裝置。所有這些都將預設生效,建議您確保這些功能已開啟。如果您有大量資料或敏感資料,可以對匯出的內容進行微調。不要忘了新的 BlockStore API,您可以使用它安全地處理密碼。
希望這些內容對您有幫助,同時希望您利用備份和恢復為使用者提供更好的體驗。
歡迎您 點選這裡 向我們提交反饋,或分享您喜歡的內容、發現的問題。您的反饋對我們非常重要,感謝您的支援!
- Unity整合華為遊戲服務SDK方式(三):Unity匯出為Android工程
- 一起看 I/O | Jetpack Compose 中的新特性
- Unity整合華為遊戲服務SDK方式(四):Unity整合Android外掛
- 一起看 I/O | Jetpack Compose 中的新特性
- 一起看 I/O | Google Play 更新一覽
- 諾基亞 X20 獲得首個 Android 13 開發者預覽版
- 一起看 I/O | Android 開發者不能錯過的 13 件事
- 一起看 I/O | Android 13 Beta 2 現已釋出
- vivo X80 Pro 適配 Android 13,推出開發者預覽版
- Google I/O 2022: 促進知識和計算機技術發展
- realme真我GT2 Pro將首批適配Android13開發者預覽版
- Android 13 Beta 版釋出,諸多亮點不容錯過
- Android 13 Beta 版釋出,諸多亮點不容錯過
- 應用歸檔 | 為您的應用釋放 60% 的儲存空間
- 警惕釣魚郵件,保護您的 Google Play 賬號資訊
- 實踐 | Jetpack Compose 中的狀態管理
- Android 遊戲開發工具大升級
- Google Play 政策更新 | 擴充套件目標 API 級別要求以增進使用者安全
- SplashScreen 優化啟動體驗 | 開發者說·DTalk
- 適用於Android開發者的Databinding自定義view雙向繫結