Как условно использовать специфичные для поставщика API для приложений Android?
Как магазины Android-приложений, предлагающие API-интерфейсы для конкретных рынков, как мне создать приложение для Android, в котором условно используются библиотеки для конкретных поставщиков? Например, Amazon предлагает свои собственные покупки в приложении и API GameCircle. У Google есть свои собственные API лицензирования, и теперь у Ouya будут свои собственные API для контроллеров IAP и оборудования.
С распространением этих SDK для конкретных поставщиков становится все труднее поддерживать несколько отдельных сборок моих игр для Android. Я хотел бы знать, как создавать свои проекты, чтобы мой код мог просто проверять во время выполнения различные API и использовать их, если они доступны. Что-то вроде
if (amazon api is available)
// Do some amazon-specific stuff
Во время сборки я связывался со ВСЕМИ библиотеками, а затем загружал одно и то же универсальное приложение в каждый магазин.
1 ответ
Я использую это в настоящее время.
private boolean isAmazonInstall()
{
PackageManager pm = getPackageManager();
String installationSource = pm.getInstallerPackageName(getPackageName());
if (installationSource != null && installationSource.startsWith("com.amazon"))
{
return true;
}
return false;
}
Предположительно, для установки Amazon возвращаемое значение getInstallerPackageName равно "com.amazon.venezia". Для приложений, установленных из Google Play, результатом будет "com.android.vending" (хотя раньше это было "com.google.android.feedback". Ручная установка APK возвращает ноль).
Я не смог найти официального подтверждения того, что этот подход действителен. Но я не смог найти лучшего подхода.