簡體   English   中英

Android:在我們的應用程序的預安裝版本中尋找一種解鎖隱藏功能的方法

[英]Android: Looking for a method to unlock hidden features in pre-installed version of our app

恐怕這個問題有點開放,但我希望這是有道理的,因為情況有點不尋常......

我們想要達到的目標

我們的一款應用程序將預裝在即將由移動運營商分發的 Android 手機上。 但是,在該預安裝的應用程序中,應該解鎖一些原本不可用的功能(對於從 Google Play 商店安裝應用程序的用戶)。 例如,為新的付費訂閱延長免費試用期。

到目前為止我們已經提出了什么

一種選擇當然是應用程序的特殊構建,通過某些功能切換啟用隱藏功能。 然而,這個特殊的構建可能會在用戶打開應用程序之前被 Play 商店的自動更新覆蓋。

所以到目前為止,我們最好的猜測是預安裝我們的主應用程序的正常版本和其他一些沒有或只有極少 UI 的應用程序。 然后,主應用程序將檢測到其他關鍵應用程序的存在(通過 package 管理器)並基於此解鎖隱藏的功能。

AFAICT 這是在 Google In App Purchases 支持非消耗性一次性產品之前處理付費應用程序免費試用的方式。 只要兩個應用程序都使用相同的密鑰簽名,它也應該仍然有效,並且從 Android 11 開始,主應用程序在AndroidManifest.xml中聲明密鑰。

到目前為止正確嗎?

但...

理想情況下,每個設備只能使用一次隱藏的功能,即用戶應該只能為一個新訂閱申請延長免費試用期,而不是為他們的鄰居和他們的狗申請額外的免費試用期。

這不是一個非常強的要求,因此我們正在考慮在應用程序和關鍵應用程序之間添加一些通信,並且關鍵應用程序將存儲之前已聲明該好處的事實。 當然,這可能可以通過刪除關鍵應用程序的應用程序數據來規避,但總比沒有好......

所以,問題:

  • 有沒有辦法大部分/完全隱藏用戶的關鍵應用程序 這樣關鍵應用程序的 function 至少會有些模糊?
  • 還有其他我們忽略的方法嗎? 就像,有沒有辦法在運營商可以為我們設置的 Android 圖像中設置某種全局變量 - 比如com.exampleapp.unlock.hiddenfeature1 = true - 我們可以查詢哪個而不是檢查關鍵應用程序的存在? 這可能仍然容易受到多種用途的影響,但也許也有辦法禁止這種情況?

還有什么?

從技術角度來看,一個明顯的方法是查詢設備的 IMEI(也許對於仍然可能的預安裝應用程序?),然后將其與符合條件的設備列表進行比較,或者至少跟蹤已聲明隱藏功能的 IMEI。 但是,當然,出於數據隱私的原因,這是不可能的。

所以,我希望我明確了我們的目標,非常感謝任何建議、建議和意見!

語境

  • 預裝應用程序: PIA
  • Google-Play 應用程序: GPA

問題

  • PIA是一種“風味”
  • PIA 利用“共享偏好”留下 GPA 應用程序可以“拾取”的標記
  • 任何其他形式的“共同點”。

這些問題是您無法避免失敗的各種情況,特別是如果用戶在被 GPA 更新或簡單的 SharedPreferences 清理/重新安裝之前從未打開您的應用程序。

想法?

想法很便宜,所以對所有這些都持保留態度。 我主要是在大聲思考,因為我發現這是一個有趣的問題。

  1. 您是否考慮過某種形式的Licencing 例如:使用 Google Play許可

  2. 一種動態交付形式可以幫助您嗎?

  3. 讓一個 PIA 只是一個啟動器來啟動您的應用程序的特殊風格怎么樣? (用戶可以通過即時應用程序獲得?PIA 不會被 GPA 更新,因為它不會被觸及(如果是,它只會被你觸及,是的,用戶可以再做一次,但隨后你會為不可能的事情而戰)。你將不得不接受一些用戶會“作弊”。但是通過使用 PlayStore 和所有這些“功能”,你總是可以控制更多的東西。不確定 Play 商店是否是什么東西這些新設備將有或沒有。

  4. 除此之外,您將不得不自己處理這個服務器端。 擁有一個用戶“注冊”或請求試用的應用程序,然后從那里獲取。

目前我想不出其他的想法。

我不是在尋找代表,請隨意選擇更好的回應,但請告訴我們您選擇做什么。 ;)

嗯,讓我看看我是否理解正確。

您在 Google Play 上有這個應用程序,並且相同的 package 也將預裝在某些設備上。 我假設您可以控制如何在設備上安裝此應用程序。 含義:預裝的將是無法從手機中刪除的系統應用程序 而且,如果您從 Play 商店下載它作為該設備上已經預安裝了該應用程序的更新,它將保留為系統應用程序。

您基本上可以通過基本檢查來判斷任何設備上安裝了哪個版本的應用程序:

boolean isSystemApp = (getApplicationInfo() & ApplicationInfo.FLAG_SYSTEM) != 0

這個簡單的調用應該告訴您應用程序是否已預安裝到設備中。 即使用戶之后收到更新,它也不會改變。 如果此標志為假,您可以簡單地假設它是側面加載的或從 Google Play 商店安裝的(我的意思是沒有預先安裝它)。

如果應用程序是系統應用程序,您可以打開這些功能,否則將其關閉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM