2013-03-11 40 views
16

Tôi biết đây có thể là một ảnh dài, nhưng có cách nào để phát hiện có lập trình xem ứng dụng có được lưu trữ trên cửa hàng ứng dụng Amazon vs trên Google Play không? Tôi muốn liên kết đến kho ứng dụng mà ứng dụng được tải xuống và tôi không muốn có hai APK khác nhau chỉ với sự khác biệt này nếu có thể tránh được.Phát hiện xem ứng dụng Android đã được tải xuống từ Google Play hay Amazon hay không

+0

các ứng dụng được tải từ amazon nhận được cập nhật của chúng từ đó ...........? –

Trả lời

23

Tính đến chỉ thời gian gần đây, Amazon Appstore trả về giá trị lành mạnh cho PackageManager.getInstallerPackageName()

PackageManager pm = context.getPackageManager(); 
String installerPackageName = pm.getInstallerPackageName(context.getPackageName()); 

if ("com.android.vending".equals(installerPackageName)) { 
    //do google things 
} else if ("com.amazon.venezia".equals(installerPackageName)) { 
    //do amazon things 
} 

Xem ở đây: https://forums.developer.amazon.com/forums/thread.jspa?threadID=680

Ví dụ đối với tỷ lệ ứng dụng này liên kết:

Google Play-

thị trường: // details? Id = PACKAGANAME

Amazon Store

http://www.amazon.com/gp/mas/dl/android?p=PACKAGENAME

hoặc

AMZN: // apps/và p = com.amazon.mp3

+1

Cảm ơn, tôi sẽ dùng thử! –

+0

Xin chào @AlfieHanssen. Tôi vẫn cần xác minh điều này. –

+7

Lưu ý rằng getInstallerPackageName() có thể trả về null nếu ứng dụng được cài đặt bằng ADB –

1

Cách dễ nhất là sử dụng các mã hoặc tên phiên bản khác nhau giữa Amazon và Google Play. Sau đó, bạn có thể sử dụng PackageManager.getPackageInfo để truy xuất các giá trị đó và chọn liên kết cửa hàng ứng dụng phù hợp từ đó.

Ví dụ: hậu tố tất cả tên phiên bản Amazon của bạn bằng '.65' tức là, 1.0.65. Sau đó sử dụng

public boolean isAmazon(Context context) { 
    String versionName = ""; 
    try { 
     versionName = context.getPackageManager().getPackageInfo(
      getPackageName(), 0).versionName; 
    } catch (NameNotFoundException e) { 
     // Can't find itself... 
    } 
    return versionName.endsWith(".65"); 
} 
+0

Cảm ơn. Đây là một cách để làm điều đó, nhưng tiếc là nó là một thay đổi biên dịch thời gian mà không giải quyết được trường hợp cụ thể. Tôi có thể dễ dàng thêm một thẻ meta-data vào tệp kê khai của tôi, có lẽ là sạch hơn về lâu dài, vì các phiên bản có thể vẫn giống hệt nhau cho cả hai gói. –

+0

Tốt hơn nên sử dụng PackageName thay vì VersionName bởi vì nó là lạ khi thêm một chữ cái vào một phiên bản (dễ dàng hơn để thay đổi tên gói). – Idan

+1

Ngoài ra Amazon không chấp nhận tên phiên bản khác với x.x.x.x.x, trong đó x chỉ là số nguyên. Đọc nó ở đây: [Link] (https://developer.amazon.com/public/support/submitting-your-app/tech-docs/submitting-your-app) – ARLabs

Các vấn đề liên quan