12

Gần đây tôi đã phát hiện ứng dụng BlackMarket, đây là một ứng dụng của Google Play-Store, nơi những người này sử dụng ứng dụng phải trả phí từ Cửa hàng Play và cho phép người dùng của họ tải xuống và sử dụng nó miễn phí.Đảm bảo ứng dụng Android đã được cài đặt từ Play-Store

Là nhà phát triển có kế hoạch tính phí cho ứng dụng của tôi, điều này làm phiền tôi và tôi muốn đảm bảo rằng ứng dụng của tôi đã được cài đặt qua Cửa hàng Play hoặc bất kỳ cửa hàng nào tôi chấp nhận.

Tôi đoán rằng cách duy nhất để xác minh loại điều này là thông qua theo dõi chiến dịch, nhưng kể từ khi Google Analytics v2, theo dõi chiến dịch được thực hiện với người nhận trong Jar.

Có cách nào khác để xác định nguồn gốc của quá trình cài đặt ứng dụng của tôi không? Có cách nào để chặn dữ liệu theo dõi chiến dịch không?

Cảm ơn.

+2

Nếu nó là một ứng dụng trả tiền trên các cửa hàng chơi bạn có thể sử dụng giấy phép API google http://developer.android.com/google/play/licensing/index.html. Điều này kiểm tra xem ứng dụng đã được mua thông qua tài khoản Google của người dùng hay chưa và bạn có thể hiển thị lỗi hay không và đưa họ đến cửa hàng phát để mua hàng – Boardy

+1

Kiểm tra điều này trước: http://developer.samsung.com/forum/thread/ getinstallerpackagename-return-value-in-samsung-phones/77/177735. Sau đó, 'PackageManager pm = getPackageManager(); Cài đặt chuỗiSource = pm.getInstallerPackageName (getPackageName()); '- Khi được cài đặt từ đánh dấu, installSource sẽ trả về một cái gì đó như' com.google.android% 'hoặc' com.android.vending% '- Tuy nhiên điều này thay đổi và bạn có để duy trì (hỗ trợ) nó trong trường hợp của một sự thay đổi - otherwize nó sẽ trả về null (từ debugger) hoặc một số tên gói khác, từ một số ứng dụng khác (những người không mong muốn :)). – g00dy

+0

@Boardy Séc này dành cho mỗi người dùng hoặc thiết bị của người dùng? nếu thiết bị có hai tài khoản thì sao? – TacB0sS

Trả lời

3

Kiểm tra liên kết này here. Sau đó

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

Khi cài đặt từ được đánh dấu, các installationSource sẽ trở lại một cái gì đó giống như com.google.android% hoặc com.android.vending%. Tuy nhiên điều này thay đổi và bạn phải duy trì (hỗ trợ) nó trong trường hợp thay đổi - nếu không nó sẽ trả lại null (từ trình gỡ rối) hoặc một số tên gói khác, từ một số ứng dụng khác (những ứng dụng không mong muốn :))

+0

Ngoại trừ 'com.android.vending' mà tất cả cài đặt mới sẽ hiển thị vì Google-Market đã chuyển sang Google Play-Store ... Tôi cũng phát hiện ra rằng 0,002% lượt cài đặt mới đến từ 'com.google .android.feedback 'khiến tôi tự hỏi đó là gì? – TacB0sS

0

Cách tốt nhất mà tôi đã biết nếu ứng dụng từ Cửa hàng Play là những gì g00dy đề xuất: sử dụng tên gói trình cài đặt.

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

nếu ứng dụng được tải về trong Cửa hàng Play (ngay cả khi ứng dụng được mua với một máy tính), installerPackage nên "com.vending.google".

+0

Thực ra @ g00dy đã đề xuất nó ... – TacB0sS

+0

cảm ơn bạn! xin lỗi vì sai lầm của tôi. Tôi đã sửa nó :) –

+0

@ TacB0sS - cảm ơn vì đã thừa nhận. – g00dy

0

Tôi tìm thấy này 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

Tôi không thực sự chắc chắn điều này mang lại cho tôi chính xác những gì tôi muốn, nhưng một khi tôi sẽ có cơ hội, tôi sẽ cung cấp cho nó một đi ... Cảm ơn – TacB0sS