一次在準(zhǔn)備升級Google Play 中的一款應(yīng)用時候,使用了兩種方式進(jìn)行升級,
1.通過Google Play 上傳更新 新的版本進(jìn)行升級。
2.通過應(yīng)用內(nèi)檢測彈窗提示新版本更新。
兩種方式看起來沒什么問題,但是有一點(diǎn)你會忽略掉的是。Google Play 應(yīng)用商店如果你一開始上傳時就選擇了使用Google Play 提供這個Apk簽署新的密鑰,說白了就是 上傳商店可選擇 進(jìn)行 二次簽名,一般都會勾選,因為此選項有幾個好處:
- 縮減應(yīng)用程式大小;
- 即時提供所需功能;
- 提供免安裝體驗(還是需要在商店中點(diǎn)擊更新下載,后臺默認(rèn)安裝,不會展示安裝的界面)
接下來過了許久后,你的應(yīng)用因為迭代需要升級的時候。一頓操作猛如虎,先去Google Play 上傳了一個版本,另外,又在自己的服務(wù)器推了一個版本進(jìn)行應(yīng)用內(nèi)升級。此時稍不注意引發(fā)的問題,必將是應(yīng)用簽名引發(fā)的安裝失敗問題。
image.png
如何解決?
- 要知道Google Play 如果使用了2次簽名,會有兩個 APK ,在版本管理->成果庫中點(diǎn)擊下載會有 原始apk 和衍生apk(Google二次簽名的apk),如果你的應(yīng)用只發(fā)布在Google 商店的話,沒有在其它商店的話,可以將這個二次簽名的衍生apk 下載下來,推到后臺服務(wù)器進(jìn)行應(yīng)用內(nèi)提示下載更新。
- 第一次開始上傳到Google Play的時候,不采用Google 二次簽名。 直接可使用應(yīng)用內(nèi)進(jìn)行版本升級
image.png
- 如果你是在多渠道中使用, 升級的時候判斷渠道名是否是google_play,不是才強(qiáng)升。 需要排除Google Play 渠道 ,需要在獲取當(dāng)前App 的渠道號與當(dāng)前渠道進(jìn)行判斷,是否彈出應(yīng)用內(nèi)升級的窗口。
AndroidManifest.xml
<meta-data
android:name="CHANNEL"
android:value="${CHANNEL_NAME}" />
-------------------------------------------
build.gradle
productFlavors {
googleplay {
manifestPlaceholders = [CHANNEL_NAME: "google_play"]
}
official{
manifestPlaceholders = [CHANNEL_NAME: "official"]
}
}
--------------------------------------------
/**
* 獲取app當(dāng)前的渠道號或application中指定的meta-data
*
* @return 如果沒有獲取成功(沒有對應(yīng)值,或者異常),則返回值為空
*/
public static String getAppMetaData(Context context, String key) {
if (context == null || TextUtils.isEmpty(key)) {
return null;
}
String channelNumber = null;
try {
PackageManager packageManager = context.getPackageManager();
if (packageManager != null) {
ApplicationInfo applicationInfo = packageManager.getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
if (applicationInfo != null) {
if (applicationInfo.metaData != null) {
channelNumber = applicationInfo.metaData.getString(key);
}
}
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return channelNumber;
}
采用Google 提供的二次簽名,引發(fā)的地圖不顯示等問題?
包括使用 Google Map 地圖 或者其它地圖無法使用時,進(jìn)行在后臺配置 SHA1值的時候, SHA1填成Google play 中的給的 應(yīng)用程式簽署憑證 中的SHA1即可 這樣才不會出錯。
建議
本地 SHA1值;
簽名后SHA1值;
發(fā)布到商店后的重簽證書的 SHA1值
3 項都在地圖后臺進(jìn)行配置。這樣無論是測試,打包發(fā)布或者其它情況都不會有 SHA1值不正確引起的 地圖不顯示。其它某第三方的需要用到SHA1 配置也同理。