12

我最近發現了BlackMarket應用程序,它是Google Play-Store應用程序的一部分,這些人從Play商店購買了付費應用程序並讓其用戶下載並免費使用它。確保Android應用程序是從Play-Store安裝的

作爲一個計劃爲我的應用收取高價的開發者,這讓我感到困擾,我想確保我的應用是通過Play-Store或任何我認可的商店安裝的。

我想驗證這類事情的唯一方法是通過活動跟蹤,但自Google Analytics(分析)v2以來,跟蹤廣告系列是在Jar的接收器中完成的。

是否有任何其他方式來確定我的應用程序安裝的起源? 有沒有辦法攔截活動跟蹤數據?

謝謝。

+2

如果其在Play商店中的付費應用程序,你可以使用谷歌的許可API http://developer.android.com/google/play/licensing/index.html。這會檢查應用是否是通過用戶Google帳戶購買的,如果沒有,則可以顯示錯誤並將其帶到Play商店進行購買 – Boardy

+1

請先檢查:http://developer.samsung.com/forum/thread/ getinstallerpackagename-return-value-in-samsung-phones/77/177735。然後'PackageManager pm = getPackageManager(); String installationSource = pm.getInstallerPackageName(getPackageName());' - 當從標記中安裝時,installationSource將返回類似於'com.google.android%'或'com.android.vending%'的內容 - 然而,必須在發生變化時維護(支持) - otherwize將從其他應用程序(不需要的:))返回null(來自調試器)或其他包名稱。 – g00dy

+0

@Boardy這個檢查是每個用戶或用戶的設備?如果設備上有兩個帳戶呢? – TacB0sS

回答

3

查看鏈接here。然後

PackageManager pm = getPackageManager(); 
String installationSource = pm.getInstallerPackageName(getPackageName()); 

當從標記的安裝後,installationSource將返回類似com.google.android%com.android.vending%。然而,這種變化,你必須保持(支持)它的情況下的變化 - 否則它會返回null(從調試器)或其他包名稱,從其他應用程序(不受歡迎的:) :)

+0

除了所有新安裝應顯示的'com.android.vending'外,自Google-Market轉向Google Play-Store後,我還發現0.002%的新安裝來自'com.google .android.feedback'這讓我想知道那是什麼? – TacB0sS

0

我發現應用程序來自Play商店的最佳方式是g00dy建議的:使用安裝程序包名稱。

String packageName = appContext.getPackageName(); 
String installerPackage = appContext.getPackageManager().getInstallerPackageName(packageName); 

,如果應用程序在Play商店(即使該應用程序與PC買)下載,installerPackage應該是「com.vending.google」。

+0

其實@ g00dy建議它... – TacB0sS

+0

謝謝!對不起,我錯了。我糾正了它:) –

+0

@ TacB0sS - 謝謝承認。 – g00dy

0

我找到這 http://developer.android.com/google/play/licensing/licensing-reference.html#lvl-summary

public boolean allowAccess() { 
    long ts = System.currentTimeMillis(); 
    if (mLastResponse == LicenseResponse.LICENSED) { 
     // Check if the LICENSED response occurred within the validity timeout. 
     if (ts <= mValidityTimestamp) { 
      // Cached LICENSED response is still valid. 
      return true; 
     } 
    } else if (mLastResponse == LicenseResponse.RETRY && 
       ts < mLastResponseTime + MILLIS_PER_MINUTE) { 
     // Only allow access if we are within the retry period or we haven't used up our 
     // max retries. 
     return (ts <= mRetryUntil || mRetryCount <= mMaxRetries); 
    } 
    return false; 
} 
+0

我真的不確定這個給了我什麼我想要的,但是一旦我有機會,我會給它一個去...謝謝 – TacB0sS

相關問題