整理上架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
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'
遇到新的问题会随时补充