Lập trình tìm ra cài đặt cửa hàng ứng dụng đến từ đâu?


8

Lý lịch

Trong ứng dụng của mình, tôi có nút 'đánh giá tôi'. Nó đi theo đường dẫn thông thường - người dùng nhấp vào, nó bắt đầu một ý định và mở danh sách của ứng dụng trên Play Store. Tất cả đều tốt và tốt. Bây giờ tôi muốn thử phân phối ứng dụng của mình qua các cửa hàng ứng dụng khác nhau (ví dụ như Amazon), vì vậy, rõ ràng, nếu người dùng nhấn nút 'đánh giá tôi', tôi không muốn nó đưa người dùng đến Cửa hàng Google Play nhưng với bất cứ điều gì cửa hàng họ đã nhận nó từ.

APK cho mỗi cửa hàng

Điều này là có thể, đúng, nhưng tôi nghĩ nó sẽ là một cơn ác mộng hoàn toàn để quản lý (như tạo APK mới cho mỗi cửa hàng mỗi khi tôi phát hành bản cập nhật mới.

Vì vậy, tôi đang tìm kiếm một cái gì đó giống như mã giả này:

if(rate-me button pressed){

    if (from Google Play Store){
        Go to Google Play Store
    }
    else if (from Amazon Store){
        Go to Amazon Store
    }
}

Và như thế.......

Tôi đoán có một cách (mà một số ứng dụng chắc chắn phải sử dụng) nhưng tôi không biết làm thế nào để đi về nó.


1
Vậy ... tại sao không tạo cùng một ứng dụng, nhưng quyết định dựa trên một số tài nguyên? Sẽ không thêm open_store.txt và chuyển đổi dựa trên nội dung hoạt động chứ?
wonderra

Xin chào @wondra, tôi không chắc tôi hiểu ý bạn là gì? Bạn có nghĩa là tạo một tệp văn bản và sau đó ghi vào nó khi ứng dụng được cài đặt (với giá trị được xác định, giả sử 1 cho Google Play, 2 cho Amazon, v.v.) Sau đó truy vấn tệp đó khi người dùng đạt tỷ lệ cái nút? Nếu đó là những gì bạn muốn nói, điều đó tốt nhưng câu hỏi vẫn sẽ giống nhau, làm thế nào để tôi lập trình xác định cửa hàng nào được cài đặt ứng dụng để tôi có thể ghi vào tệp ngay từ đầu? Tôi có thể đã hiểu lầm bạn mặc dù !!
BungleBonce

5
Chỉ cần triển khai 3 phiên bản ứng dụng của bạn với phần tổng hợp có điều kiện; mỗi người một con đường khác nhau. Đường dẫn biến / mã có thể thay đổi tùy thuộc vào biến được biên dịch.
Vaughan Hilts

@VaughanHilts bạn có thể giải thích rõ hơn không? Hoặc có thể gửi ý tưởng đầy đủ như một câu trả lời? Cảm ơn!
BungleBonce

1
Tôi chuẩn bị nói chính xác như Vaughan Hilts đã nói. Tạo các phiên bản khác nhau của ứng dụng cho các cửa hàng khác nhau.
Panda Pajama

Câu trả lời:


7

Tôi sẽ giả sử bạn đang viết bằng Java khi bạn viết cho Android, nhưng nếu bạn không viết, bạn có thể tra cứu các phương thức trong ngôn ngữ bạn chọn để có cùng loại kết quả. Do Java không được tích hợp hỗ trợ cho việc biên dịch có điều kiện, nên có một số điều khá dễ dàng bạn có thể làm ở đây; đôi khi giải pháp công nghệ thấp là giải pháp tốt nhất.

Triển khai một ứng dụng khác nhau được biên dịch từ các mã khác nhau cho mỗi cửa hàng ứng dụng. Nó có thể đơn giản như vậy. Chỉ cần có một chuỗi toàn cầu (hoặc không, đóng gói nó ở nơi logic phù hợp) và chỉ cần gán cho nó một giá trị, biên dịch và triển khai. Nó là dễ dàng.

Nó có thể là một chuỗi, một giá trị enum hoặc số nguyên. Điều đó không thực sự quan trọng - miễn là mỗi giá trị là duy nhất cho mỗi cửa hàng ứng dụng. Tôi muốn đề xuất một enum được gõ mạnh với các tùy chọn như "Amazon", "GooglePlay", "XXXX", "ZZZZ", "YYYY". Viết tập lệnh để thay đổi giá trị này hoặc chuyển các cờ biên dịch bằng các công cụ của bên thứ 3 nếu bạn muốn điều này được tự động hóa.

Tự động hóa nó lên

Nếu bạn muốn tiến thêm một bước này, hãy phân tích tùy chọn dưới dạng tệp tài nguyên . Viết kịch bản, một cho mỗi triển khai. Có một tệp có tên là "store.dat" và ghi giá trị của cửa hàng mà nó đang được triển khai vào tệp khi được triển khai, nếu bạn ở trong Linux hoặc OSX, nó có thể đơn giản như

echo "Google" > resources/store/store.dat
RUN COMPILATION STUFF HERE

Tạo một tập lệnh để thực thi tất cả các tập lệnh này trong bước khóa và bạn có một giải pháp tự động, mạnh mẽ.


Cảm ơn vì @VaughanHilts này, đã có một vài câu hỏi, hiện tại, tôi có một giá trị chuỗi có tên là 'Thị trường' chứa URL cho thị trường, đây có phải là ý nghĩa của bạn không, và chỉ thay đổi nó khi tôi biên dịch, vì vậy Tôi sẽ có một APK khác nhau cho mỗi thị trường?
BungleBonce

Điều chắc chắn. :) Bạn có thể làm điều này bằng nhiều cách khác nhau, viên đạn ma thuật chỉ đảm bảo bạn có thể xác định loại cài đặt.
Vaughan Hilts

