返回顶部

整理上架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

 

遇到新的问题会随时补充

posted @ 2021-12-21 16:55  雨山木风  阅读(1956)  评论(0编辑  收藏  举报