react-native-rustore-update
React Native RuStore SDK dlia obnovleniia prilozheniia
Obshchee
RuStore In-app updates SDK pomogaet podderzhivat' aktual'nuiu versiiu vashego prilozheniia na ustroistve pol'zovatelia.
Kogda pol'zovateli podderzhivaiut prilozhenie v aktual'nom sostoianii, oni mogut oprobovat' novye funktsii, a takzhe vospol'zovat'sia uluchsheniiami proizvoditel'nosti i ispravleniiami oshibok.
Vy mozhete ispol'zovat' RuStore In-app updates SDK dlia otobrazheniia protsessa obnovleniia prilozheniia, kotoryi obespechivaet fonovuiu zagruzku i ustanovku obnovleniia s kontrolem sostoianiia. Pol'zovatel' smozhet ispol'zovat' vashe prilozhenie v moment zagruzki obnovleniia.
Primer realizatsii
Dlia togo, chtoby uznat' kak pravil'no integrirovat' RuStore In-app updates, rekomenduetsia oznakomit'sia s prilozheniem-primerom v papke example.
Usloviia korrektnoi raboty SDK
Dlia raboty RuStore In-app updates SDK neobkhodimo sobliudenie sleduiushchikh uslovii:
- OS Android versii 7.0 ili vyshe.
- Na ustroistve pol'zovatelia dolzhen byt' ustanovlen RuStore.
- Versiia RuStoreApp na ustroistve pol'zovatelia dolzhna byt' aktual'noi.
- Prilozheniiu RuStore dolzhna byt' razreshena ustanovka prilozhenii.
Podkliuchenie v proekt
Dlia podkliucheniia paketa k proektu nuzhno vypolnit' komandu
npm install git+https://git@gitflic.ru/project/rustore/react-native-rustore-update-sdk.git
// SSH
npm install git+ssh://git@gitflic.ru/project/rustore/react-native-rustore-update-sdk.git
Zapros obnovleniia
Dlia raboty mekhanizma obnovlenii neobkhodimo vypolnit' initsializatsiiu SDK
Proverka nalichiia obnovlenii
Prezhde chem zaprashivat' obnovlenie, prover'te, dostupno li obnovlenie dlia vashego prilozheniia. Dlia proverki nalichiia obnovlenii vyzovite metod getAppUpdateInfo(). Pri vyzove dannogo metoda proveriaiutsia sleduiushchie usloviia:
- Na ustroistve pol'zovatelia ustanovlena aktual'naia versiia RuStore.
- Pol'zovatel' i prilozhenie ne dolzhny byt' zablokirovany v RuStore.
- Prilozheniiu RuStore razreshena ustanovka prilozhenii.
- Pol'zovatel' avtorizovan v RuStore.
V otvet na dannyi metod vy poluchite ob'ekt appUpdateInfo, kotoryi budet soderzhat' v sebe informatsiiu o neobkhodimosti obnovleniia.
const appUpdateInfo = await RustoreUpdateClient.getAppUpdateInfo();
console.log(appUpdateInfo);
} catch (err) {
console.log(err);
}
Ob'ekt appUpdateInfo soderzhit nabor parametrov, neobkhodimykh dlia opredeleniia dostupnosti obnovleniia:
UNKNOWN = 0,
DOWNLOADED = 1,
DOWNLOADING = 2,
FAILED = 3,
INSTALLING = 4,
PENDING = 5,
}
enum UpdateAvailability {
UNKNOWN = 0,
UPDATE_NOT_AVAILABLE = 1,
UPDATE_AVAILABLE = 2,
DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS = 3,
}
interface AppUpdateInfo {
updatedAt: string;
packageName: string;
updatePriority: number;
updateAvailability: UpdateAvailability;
availableVersionCode: number;
installStatus: InstallStatus;
}
updatedAt- data obnovleniiapackageName- imia paketaupdatePriority- prioritet obnovleniiaavailableVersionCode- kod obnovleniiaupdateAvailability- dostupnost' obnovleniia:UNKNOWN- status po umolchaniiu.UPDATE_NOT_AVAILABLE- obnovlenie ne nuzhno.UPDATE_AVAILABLE- obnovlenie trebuetsia zagruzit' ili obnovlenie uzhe zagruzheno na ustroistvo pol'zovatelia.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS- obnovlenie uzhe skachivaetsia ili ustanovka uzhe zapushchena.
installStatus- status ustanovki obnovleniia, esli pol'zovatel' uzhe ustanavlivaet obnovlenie v tekushchii moment vremeni:UNKNOWN- po umolchaniiu.DOWNLOADED- skachano.DOWNLOADING- skachivaetsia.FAILED- oshibka.INSTALLING- ustanavlivaetsia.PENDING- v ozhidanii.
Zapusk skachivaniia obnovleniia vozmozhen tol'ko v tom sluchae, esli pole updateAvailability soderzhit znachenie UpdateAvailability.UPDATE_AVAILABLE.
Skachivanie obnovleniia
Posle podtverzhdeniia dostupnosti obnovleniia vy mozhete zaprosit' u pol'zovatelia skachivanie obnovleniia, no pered etim neobkhodimo zapustit' slushatel' statusa skachivaniia obnovleniia, ispol'zuia metod eventEmitter.addListener:
UNKNOWN = 0,
DOWNLOADED = 1,
DOWNLOADING = 2,
FAILED = 3,
INSTALLING = 4,
PENDING = 5,
}
interface InstallState {
bytesDownloaded?: number;
installErrorCode?: InstallErrorCode;
installStatus?: InstallStatus;
packageName?: string;
totalBytesToDownload?: number;
}
const listener = useRef<EmitterSubscription>();
listener.current = eventEmitter.addListener(Events.INSTALL_STATE_UPDATE, (installState: InstallState) => {
console.log(installState);
});
// ...
useEffect(() => {
return () => {
listener.current?.remove();
};
}, []);
Ob'ekt installState opisyvaet tekushchii status skachivaniia obnovleniia:
installStatus- status ustanovki obnovleniia, esli pol'zovatel' uzhe ustanavlivaet obnovlenie v tekushchii moment vremeni:UNKNOWN- po umolchaniiu.DOWNLOADED- skachano.DOWNLOADING- skachivaetsia.FAILED- oshibka.INSTALLING- ustanavlivaetsia.PENDING- v ozhidanii.
packageName- nazvanie paketa.bytesDownloaded- kolichestvo zagruzhennykh bait.totalBytesToDownload- obshchee kolichestvo bait, kotoroe neobkhodimo skachat'.installErrorCode- kod oshibki vo vremia skachivaniia.
Otlozhennoe obnovlenie
Skachivanie s UI ot RuStore
Dlia zapuska skachivaniia obnovleniia prilozheniia vyzovite metod download().
const resultCode = await RustoreUpdateClient.download();
console.log(resultCode);
} catch (err) {
console.log(err);
}
Esli pol'zovatel' podtverdil skachivanie obnovleniia, to resultCode budet raven ResultCode.RESULT_OK, esli otkazalsia ResultCode.RESULT_CANCELED.
Posle vyzova metoda vy mozhete sledit' za statusom skachivaniia obnovleniia v slushatele. Esli v slushatele vy poluchili status InstallStatus.DOWNLOADED, to vy mozhete vyzvat' metod ustanovki obnovleniia completeUpdate. Rekomenduem uvedomit' pol'zovatelia o gotovnosti ustanovki obnovleniia.
Prinuditel'noe obnovlenie
Dlia zapuska skachivaniia prinuditel'nogo obnovleniia prilozheniia vyzovite metod immediate().
const resultCode = await RustoreUpdateClient.immediate();
console.log(resultCode);
} catch (err) {
console.log(err);
}
resultCode (Int):
ResultCode.RESULT_OK (-1)-- obnovlenie vypolneno, kod mozhet ne byt' poluchen, t. k. prilozhenie v moment obnovleniia zavershaetsia.ResultCode.RESULT_CANCELED (0)-- flou prervano pol'zovatelem ili proizoshla oshibka. Predpolagaetsia, chto pri poluchenii etogo koda sleduet zavershit' rabotu prilozheniia.ResultCode.ACTIVITY_NOT_FOUND (2)-- RuStore ne ustanovlen, libo ustanovlena versiia, kotoraia ne podderzhivaet prinuditel'noe obnovlenie (RuStore versionCode<191).
throwable -- oshibka starta stsenariia obnovleniia.
Pri uspeshnom obnovlenii dal'neishikh deistvii ne trebuetsia.
Tikhoe obnovlenie
Dlia tikhogo obnovleniia rekomenduetsia realizovat' svoi interfeis.
Dlia zapuska skachivaniia tikhogo obnovleniia prilozheniia vyzovite metod silent().
const resultCode = await RustoreUpdateClient.silent();
console.log(resultCode);
} catch (err) {
console.log(err);
}
Esli pol'zovatel' podtverdil skachivanie obnovleniia, to resultCode budet raven ResultCode.RESULT_OK, esli otkazalsia ResultCode.RESULT_CANCELED.
Posle vyzova metoda vy mozhete sledit' za statusom skachivaniia obnovleniia v slushatele. Esli v slushatele vy poluchili status InstallStatus.DOWNLOADED, to vy mozhete vyzvat' metod ustanovki obnovleniia completeUpdate. Rekomenduem uvedomit' pol'zovatelia o gotovnosti ustanovki obnovleniia.
Podrobnee o stsenariiakh mozhno uznat' na https://www.rustore.ru/help/.
Ustanovka obnovleniia
Posle zaversheniia skachivaniia apk-faila obnovleniia vy mozhete zapustit' ustanovku obnovleniia. Dlia zapuska ustanovki obnovleniia vyzovite metod completeUpdate().
await RustoreUpdateClient.completeUpdate();
} catch (err) {
console.log(err);
}
Obnovlenie proiskhodit cherez nativnyi instrument Android. V sluchae uspeshnogo obnovleniia prilozhenie zakroetsia.
Vozmozhnye oshibki
Spisok vozmozhnykh oshibok:
UPDATE_ERROR_DOWNLOAD = 4002,
UPDATE_ERROR_BLOCKED = 4003,
UPDATE_ERROR_INVALID_APK = 4004,
UPDATE_ERROR_CONFLICT = 4005,
UPDATE_ERROR_STORAGE = 4006,
UPDATE_ERROR_INCOMPATIBLE = 4007,
UPDATE_ERROR_APP_NOT_OWNED = 4008,
UPDATE_ERROR_INTERNAL_ERROR = 4009,
UPDATE_ERROR_ABORTED = 4010,
UPDATE_ERROR_APK_NOT_FOUND = 4011,
UPDATE_ERROR_EXTERNAL_SOURCE_DENIED = 4012,
}
UPDATE_ERROR_DOWNLOAD- Oshibka pri skachivanii.UPDATE_ERROR_BLOCKED- Ustanovka zablokirovanna sistemoi.UPDATE_ERROR_INVALID_APK- Nekorrektnyi APK obnovleniia.UPDATE_ERROR_CONFLICT- Konflikt s tekushchei versiei prilozheniia.UPDATE_ERROR_STORAGE- Nedostatochno pamiati na ustroistve.UPDATE_ERROR_INCOMPATIBLE- Nesovmestimo s ustroistvom.UPDATE_ERROR_APP_NOT_OWNED- Prilozhenie ne kupleno.UPDATE_ERROR_INTERNAL_ERROR- Vnutrenniaia oshibka.UPDATE_ERROR_ABORTED- Pol'zovatel' otkazalsia ot ustanovki obnovleniia.UPDATE_ERROR_APK_NOT_FOUND- apk dlia zapuska ustanovki ne naiden.UPDATE_ERROR_EXTERNAL_SOURCE_DENIED- Zapusk obnovleniia zapreshchion. Naprimer, v pervom metode vernulsia otvet o tom, chto obnovlenie nedostupno, no pol'zovatel' vyzyvaet vtoroi metod.