OK, rất tốt @VaughanHilts, tôi hiểu phần đó, điều tôi vẫn chưa rõ là bit này: "Viết tập lệnh để thay đổi giá trị này hoặc chuyển cờ biên dịch bằng công cụ của bên thứ 3 nếu bạn muốn điều này được tự động hóa" - Tôi chỉ không rõ ý nghĩa của việc này là gì - nếu tôi tự thay đổi chuỗi thị trường của mình, có cần phần này không khi tôi bắt đầu ý định của mình, dù sao tôi cũng sẽ chuyển chuỗi thị trường cho nó để nó mở thị trường đó - cảm ơn một lần nữa, tôi hy vọng bạn có thể giải thích chi tiết hơn một chút để tôi hiểu chính xác! :-) Chúc mừng
BungleBonce

@ user22241 Xin chào, không cần phải thực hiện phần đó trừ khi bạn không muốn phải thay đổi chuỗi bằng tay cho mỗi bản dựng. Viết kịch bản sẽ chỉ làm cho việc thay đổi và triển khai tự động. Chúng tôi có thể tiếp tục trò chuyện nếu bạn có thêm câu hỏi.
Vaughan Hilts

Thật tuyệt @VaughanHilts, tôi có một câu hỏi ngớ ngẩn, làm thế nào để trò chuyện trên trang web này hoạt động? Tôi chưa bao giờ sử dụng nó. Cảm ơn!
BungleBonce

2

thử cái này:

try {
    String packagename = context.getPackageName();
    final PackageManager pm = context.getPackageManager();
    PackageInfo pInfo = pm.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS);
    String installerPackagenName = pm.getInstallerPackageName(packageName);
    if(installerPackagenName.equalsIgnoreCase("com.amazon.venezia")){
        //Go to Amazon Store
    } else if (installerPackagenName.equalsIgnoreCase("com.android.vending")){
        //Go to Google Play Store
    } else {

    }
} catch (PackageManager.NameNotFoundException e) {
    e.printStackTrace();
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.