Chỉnh sửa: Tại thời điểm bài đăng này, tôi không biết về điều đó, nhưng có tồn tại getInstallerPackageName() nhưng tôi không chắc là đáng tin cậy như thế nào. Tôi cũng không chắc những gì nó trả về cho Amazon/Market, vv Nó có thể đáng xem, nhưng nếu nó không hoạt động, thì phương thức dưới đây hoạt động cho Google vs Amazon.
Bạn sẽ phải ký ứng dụng như bình thường, chạy trên thiết bị thử nghiệm của bạn, nhận giá trị sig.hashCode() từ nhật ký của bạn, sau đó thay thế -1545485543 bằng bất kỳ giá trị nào bạn nhận được cho sig.hashCode() rồi xuất và đăng nhập lại một lần nữa (VỚI KHU CÙNG TRƯỚC KHI TRƯỚC) và sau đó tải lên Amazon và Market cả hai - từ cùng một APK.
Do đó:
public static boolean isMarket(Context context){
boolean isMarketSig = false;
int currentSig = 1; // I just set this to 1 to avoid any exceptions later on.
try {
Signature[] sigs = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures;
for (Signature sig : sigs)
{
currentSig = sig.hashCode();
Log.i("MyApp", "Signature hashcode : " + sig.hashCode());
// This Log is for first time testing so you can find out what the int value of your signature is.
}
} catch (Exception e){
e.printStackTrace();
}
//-1545485543 was the int I got from the log line above, so I compare the current signature hashCode value with that value to determine if it's market or not.
if (currentSig==-1545485543){
isMarketSig = true;
} else {
isMarketSig = false;
}
return isMarketSig;
}
public static void openStore(Context context){
if (isMarket(context)){
Intent goToMarket = new Intent(Intent.ACTION_VIEW,Uri.parse("market://d" +
"etails?id=com.jakar.myapp"));
goToMarket.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(goToMarket);
} else {
Intent goToAppstore = new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.amazon.com/gp/mas/dl/andro" +
"id?p=com.jakar.myapp"));
goToAppstore.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(goToAppstore);
}
}
Về cơ bản, hashCode() mà bạn nhận được từ các ứng dụng được cài đặt trên thiết bị thử nghiệm của bạn sẽ giống một từ thị trường. Mã băm từ cửa hàng ứng dụng sẽ khác nhau vì theo https://developer.amazon.com/help/faq.html, cửa hàng ứng dụng ký tên ứng dụng có chữ ký cụ thể cho tài khoản nhà phát triển của bạn, do đó sẽ trả lại giá trị khác với những gì bạn thực sự đã ký.
Và tôi đặt phương thức isMarket và openStore trong một lớp khác được gọi là OtherClass để tôi chỉ phải mã hóa nó một lần. Sau đó, từ bất kỳ hoạt động nào mà tôi cần mở liên kết thích hợp, tôi chỉ gọi cho OtherClass.openStore (ngữ cảnh);
Lưu ý: Nó hoạt động để mở thị trường thành công, nhưng tôi chưa triển khai phương pháp này trên App Store, vì vậy tôi chưa hoàn toàn kiểm tra nó. Tôi tin tưởng nó sẽ hoạt động, nhưng có thể không đảm bảo, vì vậy nếu bạn sử dụng những gì tôi đã đề nghị và nó không thành công, xin vui lòng không giữ cho tôi trách nhiệm.
This là một trợ giúp lớn trong việc đưa ra câu trả lời để tôi có thể kiểm tra chữ ký nào đang được sử dụng.
Điều này thực sự thú vị và hữu ích. Tuy nhiên, tôi nghĩ bạn cần tách nó thành câu trả lời và câu hỏi (trả lời câu hỏi của riêng bạn) để đáp ứng Câu hỏi thường gặp về ngăn xếp ngăn xếp. Đầu tiên, nêu rõ câu hỏi, sau đó tự trả lời câu hỏi. – haimg
@haimg Đã cập nhật. :) – Jakar
Có vẻ tốt! (+1) – haimg