整理上架GooglePlay遇到的問題,各種出海接入問題


Google登錄:

自 2021 年 8 月起,新應用需要使用 Android App Bundle 才能在 Google Play 中發布。如果是通過Android App Bundle方式打包的應用,我們本地實際需要維護兩個密鑰,一個開發用的debug密鑰,一個上傳到GooglePlay時打包用的upload密鑰;由Google維護最終簽名應用的密鑰。

在對接其他第三方服務時,大都需要密鑰簽名,正式簽名要用Google提供的密鑰簽名,位於 Google Play Console -> 你的應用 -> Setup -> App integrity -> App signing key certificate 。測試的話用本地debug密鑰,一般位於C:\ Users \ <User> \.android \ debug.keystore, 默認密碼為“ android”,密鑰別名為“ androiddebugkey”。

Google登錄需要在https://console.cloud.google.com/ -> APIs&Services -> Credentials,注冊Oauth2.0客戶端,得到ClientId后將ClientId配置到代碼中。

 

 

 

 我測試時,Webclient這一項是自動生成的。然后使用密鑰SHA-1,手動添加類型為Android的client(如果需要debug和release兩個key,則創建兩個Android的client)。其中要注意的是,代碼中要使用的ClientId為Web Client中的id,測試可以成功使用Google登錄app。

查看密鑰SHA-1命令:

keytool -list -v -keystore debug.keystore

keytool工具默認位置:C:\Program Files\Java\jre1.8.0_311\bin。使用前將目錄添加到環境變量或在該目錄執行命令。

Facebook登錄:

開發文檔:https://developers.facebook.com/docs/facebook-login/

在容易出問題的在於配置簽名。如果Google是已經使用了Android App Bundle, 正式密鑰配置要使用 Google的 App signing key,具體查看上面Google登錄介紹。

設置debug時的登錄所需簽名, 可以用官方文檔上的簽名命令:

keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64

但如果Google Play的應用是使用了 Android App Bundle,正式簽名要用下面的命令(windows平台):

echo 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 | xxd -r -p | openssl base64

openssl下載地址

xxd下載地址

Google內購(Google Play Billing):

測試結算庫集成文檔:https://developer.android.com/google/play/billing/test

按照文檔完成對應操作,在支付的時候可以正確出現支付卡支付方式,即不需要實際付款,就可以測試各種支付場景。

需要特殊注意的幾點:

1.配置好商品,並確保商品已經激活。此時通過android支付sdk查詢商品庫存api還獲取不到商品信息,需要等待一段時間才能生效。具體時間不確定,可能2小時,也可能1天。

2.等到查詢到商品庫存信息能夠返回正確的信息后,調用sdk購買商品api,此時基本不太可能直接拉起購買,大多數會提示各種各樣的報錯,如app版本不包含內購內容,支付錯誤等等等等。此時可檢查以下容易出錯的項:

3.經過測試,應用發布到內部測試軌道后,錯誤信息會變化,但仍未能拉起支付。按照應用許可文檔所說,一定是要發布到封閉式開放式測試軌道中。(但是由於會改變錯誤信息,所以無法確定發布內部測試軌道步驟是否必要)。

4.發布到測試軌道后,一定要設置測試人員。此處有兩坑,(1)選擇中testers打上挑后, 要右下角保存設置。(2)仍需要測試者點擊加入鏈接,才能確保擁有測試權限。

5.發布到測試軌道並設置好測試人員后,在手機中打開 App bundle explorer -> Downloads -> Copy shareable link 的鏈接,會跳轉到Google Play 要測試app的下載界面(如果打不開,可能會用到GooglePlay開啟開發者模式,然后開啟內部應用分享功能。文檔)。如果提示找不到應用,檢查第4步,大概率因為沒有權限。Google Play要用有權限的賬號登錄。

6.可以正確的從GooglePlay下載安裝應用,但仍無法拉起支付。嘗試Google Play Console -> Setup -> License testing , 設置對應測試者郵箱,並設置License Response為LICENSED(不確定此操作是否有效)。

 

遇到問題:

Android12手機測試,facebook登錄異常,報錯日志:

05-05 18:06:00.426  9989  9989 E AndroidRuntime: FATAL EXCEPTION: main
05-05 18:06:00.426  9989  9989 E AndroidRuntime: Process: com.xxx, PID: 9989
05-05 18:06:00.426  9989  9989 E AndroidRuntime: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=64206, result=-1, data=Intent { (has extras) }} to activity {com.xxx/com.xxx.MainActivity}: java.lang.IllegalArgumentException: com.xxx: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
05-05 18:06:00.426  9989  9989 E AndroidRuntime: Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at android.app.ActivityThread.deliverResults(ActivityThread.java:5411)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at android.app.ActivityThread.handleSendResult(ActivityThread.java:5450)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:54)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2259)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at android.os.Handler.dispatchMessage(Handler.java:106)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at android.os.Looper.loopOnce(Looper.java:210)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at android.os.Looper.loop(Looper.java:299)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at android.app.ActivityThread.main(ActivityThread.java:8087)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1045)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: Caused by: java.lang.IllegalArgumentException: com.xxx: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
05-05 18:06:00.426  9989  9989 E AndroidRuntime: Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at android.app.PendingIntent.checkFlags(PendingIntent.java:375)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at android.app.PendingIntent.getBroadcastAsUser(PendingIntent.java:645)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at android.app.PendingIntent.getBroadcast(PendingIntent.java:632)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at com.facebook.AccessTokenManager.setTokenExpirationBroadcastAlarm(AccessTokenManager.java:164)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at com.facebook.AccessTokenManager.setCurrentAccessToken(AccessTokenManager.java:130)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at com.facebook.AccessTokenManager.setCurrentAccessToken(AccessTokenManager.java:110)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at com.facebook.AccessToken.setCurrentAccessToken(AccessToken.java:245)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at com.facebook.login.LoginManager.finishLogin(LoginManager.java:719)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at com.facebook.login.LoginManager.onActivityResult(LoginManager.java:242)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at com.facebook.login.LoginManager$1.onActivityResult(LoginManager.java:181)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at com.facebook.internal.CallbackManagerImpl.onActivityResult(CallbackManagerImpl.java:81)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at com.xxx.service.FacebookPlatformService.onActivityResult(FacebookPlatformService.java:216)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at com.xxx.MainActivity.onActivityResult(MainActivity.java:221)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at android.app.Activity.dispatchActivityResult(Activity.java:8630)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	at android.app.ActivityThread.deliverResults(ActivityThread.java:5404)
05-05 18:06:00.426  9989  9989 E AndroidRuntime: 	... 13 more

解決辦法:升級facebook sdk 到12.3

implementation  'com.facebook.android:facebook-android-sdk:12.3.0'

參考資料:https://stackoverflow.com/questions/69081726/android-facebook-login-library-11-2-0-crashes-android-12-targeting-s-version

 

遇到新的問題會隨時補充


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM