使用 Android 備份和恢復功能留住用户

語言: CN / TW / HK

△  使用 Android 備份和恢復功能留住用户

  • Bilibili 視頻鏈接

    https://www.bilibili.com/video/BV1eL4y147we/

隨着移動設備廠商不斷推出新的型號,用户更換設備的頻率也越來越頻繁。替換新機時,最讓用户頭疼的問題之一就是數據遷移了。那麼不完善的數據遷移會給用户帶來哪些糟糕體驗呢?我們從下面的案例來看看用户的煩惱。

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 版應用之間的數據傳輸感興趣,請通過該 電子郵件地址 聯繫我們: 

[email protected]

△  通過數據線連接設備進行備份和恢復

對於從 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 作為目標平台,因為該屬性是從這個版本才引入的。

如需獲取有關配置自動備份的更詳細説明,請參閲:

https://developer.android.google.cn/guide/topics/data/autobackup

鍵值對備份 (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 中指向該代理。如果您對鍵值對備份感興趣,請參閲 實現鍵值對備份的分佈指南

https://developer.android. google.cn /guide/topics/data/keyvaluebackup

使用 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 的更多信息,請參閲:

https://developers.google.cn/identity/blockstore/android

測試

在您根據需要完成所有配置後,無論是使用自動備份還是鍵值對備份,都應進行一些測試,以確保在恢復後首次啟動應用時,獲得所需的狀態,這一點非常重要。

測試非常簡單,您可以通過特殊的工作流使用單個設備或模擬器專門模擬應用的雲備份和設備到設備傳輸。

如需獲得關於 測試 的詳細説明,請參閲:

https://developer.android.google.cn/guide/topics/data/testingbackup

持續更新您的實現方式

最後,使您的配置保持最新版本同樣很重要。隨着應用不斷演化並增加新功能,請確保備份和恢復涵蓋新增的內容。如果您使用的是自動備份可能不需要執行任何操作,默認情況下會包含所有新數據。如果您使用的是鍵值對備份,請更新 BackupAgent 以包含任何相關的信息。

關於 Android 12 的重要更新

應用開發者向我們反饋,他們擔心 adb 備份會導致應用數據輕易被提取。為了解決這個問題,我們已經關閉了所有應用的 adb 備份。因此,啟用備份和恢復不會使您的應用受到 adb 備份的影響。但您仍然可以根據需要將 adb 備份用於測試和開發目的。

其次,我們引入了 dataExtractionRules 配置,作為控制自動備份的新方法。我們正在逐步淘汰舊的方法,即 allowBackup 標誌和 fullBackupContent 配置。建議您在 Android 12 及更高版本中使用 dataExtractionRules。同時為早期操作系統版本保留 fullBackupContent 配置。

如需獲得上述更新的詳細説明,請參閲:

https://developer.android.google.cn/about/versions/12/backup-restore

總結

我相信當您的應用數據同步到新設備上時是十分令人振奮的。好消息是,目前已有超過 20 億台 Android 設備支持免費備份到雲端。從 2022 年 1 月起 Wi-Fi 和數據線傳輸將擴展到所有新的 Android 設備。所有這些都將默認生效,建議您確保這些功能已開啟。如果您有大量數據或敏感數據,可以對導出的內容進行微調。不要忘了新的 BlockStore API,您可以使用它安全地處理密碼。

  • 更多信息

    https://developer.android.google.cn/guide/topics/data/backup
  • 聯繫我們

    [email protected]

希望這些內容對您有幫助,同時希望您利用備份和恢復為用户提供更好的體驗。

您也可以通過下方二維碼向我們提交反饋,或分享您喜歡的內容、發現的問題。您的反饋對我們非常重要,感謝您的支持!

推薦閲讀

如頁面未加載,請刷新重試

點擊屏末   閲讀原文  |  即刻了解 數據備份概覽