android-GooglePlay上架
android-GooglePlay上架
前篇
- 复盘一年项目,APP 上架 GooglePlay 攻略及本地化运营建议- https://www.chainnews.com/articles/686092642179.htm
- 1年后,我对APP上架海外应用商店的复盘与本地化的思考 - https://www.chandashi.com/blog/?p=10123
- 3天,Google Play ASO从入门到精通 - https://www.jianshu.com/p/ec698117773e
马甲包
- App马甲包是什么? - https://www.zhihu.com/question/285512833
- 什么是马甲包?有什么作用? - http://ourjs.com/detail/5a87cfd93506837194998c2d
一、什么是马甲包
马甲包是利用各大市场规则漏洞,通过技术手段,多次上架同一款产品的方法。马甲包和主产品包拥有同样的内容和功能,除了icon和应用名称不能完全一致,其他基本一致。
二、为什么做马甲包,做马甲包有什么好处?
最核心的作用是获取有效客户。另外一方面是增加关键词的覆盖量,众所周知,单个APP只能有100个字符的关键词,多个APP就意味着可以覆盖N×100个字符的关键词,关键词覆盖越多,就意味着能够被更多的客户搜索到,有展现量,才有下载量,有下载量才有可能发展成为有效客户。
抗风险
正常情况下,任何一款产品都是要不断的更新功能的。如果我们直接在主包上更新,一旦新功能不被用户接受那就损失大了,我们前期大量投资带来的用户将会流失,这对很多产品开发者来说是不可承受之痛。
如果使用马甲包,则可以随意测试新功能,好的功能就在主包上迭代,不好的也无所谓,马甲包本身就是来背锅的。
导量
主包和马甲包属于同一个平台,用户信息可以共享
通过弹窗,广告,Push等引导用户下载主App。有一部份App接了网盟相互导流。
刷榜
①积分墙;理论上是真实用户,冲榜量级大,可靠后续补量维持;但冲榜和维榜费用高昂,非一般产品所能承受。
②真机;利用真实机器操作任务,但不能抹机,否则就成假量了,成本相对较低。
③技术流;机刷,服务器控制操作,成本最低。
上面三种方式,机刷是最便宜的,但是风险高,容易被发现下架,所以一般用马甲包来做机刷,以此来抵抗风险。
apk 要求
需要支持64位要求
从2019年8月1日起,所有版本都必须符合 Google Play 64位要求。
Unity自2017年LTS起支持x64。
相关文章
Unity导出Android 64位 - https://cloud.tencent.com/developer/ask/222895
Mono和IL2CPP选哪个更合适? - https://answer.uwa4d.com/question/5abdea21425802635474fbb4
官方: 确保您的应用支持 64 位设备 - https://developer.android.com/distribute/best-practices/develop/64-bit?hl=zh-cn
有说明 unity 的编译设置
api 级别至少为 26
官网解释: https://developer.android.com/distribute/best-practices/develop/target-sdk?hl=zh-cn
您上传的 APK 需要符合 Google Play 的目标 API 级别要求。Google Play 要求新应用(自 2019 年 8 月 1 日起)和应用更新(自 2019 年 11 月 1 日起)将目标 API 级别至少设为 28(至少为 Android 9.0)。在这两个日期之前,新应用和应用更新的目标 API 级别必须至少为 26(至少为 Android 8.0)。
不然会报错
注册开发者账号 问题
相关资料
- 如何注册Google Play 开发者账号(含收款设置) (好文) - https://juejin.im/post/5cbeb4b95188250a6b1838bc
- Google Play开发者账号注册 - https://blog.csdn.net/u014581901/article/details/51625981
- Google Play 开发者账号注册流程 - https://zhuanlan.zhihu.com/p/56604318
开发者注册问题
Google Play 区分 个人和企业 账号??
Google Play 不像 AppStore 那样 区分 个人和企业 账号的吧, 只是注册开发者账号, 然后有收费的话在开通商户??
行用卡问题
可以使用香港的行用卡.
最好不用使用 中国区 的信用卡, 会有 结算及汇率大 的问题. 参考: 如何注册Google Play 开发者账号(含收款设置)上 印度地区 Google Play 的话, 注册账号时是否需要 切到 印度地区的 vpn注册才有效? (比如 美区苹果账号 就一定要是美国 vpn下才能注册到) ??
不需要印度vpn,只要vpn就可以,创建好应用后再选在哪个地区上
注册时开发者名称
个人开发者名义是可以的, 最好是发行地区的 语言名称, 也不需要是真实的
地区账号 注册. 选择地区时 根据访问的ip 还是说 有可以让你选择的地区选项?
这个一定要注册账时选择印度地区, 还是说 我已经注册过得账号可以切到印度地区? 苹果账号的就是注册时就决定了
不能选,通过vpn全局模式能切,不过要请缓存一系列操作
注册就定的
- 好像有办法通过vpn切换地区, 待验证
反正测试账号可以无限申请,而且也可以绑同一种卡
注册 Google Play 开发者账号仅可以发布免费应用,发布收费应用需注册 Google Checkout 商家账户(即通过Google Checkout商家账户绑定银行卡,用于收款)??
商户账号我记得是开发者账号的收费账号。先注册开发者账号,25美金那个.
Google Play 没有像苹果那样分企业账号,还有绑定的卡最好是多币种的,因为有朋友用国内单币种卡绑定后,收不到卢比,不确定是不是因为卡的关系
注册开发者账号条件
- 手机号. 香港的手机号, 用来注册 Google 账号.
- 信用卡. 香港的 带有Visa或Master等标志的信用卡1个
- 注册时vpn, 切到香港全局模式, 浏览器请缓存.
虚拟信用卡
- 用虚拟信用卡注册Google Play开发者账号 - https://www.cnblogs.com/liuhaitao/p/6699427.html
使用 全球付的 虚拟信用卡 - http://www.globalcash.hk/
注册商户
注意:商业账户需要填写客户信息和公开信息,客户信息中的国家/地区,只能填写一次,后期无法修改,收款账户的所在地和填写的这个国家必须保持一致。
期间,我最想吐槽的是——
我们在注册商家账户时,需要填写地址,不知情的小伙伴都会老老实实地填写中国,而按照谷歌的要求,就只能用国内的银行卡收款,悲催的事情就此发生——人家美国的账号,满1美元就能结算,而你却要辛辛苦苦攒到100美元才出账,还会扣除10-30美金左右的电汇费用,最最最惨的是,你在结汇成人民币时,经常会被银行卡审核资料,需要一趟趟往银行跑,把自己折腾地疲惫不堪。
挣钱不易,那我把账号改成美国的可以吗?
亲,不行哦,注册时会要求选择所在国家,选定之后就不能再修改(微笑脸)。
所以,有美国银行卡的小伙伴可以直接注册美国的账号来收款,像我这种注册了多个开发者账号,但银行卡不够或者嫌管理起来比较麻烦的,可以试试PingPong收款,不受结汇限制,汇率也比银行更有优势,他们的服务相当专业,态度也不错,需要的可以了解一下。
上架 Google Play
需要支持的 cpu 架构
打包格式是 apk, 综合 通用性 和 包体大小, 只需要支持三个架构就行 arm64-v8a, armeabi-v7a, x86, x64会比x86流程,但是向下兼容,x86加上肯定没问题
打包格式是 aab, 就需要支持四个架构 arm64-v8a, armeabi-v7a, x86_64, x86
测试上架应用的流程, 比如说上架 地区a
需要一台有 Google Play 的手机? 也就是要 港版的手机 就可以测试? 还是或一定要 地区a 的手机?
和苹果一样,只要有该地区的google账号就可以
国行的安卓貌似都没有 Google Play store, 找教程安装谷歌全家桶就可以
修改 Google Play 地区
测试地址
有几个是必要填的, 其他都是可以乱填
印度地址
州:Haryana, 区:Culver City, 邮编: 121006日本地址
县: 千葉県, 区: 館山市, 邮编: 261-7114香港地址
区域: 九龙, 区: 尖沙咀, 地址: 梳士巴利道3號
切换地区流程
开发者 切换地区
Google play转区的操作流程,2018年7月份 - https://www.youtube.com/watch?v=gNkFUBNZqsA
怎么切换google play 地区? (和上面的一致) - https://www.zhihu.com/question/21999528
Google 支付中心 - https://pay.google.com/payments/home#settings
- 删除掉 付款资料
- 清除浏览器缓存
- 使用 对应地区 的 vpn 全局模式
- 打开 Google Play 网页就是 对应地区 了.
普通用户切换地区
pc浏览器
- 清空缓存.
- 切到目标区域 vpn, 比如说日本
- 打开 play商店, 就是 vpn 区域 的 Google Play 商店了
Android
- 杀掉 play商店 进程
- 清空缓存. 设置 -> 应用管理 -> 搜索到 Google Play 商店, 点击 存储 -> 清空缓存
- 切到目标区域 vpn, 比如说日本
- 打开 play商店, 就是 vpn 区域 的 Google Play 商店了, 就可以下载到上架地区的app. 之后可以切到比较块的 vpn, 只要不清缓存商店所在区域就一直会是 日本.
无法切换地区的账号
不建议已经绑定过银行卡信息的谷歌账户使用此方法进行谷歌账户跨区。一定更改谷歌账户会影响一些功能,如对付款工具有影响,不同地区的 Google 帐户无法加入同一个家庭群组。
谷歌账户余额高于10美元的无法更改谷歌账户的区域
谷歌商家账户不能更改谷歌账户的区域
下载上架地区app
比如在 Google Play 上架了 地区 a, b, c 三个地区.
- 用户第一次安装, vpn 地区必须切到这三个地区 ip 才能 搜索,下载,安装 app. 否则会会提示 不可安装. 参考: 普通用户切换地区 中的 pc,Android 方式
- 用户安装过一次后 卸载再次安装, 貌似就不受 vpn ip 限制, 随意一个 vpn 都可以下载安装.
app 测试流程
正式包 正式测试
- apk 上传到 Google Play, 然后选择需要需要上架的国家进行上架
- 使用对应上架国家的 Google 账号去 Google Play 上下载下来测试.
正式包 后台下载测试
从后台下载 apk 或 aab
如果 是 aab 的话需要解除 apk 来测试.
内测版本
将测试人员的 Google 账号加入测试列表
等 app 审核过后, 状态变为 已发布 状态后, 就可以获取到测试 url, 将 url 发给测试人员
在 浏览器 中 粘贴 url, 然后 进入 Google Play 中安装.
商店搜索
要用上架地区的 vpn 才能搜索到 app
- 清出 Google Play Store 的缓存
- 切换到上架地区的 vpn
- 打开 Google Play Store 应用, 搜索 app. done!
上架流程
审核时间
上架应用审核一般需要两天, 更新应用审核一般需要 半个小时 左右
相关资料
- 油管教程 - Releasing to Google Play Store (in 2019) [Tutorial] [C#] - Unity tutorial 2019 - https://www.youtube.com/watch?v=I1K6q3SItiA
可以发布 改为 正式发布
参考: https://www.jianshu.com/p/e40e78a279b7
当左侧栏的 所有 打钩 都变为绿色时, 就代表可以发布了.
相关要求
build.gradle 配置为
debuggable = false
的 apkversion code 要比之前的大
要有 隐私政策 和 服务条款
每天貌似只能更新 3~4次
必须加入应用签名计划, 也就是这个
定时发布
- 使用定时发布模式发布应用 - https://support.google.com/googleplay/android-developer/answer/9543912?hl=zh-ch
- Google Play商店对新应用的批准现在需要更多时间 - http://www.xmtcb.com/keji/201909/2574.html
默认情况下,应用会使用标准发布模式. 但是一般更新都需要服务端客户端同时更新, 所以必须使用 定时发布模式. 参考: 发布应用 - https://support.google.com/googleplay/android-developer/answer/6334282?hl=zh-Hans
开启定时发布
进入某个 app 后, store presence -> store listing, 最下面有个 timed publishing, 开启即可
!!! 每一次发布新内容, 都必须要开启 定时发布 !!!
返回App Release并通过单击Save,Review 和 Start rollout to production 来创建 Production 版本。等待批准生产版本。
发布批准后,页面右上角 单击“Go Live (发布更新)” 。实测立马生效 (30s 内)
unity 出包要求
只有一种选择就是 il2cpp, 勾选 v7,v8, 一定不要勾选 x86. 应为 Google Play 要求 支持 32位 的就必须支持 64位, 而 unity x86 架构 只有 32位, arm 架构的就有 32位 和 64位.
- 要深刻理解官方这句话: 应用无需支持所有 64 位架构,但对于您支持的每种原生 32 位架构,则应用都必须包含相应的 64 位架构。( https://developer.android.com/distribute/best-practices/develop/64-bit )
常见问题
审核时间
https://www.zhihu.com/question/25993111
游戏类APP,第一次审核时间是1-2个工作日,如果没过,那就不好意思,打回来重新改。第一次审核通过后,如果你要更新,一般情况下1-2个小时就可以了,如果没过,那还是会打回来让你再改一下。
上传apk一定是不可调试的
也就是 build.gradle 配置为
debuggable = false
的 apk警告未优化
报这个警告是因为检测到上传的是 apk 包, 且 apk 包里面有多个 cpu 架构的 so 库, 用户下载时会下载整个 apk 包, 根据具体手机的 cpu 使用对应的 so 库.
解决办法: 使用 Google 动态化框架 App Bundles, 也就是 打 aab 包, 这个 aab 包其实是 n 个独立的 apk 包组成的, 不同 apk 里只有一种 cpu 架构的 so 库. 用户在 Google Play 下载 app 时, Google Play 会检测该手机的 cpu 架构, 下载指定的 apk 这种方式也仅限于上架 Google Play.
踩坑
上传 aab 报错
报错: Upload failed The Android App Bundle was not signed.
原因可能是 gradle 构建配置出错.
没有指定签名配置, 使用的 debug 签名.
debuggable
没有设为 true. gp 包一定要不可调试的.1
2
3
4
5
6
7
8
9
10{
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
debuggable = false // 不可调试
signingConfig signingConfigs.rummy // 签名配置
}
}
}
商品定价
和绑定的卡关联, 如果收款绑定的是 香港银行卡, 那么定价是就是按 港币定价, Google 会自动换算成对应国家的价格.
所以要具体定价对应国家的价格的话, 需要自己去换算汇率.
主动下架 app
一旦发布无法下架, 只能取消发布. 参考: https://codeday.me/bug/20170408/9575.html
Android App Bundle (aab包)
貌似大型应用才需要考虑使用 aab包, 小型的话直接使用 apk
- Unity 2018.3 beta中的Android App Bundle (AAB)支持 - http://www.lissil.com.cn/jiaocheng/169.html
登录 与 支付
接入详情 参考总结: unity-与Android交互(unity-android_studio).md
登录接入
- 官方
- FaceBook登录接入 - https://www.jianshu.com/p/82fa87d055ec
- 官方登录文档 - https://developers.google.com/identity/sign-in/android/sign-in
- 需要生成凭据 - https://console.developers.google.com/apis/
支付接入
接 Google 的 In-app Billing
- 官方
- google play接入使用 - https://www.jianshu.com/p/0b0664910f41
- Google Play 支付(In-app Billing)接入 - https://blog.csdn.net/blackzhangwei/article/details/80088150
- Google支付后台验证操作流程 - https://blog.csdn.net/u013334392/article/details/94602284
Google Play 结算服务可用于销售以下类型的应用内商品:
- 一次性商品:需要一次性(非定期)向用户收取相关费用(通过用户提供的付款方式)的应用内商品。额外游戏关卡、高级战利品盒和媒体文件都属于一次性商品。Google Play 管理中心将一次性商品称为“受管理的商品”,Google Play 结算库将其称为“INAPP”。
- 奖励产品:需要用户观看视频广告才能获得的应用内商品。额外的生命、游戏代币和定时任务快速通关等都属于奖励产品。Google Play 管理中心将奖励的产品称为“奖励产品”,Google Play 结算库则将其称为“INAPP”。
- 订阅:需要定期向用户收取相关费用(通过用户提供的付款方式)的应用内商品。在线杂志和音乐在线播放服务等都属于订阅。Google Play 结算库将这些订阅内容称为“SUBS”。
确认购买交易
如果您使用的是 Google Play 结算库版本 2.0 或更高版本,则必须在三天内确认所有购买交易。如果没能正确确认,将导致系统对相应购买交易按退款处理。
Google Play 支持从您的应用内部(应用内)或您的应用外部(应用外)购买商品。为了确保无论用户在哪里购买您的商品,Google Play 都能提供一致的购买体验,您必须在授予用户权利后尽快确认通过 Google Play 结算库收到的所有处于 SUCCESS
状态的购买交易。如果您在三天内未确认购买交易,则用户会自动收到退款,并且 Google Play 会撤消该购买交易。对于待处理的交易,当购买交易处于 PENDING
状态时,三天的期限不适用,而是从购买交易改为 SUCCESS
状态时起算。
您可以使用以下某种方法来确认购买交易:
- 对于消耗型商品,请使用客户端 API 中的
consumeAsync()
。 - 对于非消耗型商品,请使用客户端 API 中的 [
acknowledgePurchase()
](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#acknowledgePurchase(com.android.billingclient.api.AcknowledgePurchaseParams, com.android.billingclient.api.AcknowledgePurchaseResponseListener))。 - 还可以使用服务器 API 中新增的
acknowledge()
方法。
让许可测试人员测试确认购买交易
对于许可测试人员进行的购买交易,确认期限会更短。如果未在 5 分钟(而不是三天)内得到确认,购买交易便会被退款并撤消。
查询到商品的价格是你付款方式决定的, 比如: 后台配置的是 日本币种 100, 你的付款方式是香港的, 则会显示 香港的价格为 HK$7.24
显示支付币种
查询到商品的价格是你付款方式决定的, 比如: 后台配置的是 日本币种 100, 你的付款方式是香港的, 则会显示 香港的价格为 HK$7.24
https://pay.google.com/payments/home#settings
Android Studio 打上架包
Google Play 要求上架的应用如果有 32 位的库 就要求必须要有 64 位的库. 所以打个 arm 的 32 和 64 位的 apk 即可.
在 build.gradle 中加入
1
2
3
4
5
6
7android {
defaultConfig {
ndk {
abiFilters 'armeabi-v7a','arm64-v8a'
}
}
}构建 apk 然后上传即可.
发布 与 取消发布
商店发布 -> 定价和分发范围
下载商店应用 apk
安装 Chrome 插件: APK Downloader for Google Play Store - https://chrome.google.com/webstore/detail/apk-downloader-for-google/idkigghdjmipnppaeahkpcoaiphjdccm
进入应用, 点击插件, 会自动调到对应的 下载页面
下载和安装 APKCombo Installer
选择对应架构的预设下载
然后将下载的 xxx.zip 丢进模拟器, 用它的安装器安装即可
应用被下架常见原因
隐私政策
原因: Violation of Usage of Android Advertising ID policy and section 4.8 of the Developer Distribution Agreement
参考: https://blog.csdn.net/xxx823952375/article/details/89395534
生成隐私内容, 填入大致应用信息 - https://app-privacy-policy-generator.firebaseapp.com/
生成一个 隐私策略 网页
进入 https://sites.google.com/site?pli=1
把第一步生成的隐私内容 复制粘贴 进去
右上角有个 发布 按钮, 点击发布, 然后随便填一个 名称, 例如: runningcat, 点击发布就会生成一个网页 : https://sites.google.com/view/runningcat/
填进 商店发布 -> 商品详情 -> 隐私权政策
重新上传一个 apk, 提升版本号
存在不安全的加密模式 - bugly
- 有人被下架了 - https://www.v2ex.com/t/669306
提示 bugly 不安全
解决办法: 老老实实干掉 bugly 吧
接入 Google 登录 服务 (推荐 firebase)
- 官方登录文档 - https://developers.google.com/identity/sign-in/android/sign-in
- 需要生成凭据 - https://console.developers.google.com/apis/
不建议接入第三方sdk的方式接入. 参考: 《Unity接入Google登录的坑!》 - https://www.jianshu.com/p/833fcfad49ac
个人理解也是, 如果还需要接入其他 sdk, 还不如直接在 Android 层 写代码接入, 抽出借口给 csharp. 其实直接接 Google 原生的非常简单.
- 如何使用Google 登录接入之Unity - https://blog.csdn.net/qq_41119641/article/details/80926537
- Google登录接入(play-games-plugin-for-unity) - https://blog.csdn.net/qq_39954479/article/details/82085345
- Google 登录接入之Unity - https://www.cnblogs.com/Colored-Mr/p/6964801.html
也不建议拷贝 Google gms 相关 jar 或 aar 包到 Assets/Plugins/Android/libs 目录下 , 比较麻烦, 而且不太靠谱, 总会发现找到了这个包又缺那个包, 总是报 找不到类的错. 网上大多数教程都是这样, 巨麻烦
- Unity项目接入Android的Admob Native(原生视频广告) SDK(二、AS导出aar) - https://blog.csdn.net/qq_39108767/article/details/83903407
- [在 Unity 中調用 Android 的 Google+ 登入 - Unity 與 Android 的部分](http://gn02214231.pixnet.net/blog/post/205868620-在 Unity 中調用 Android 的 Google+ 登入 - Unity 與 Android 的部分)
流程
https://console.developers.google.com/apis/
创建一个 android 客户端凭据 (假设是 安卓设备 接入服务的话), 登录 Google 需要有这个, 不然登录会返回错误码 10 .
但不需要使用到这个 客户端id.
需要用到 package 包名 和 签名 xxx.keystore 的 sha1 值
不上线到 Google Play 的情况, 使用自己的签名生成 sha1
1
2
3
4$ keytool -list -v -keystore xxx.keystore
证书指纹:
MD5: 20:06:20aaaaaaaaaaaaaaaaaaaaa
SHA1: 11:E3:F8:aaaaaaaaaaaaaaaaaaa上线到 Google Play 情况, 必须使用它提供的 sha1
创建一个 web应用 凭据. 客户端中填写的 id 就是这个类型的 id
1
2
3
4
5GoogleSignInOptions gso = new GoogleSignInOptions
.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken("650408134917-lcgbq365bmk47.......")
.requestEmail()
.build();然后接入 gms, 生成库 (arr包)
[方式一 : 自定义 gradle, unity 中打包 (推荐)](#方式一 : 自定义 gradle, unity 中打包 (推荐))
方式一 : 自定义 gradle, unity 中打包 (推荐)
最好的办法就是 [自定义 gradle](#自定义 gradle), 只需要加一个 gms 的引用即可, 就能引用到 gms 相关的库.
1 | dependencies { |
方式二 : unity 导出 as 工程 打包
这是可行的方式, 但是不推荐. 流程有点麻烦, 自动化也麻烦, 而且打出的包比 方式一 的大个 10M 左右
缺点: 打出的包貌似比较大一点.
导出 as 工程
用 as 打开工程, 修改 build.gradle
打包前面签名, 如果没有设置的话
1
2
3
4
5
6
7
8
9
10android {
signingConfigs {
release {
storeFile file('E:/aaa/bbb.keystore')
storePassword 'asdasd'
keyAlias 'qweqwe'
keyPassword 'asdasd'
}
}
}引用 Google 服务
1
2
3
4dependencies {
implementation 'com.google.android.gms:play-services-auth:17.0.0'
...
}
踩坑
登录错误码 apiexception 为 10
凭据错误, 生成凭据时根据 package 和 sha1 生成, 所以要求一定要一致, 还有 请求登录时的 requestIdToken 一定要是生成凭据中的值, 必须确保这三个数据值是正确的
https://console.developers.google.com
查 sha1
安卓apk 包用 压缩工具打开, 找到 META-INF/xxx.RSA 文件, 提取出来, 然后使用java工具 keytool.exe (在%JDK%/bin 目录下) 打开,
1 > keytool -printcert -file xxx.RSA查 package
直接连 android studio 调试模式
Google Play Install Referrer
- https://developer.android.com/google/play/installreferrer?hl=zh_CN
- https://developer.android.com/google/play/installreferrer/library?hl=zh_CN#java
可用追踪到 网页跳转来源
接入 Google 支付 服务 (推荐 firebase)
注:以前,您可以通过上传未发布的草稿版本对应用进行测试。 此功能已不受支持;您必须将应用发布到 Alpha 或 Beta 分发渠道。 如需了解详细信息,请参阅草稿应用不再受支持。
警告:请不要在主线程上调用 getSkuDetails
方法。 调用此方法会触发网络请求,进而阻塞主线程。 请创建单独的线程并从该线程内部调用 getSkuDetails
方法。
相关资料
- 记Google应用内商品(消耗品)支付小坑 - https://blog.csdn.net/cp_Mark/article/details/80649746
流程
接入到 Android 工程 - https://developer.android.com/google/play/billing/billing_library_overview
接入到 Android 工程 - https://developer.android.com/google/play/billing/billing_integrate.html?hl=zh-CN#billing-permission
应用需要加入支付权限
<uses-permission android:name="com.android.vending.BILLING" />
, 然后上传, 才能在 后台 添加上 收费商品获取 BASE_64_ENCODED_PUBLIC_KEY, 这个是 服务端使用. 在 开发工具 -> 服务 和 API 中获取
客户端demo中的相关校验代码给你认识一下, 其实没必要客户端校验, 可以删除相关代码.
创建受管理的商品 - https://support.google.com/googleplay/android-developer/answer/1153481
管理应用内购买结算 - https://developer.android.com/google/play/billing/billing_admin.html?hl=zh-CN
测试流程
- 为了添加 应用内商品, 先打一个测试包上架, 用 正式签名, 正式报名, 有添加支付权限, 去掉调试.
- 添加 应用内商品 -> 受管理的商品
- 本地在再打一个测试包, 开启调试, 测试相关功能. 才能成功调用 Google 的相关 api.
查询接口调用
必须是商品id的 全称 才能查询得到. 且 app 处于 审核完 已发布 状态
1 | List<String> itemIds = new ArrayList<>(); // TODO: 从逻辑层传过来 |
查询到商品的价格是你当前 ip 地区的价格 (vpn地址), 比如: 后台配置的是 日本币 100, 当前发起请求的ip地区是在香港, 则会显示 香港币 HK$7.24
踩坑
引用 ‘com.android.billingclient:billing:2.0.1’ 后找不到 BillingResponse
参考: https://stackoverflow.com/questions/53685773/where-is-billing-result-ok-defined
因为使用的是官方 sample 中的代码, 里面使用的是 billing:1.0 的库, 改用 2.0.1 报错找不到 BillingResponse, 换成 BillingResponseCode 就 ok 了, 卧槽
调用相关接口返回 响应码 BillingResponseCode=6
这是一个致命错误
1
2 /** Fatal error during the API action */
int ERROR = 6;可能是 app 是刚上架, 还处于 正在等待发布 状态, 还未审核通过
也可能 网络不稳定, 可以再次请求多几次, 可能就会成功.
用相关接口返回 响应码 BillingResponseCode=0, 但查不到商品
可能 app 是更新状态, 虽然是 已发布 状态, 但是还处于审核中, 当审核完处于下图状态时, 就可以查询到商品了
支付时 遇到 无法购买您要买的商品 问题
保证 versionCode 和 version 与你上传的apk的包的一样。
保证后台和你传入的购买商品的 id 一致。
确保你所使用的账号是在测试人员里。且测试人员确认了 测试邀请. (把连接发给测试人员确认即可)
支付时 遇到 此版本的应用未配置为通过googleplay结算 问题
测试账号未加入 许可测试
设置 -> 账号详情 -> 许可测试
参考: https://blog.csdn.net/xianshilao/article/details/78022298
接入 Facebook 登录 服务 (推荐 firebase)
先接入 Google 后, 在接入 Facebook 可能会遇到这个 [报错: Duplicate class android.support.v4 and support-compat:27.0.2](#报错: Duplicate class android.support.v4 and support-compat:27.0.2)
相关资料:
- 官网快速接入 - https://developers.facebook.com/quickstarts/?platform=android
- FaceBook登录接入 - https://www.jianshu.com/p/82fa87d055ec
- 使用 Graph API - Android (获取名字, 头像) - https://developers.facebook.com/docs/android/graph?locale=zh_HK
- 图谱 API 的使用方法 - https://developers.facebook.com/docs/graph-api/using-graph-api/
- 权限参考文档 — Facebook 登录 - https://developers.facebook.com/docs/facebook-login/permissions/
- 登录校验 (server side) - https://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow/#checklogin
- 图谱 API 探索工具 - https://developers.facebook.com/tools/explorer/
流程
客户端
开发者网站 创建应用 获取 appid . https://developers.facebook.com/
不上线到 Google Play的情况, 用自己的签名获取 散列值
1
2
3$ keytool -exportcert -alias androiddebugkey -keystore "C:\Users\wolegequ\.android\debug.keystore" | openssl sha1 -binary | openssl base64
输入密钥库口令: android
UTt4eaeeXuaaaaassssFXancec=如果弹出 输入密钥库口令 输入密码, 那很有可能使用了错误的 keystore 文件路径, 生成了错误的 散列值.
- androiddebugkey 是 keystore 的 alias
- openssl 是 openssl.exe, 需要安装
- UTt4eaeeXuaaaaassssFXancec= 就是需要填入 Facebook 中的值
上线到 Google Play的情况,, 必须使用 Google Play 提供的证书文件生成散列值
1
2> openssl sha1 -binary "E:\its_rummy\googleplay_deployment_cert.der" | openssl base64
xDdJhiKrRTk+iu1jPMaPwJFUCfc=- googleplay_deployment_cert.der 是 Google Play 下载的证书
根据官网提示接入即可. https://developers.facebook.com/quickstarts/?platform=android
然后接入 Facebook, 生成库 (arr包)
服务器
用到的数据为这两个
添加测试人员
只有添加测试人员后才能进行 测试应用 的测试
把连接发给测试人员, 测试人员点开后接受邀请才能测试支付功能.
测试人员加入 许可测试
设置 -> 账号详情 -> 许可测试, 以逗号分隔
fb appid 关联
意思是 一个开发者有多个 appid, 可以把多个 appid 下的用户的 userid 关联起来, 如果不关联, 就不能用同一个账号系统
相关文档: https://developers.facebook.com/docs/apps/for-business#api
可以有几种方式关联
方式一 (推荐) : 使用 商户 token. 只要 所有 app 都在同一商户下, 同一个玩家的 商户 token 就不会变
1
2
3
4
5curl -i -X GET "https://graph.facebook.com/{userid}?fields=token_for_business&access_token={appid}|{appsecret}"
{
"token_for_business": "Aby41GIEl9ZFusPY",
"id": "123123123"
}方式二 : 拉取用户已登录过的 app 列表, 这种方式 Facebook 有时返回错误数据, 不建议, 绝壁会踩坑
1
2
3
4
5
6
7
8
9
10
11
12curl -i -X GET "https://graph.facebook.com/{userid}/ids_for_business?access_token={appid}|{appsecret}"
{
"data": [
{
"id": "123123123",
"app": {
"id": "345345345"
}
}
...
]
}userid : 登陆 fb 返回的 玩家id
appid, appsecret 是 fb 后台的参数
fb 图谱 (https://developers.facebook.com/docs/graph-api/using-graph-api) 里面的 access_token 都是这样拼接而成
fb 后台关联多个appid
相关参考:
- Facebook API - different user ID’s for each app? - https://stackoverflow.com/questions/28087051/facebook-api-different-user-ids-for-each-app
有两种方式可以添加关联
在 bm 后台中. 账号 -> 应用 -> 添加 -> 绑定应用编号 中添加需要关联的应用
在应用中, 设置 -> 高级 -> 商务管理平台, 选择同一个 bm.
然后就可以用过 curl 请求到关联的该用户
登录过的 appid
踩坑
登录报错: 应用授权错误响应示例
服务器校验是报错
facebook 报警告后自动设为开发模式
可能的原因
隐私策略网页访问不了
包名在 Google Play 上不存在
解决的办法就是, 第一个添加 gp 上存在的包名, 第二个 开始才为自己的包名
错误投放 Google 包
这个是因为设置的第一个包不是要投放的 Google 包 (可能是为了避开这个坑 [facebook 报警告后自动设为开发模式](#facebook 报警告后自动设为开发模式) 导致的)
只要把第一个包设置为要投放的包即可.
网页可以登录成功, 但是 app 登录报错 key hash 不存在
这个问题是因为 密钥散列 中没有配置正确的值 (一个 fb app 可以配置多个)
Google 包要用 Google Play 上提供证书去生成, 非 Google 包是用 签名证书 jks 去生成
如果没有配置好, 会出现 没有装 fb app 的情况下, 登录 fb 回拉取网页, 此时登录通过, 但是 有装 fb app 的情况, 则会登录失败, 报错:
可以直接手动敲进去这个 key hash 值, 也可以解决问题 (参考: https://bbs.csdn.net/topics/390922523)
接入 Facebook 分享 服务
官方文档: https://developers.facebook.com/docs/sharing/android#advanced
流程
一般都先接好登录.
需要替换的参数, 将 {YourAppId} 替换为 appid. 如 Provider123123
1
2
3<provider android:authorities="com.facebook.app.FacebookContentProvider{YourAppId}"
android:name="com.facebook.FacebookContentProvider"
android:exported="true"/>
踩坑:
调用 MessageDialog.show api 报错: Unable to show the provided content
错误:
Unable to show the provided content via the web or the installed version of the Facebook app. Some dialogs are only supported starting API 14.
手机没有装 Messenger , 安装后就解决问题.
分享出去的连接显示为 附件
要开 vpn, 不然连不上 fb 就会显示为附件, 不能点击跳转
接入 Facebook 头像
使用 GraphRequest api
接入 Facebook 事件
- fb 自动记录应用内事件: https://developers.facebook.com/docs/app-events/gamesonfacebook?locale=zh_CN
- Get Started – Android - https://developers.facebook.com/docs/app-events/getting-started-app-events-android/?translation
- 标准事件名 - https://developers.facebook.com/docs/app-events/getting-started-app-events-android/?translation#event-names
事件大概需要 20 分钟左右才能才后台看到.
创建 app 的时候, 默认会 打开 事件
然后可以在 事件后台 (https://business.facebook.com/events_manager2/list/) 中看到 默认的几个事件, 如: 安装, 启用 等事件
添加 自定义 事件
- Manually Log Events - https://developers.facebook.com/docs/app-events/getting-started-app-events-android#log-manually
代码
1
2
3AppEventsLogger logger = AppEventsLogger.newLogger(this);
logger.logEvent("evn_helloworld");
logger.logEvent("evn_wolegequ");后台中查看
Facebook Ads 投放
需要 Facebook 对应的 app id 接收 服务条款
链接: https://www.facebook.com/ads/manage/advanced_mobile_measurement/app_based_tos?appid=123123 (123123 是 app id)
上传 jks 为 app 签名
- GooglePlay重签名引发的第三方失效,统一解决有效 - https://blog.csdn.net/qq_27431253/article/details/99416811
- Pepk 签名压缩工具使用 - https://blog.csdn.net/qq_40666120/article/details/112986931
不上传自己的签名信息到 gg, gg 会把上传的 app 重新签名, 这样会导致 相关参数 (比如: gg 登录) 需要配置为 gg 后台显示的签名信息
谷歌支持将你自己的签名信息上传到 gg, 然后 app 重新签名的时候就会使用你自己的签名去签名 app, 这样 相关参数 就不需要重新配置了