Tôi có ứng dụng trong Google Play, Amazon, Samsung Apps và tôi dự định tải lên các cửa hàng khác. Tôi không muốn lập bản dựng riêng cho mỗi cửa hàng. Có cách nào để phát hiện ứng dụng đã cài đặt cửa hàng nào nếu cùng một ứng dụng được gửi đến các cửa hàng khác nhau không?Cách ứng dụng android có thể phát hiện cửa hàng đã cài đặt ứng dụng nào?
Trả lời
Bạn sẽ phải mở rộng này cho mỗi cửa hàng bổ sung, nhưng điều này sẽ giúp bạn bắt đầu
if (PackageManager.getInstallerPackageName().equals("com.android.vending")
{
//do google things
}
else if (PackageManager.getInstallerPackageName().equals("com.amazon.venezia")
{
//do amazon things
}
Không trừ khi bạn xây dựng riêng biệt. Nhưng với một kịch bản thiết lập maven/ant tốt bạn có thể tự động dễ dàng quá trình này.
tôi phát hiện cài đặt như thế này bên trong MainActivity:
//is installed via amazon, google?
String installerId = null;
try {
installerId = this.getPackageManager().getInstallerPackageName(this.getPackageName());
} catch (Exception e) {
//just in case...
}
if ("com.amazon.venezia".equals(installerId)) {
// amazon
} else if ("com.android.vending".equals(installerId)) {
// google
} else {
// others & unknown ones
}
Tôi đã thử nghiệm này trong ứng dụng cuối cùng của tôi và ứng dụng đã gửi ứng dụng trong trò chơi googe, cửa hàng amazon và cửa hàng slideme.org
Cập nhật: xem Đôi khi có tên gói trình cài đặt com.google.android.feedback dường như có liên quan đến cửa hàng google, mặc dù tôi đã thấy trong phân tích google của ứng dụng thử nghiệm của mình rằng com.android.vending là cho đến nay thường xuyên hơn. Vì vậy, nếu bạn muốn làm cho điều này thậm chí chính xác hơn, bạn cũng nên xử lý gói cài đặt này. Cũng lưu ý rằng một số thị trường (như slideme.org) đơn giản dường như không đặt id trình cài đặt gói nào cả.
Tôi KHÔNG thấy điều này đáng tin cậy trong quá khứ. Tôi đã thử nghiệm việc gửi getInstallerPackageName khi cài đặt lên máy chủ web của tôi với một ứng dụng phổ biến được tải lên 6 thị trường và 41% thậm chí không được đặt – jamesc