Я пытаюсь добавить функцию обновления приложения в свое приложение. настраиваю все по документации
Получение этой ошибки на моем физическом устройстве (Android): [Ошибка: ошибка sp-react-native-in-app-updates checkNeedsUpdate: ошибка: com.google.android.play.core.install.InstallException: -10: ошибка установки (-10): приложение не принадлежит никому пользователь на этом устройстве. Приложение считается «принадлежащим», если оно было приобретено из Play. (https://developer.android.com/reference/com/google/android/play/core/install/model/InstallErrorCode#ERROR_APP_NOT_OWNED)]
Получение этой ошибки на эмуляторе (Android): [Ошибка: ошибка sp-react-native-in-app-updates checkNeedsUpdate: ошибка: com.google.android.play.core.install.InstallException: -6: ошибка установки (-6): загрузка/установка не разрешена , из-за текущего состояния устройства (например, низкий заряд батареи, мало места на диске, ...). (https://developer.android.com/reference/com/google/android/play/core/install/model/InstallErrorCode#ERROR_INSTALL_NOT_ALLOWED)]
Babel.config.js
module.exports = function (api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
plugins: [
[
'module-resolver',
{
root: ['.'],
alias: {
'react-native-device-info': './react-native-device-info.js'
}
}
],
'nativewind/babel',
'react-native-reanimated/plugin'],
env: {
production: {
plugins: ['react-native-paper/babel'],
},
},
};
};
реакция-native-device-info.js
import Constants from "expo-constants"
export const getBundleId = () => {
return Constants.expoConfig?.ios?.bundleIdentifier ?? '';
}
export const getVersion = () => {
return Constants.expoConfig?.version
}
export default {
getBundleId,
getVersion,
};
checkAppUpdate.ts
import SpInAppUpdates, {
IAUUpdateKind,
StartUpdateOptions,
IAUInstallStatus,
} from "sp-react-native-in-app-updates";
import { Platform } from "react-native";
export const checkForUpdate = async () => {
const inAppUpdates = new SpInAppUpdates(
false// isDebug
);
// curVersion is optional if you don't provide it will automatically take from the app using react-native-device-info
try {
console.info("checking for update");
await inAppUpdates.checkNeedsUpdate().then((result) => {
console.info("result", result);
try {
if (result.shouldUpdate) {
let updateOptions: StartUpdateOptions = {};
if (Platform.OS === "android") {
// android only, on iOS the user will be promped to go to your app store page
updateOptions = {
updateType: IAUUpdateKind.IMMEDIATE,
};
}
if (Platform.OS === "ios") {
updateOptions = {
title: "Update available",
message:
"There is a new version of the app available on the App Store, do you want to update it?",
buttonUpgradeText: "Update",
buttonCancelText: "Cancel",
};
}
inAppUpdates.addStatusUpdateListener((downloadStatus) => {
console.info("download status", downloadStatus);
if (downloadStatus.status === IAUInstallStatus.DOWNLOADED) {
console.info("downloaded");
inAppUpdates.installUpdate();
inAppUpdates.removeStatusUpdateListener((finalStatus) => {
console.info("final status", finalStatus);
});
}
});
inAppUpdates.startUpdate(updateOptions);
}
} catch (error) {
console.info("nested error", error);
}
});
} catch (error) {
console.info("error", error);
}
};
Может ли кто-нибудь помочь мне с правильными рекомендациями по реализации? Спасибо
Я пытаюсь добавить опцию обновления в приложении, чтобы пользователи могли обновлять мое приложение через него (автоматическое всплывающее окно).
В качестве предварительного условия
Чтобы протестировать функциональность обновления внутри приложения, вам необходимо сначала распространить приложение через внутренний тестовый трек в магазине Google Play.
Теперь давайте обсудим сообщение об ошибке
«com.google.android.play.core.install.InstallException: -10: Ошибка установки (-10): приложение не принадлежит ни одному пользователю на этом устройстве».
Указывает, что приложение, которое вы пытаетесь обновить, не установлено на устройстве. Это означает, что приложение не было получено из магазина Google Play, и поэтому у устройства нет необходимых разрешений для его обновления.
Чтобы решить эту проблему, вам придется добавить проверку в свой код.
try {
getPackageManager().getPackageInfo("com.example.app", PackageManager.GET_ACTIVITIES);
} catch (PackageManager.NameNotFoundException e) {
// App is not installed
}
Если приложение не установлено, вы можете инициировать намерение Google Play, чтобы пользователь установил приложение, используя следующий код:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://play.google.com/store/apps/details?id=com.example.app"));
startActivity(intent);
Цель установщика Apk:
Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
intent.setData(Uri.parse("file:///path/to/app.apk"));
startActivity(intent);
Это собственный код, который вы можете использовать, создав интерфейс JavaScript и вызывая его из собственного кода реагирования.
Справочная ссылка:
@Хасиб, рад слышать, что ты решил проблему :-)
Спасибо. я забыл включить и использовать внутреннее тестирование.