接入流程FAQ


1.SDK接入FAQ

Q1.1:接入过程中遇到问题,如何联系我们?
A1.1:请详细阅读下面的FAQ,接入过程中常见的问题我们都给出了解答。

Q1.2:如何申请appid和serverid等平台参数?
A1.2:在开放平台创建游戏成功后即可获取

Q1.3:如何配置充值回调地址
A3:通过开放平台配置

Q1.4:app secret可以保存在手机本地吗?
A1.4:不要这样来做,建议游戏开发者自己搭建服务器,将app secret保存起来

Q1.5:so库如何选择
A1.5:拷贝libs下的so文件时,请根据游戏具体编译情况导入。比如unity默认的FAT(ARMv7 + x86),则复制armeabi-v7a和x86的so即可,Cocos2dx查看设置的APP_ABI如果默认不设置则拷贝armeabi或者查看编译出自己的so库有哪几种类型就拷贝对应类型的so。PS:所有类型的so文件可以在sdk包的接入内容的so文件夹中找到

Q1.6:哪些接口是必须接入的
A6: init、login、createRole、notifyZone、pay、setAccountListener

接口名称 接口说明
init 初始化SDK的接口
login 登录接口,登录成功后返回用户信息
createRole 创角接口,游戏新用户第一次登录后调用
notifyZone 通知区服,每次登录只能调用一次(多次会审核失败),建议在登录、创建角色(游戏新用户)之后调用
pay 支付接口,客户端的支付结果仅作为参考,真实结果请以服务器结果为准

Q1.7:游戏在游戏中心上架前是否会进行重签名?
A1.7:我方会对游戏包进行重新签名,若如果游戏有微信登录、微信分享、签名保护功能,请在游戏过审之后通过开放平台获取二次签名后的包。

Q1.8:Android Studio如何接入SDK
A1.8:此部分请查看SDK zip包中的说明,请注意使用我方提供的混淆规则。

Q1.9:游戏方进行打包时targetSDKVersion应该为多少?
A1.9:

  • 建议游戏使用26;
  • 游戏如果必须使用23以上(包含23)的版本,需适配动态权限申请;
  • 游戏如果必须使用28版本,需适配HttpClient库引入、支持Http请求;
  • 游戏如果必须使用大于26版本并且接入的SDK版本小于2.6.0,需要把AndroidManifest.xml的application标签下PaymentActivity修改如下:
<activity
    android:name="com.bsgamesdk.android.activity.PaymentActivity"
    android:configChanges="keyboardHidden|navigation|orientation|screenSize"
    android:screenOrientation="portrait"
    android:theme="@style/bsgamesdk_customPaymentTranslucentTheme" 
    android:launchMode="singleTop" />

替换为

<activity
     android:name="com.bsgamesdk.android.activity.PaymentActivity"
     android:configChanges="keyboardHidden|navigation|orientation|screenSize"
     android:screenOrientation="portrait"
     android:theme="@style/bsgamesdk_customPaymentTheme" 
     android:launchMode="singleTop" />

Q1.10:接入SDK时发现第三方库重复,如何解决?
A1.10:当发现SDK中使用的第三方库与游戏方使用的第三方库重复时,请游戏方删除自己项目中的第三方库,使用SDK中的第三方库

Q1.11:旧版的Unity该如何接入SDK
A1.11:请参考接入内容/BSGameSdk_U3D/u3d接入说明

Q1.12:使用Android Studio 3.0或以上版本开发打包需要注意什么?
A1.12:接入哔哩哔哩游戏SDK v1.8.0以下版本,需要修改项目根目录下的gradle.properties文件,添加以下配置:android.enableAapt2=false

Q1.13:二次签名用的实现机制
A1.13:使用的Jarsign

Q1.14:签名是大小写敏感的吗?
A1.14:对大小写敏感,全用小写

Q1.15:sdk有android21或者更高版本的要求吗?
A1.15:最低9

Q1.16:icon并不是CP配置在manifest application标签内的icon,指引的是android默认的icon,这种情况怎么修改?
A1.16:CP多个像素密度的图片文件夹里面有和icon同名的,让研发把icon改成特殊的名称,或者把所有图片文件夹的icon名称的图片都换掉。

Q1.17:so与 MD5不匹配
A1.17: 可能的原因:

  • 1.拷错架构库,比如把armeabi-v7a的 so文件拷到了 x86架构
  • 2.so文件在编译的使用被压缩。

Q1.18:U3D项目接入sdk,能u3d导出安卓工程,再以Android studio的方式接入SDK吗?
A1.18:不可以,需要按照U3D接入说明规范操作。(否则会出现游戏黑屏或者初始化失败的情况)

Q1.19:更新了数据SDK但自检工具检测还是显示为旧版本。
A1.19:

可能的原因:

  • 1.jar是否有更新替换
  • 2.clean一下重新编译下试试,也可能是缓存的问题。
android.enableAapt2=false

Q1.20:已经接入了SDK,并且SDK功能测试也正常,自检工具确提示没有正确接入SDK?

A1.20:

可能的原因:

  • 1.需要检查代码是否被拆分成了多个dex文件
  • 2.确保SDK的文件在第一个dex里

Q1.21:安卓targetSDKVersion 23及其以上版本SDK适配
A1.21:在build.gradle文件中添加以下内容:

android {
    useLibrary 'org.apache.http.legacy'
}

Q1.22:安卓targetSDKVersion 28版本SDK适配
A1.22:

  • 1.HttpClient库引入

1.1 在build.gradle文件中添加以下内容:

android {
    useLibrary 'org.apache.http.legacy'
}

1.2 在AndroidManifest.xml文件中的application标签下添加以下内容:

<uses-library android:name="org.apache.http.legacy" android:required="false"/>
  • 2.Http请求支持

在AndroidManifest.xml文件中的application标签下添加以下属性内容:

android:usesCleartextTraffic="true"

Q1.23:如果游戏是Unity开发,需要注意些什么?
A1.23:需要把游戏的启动Activity的launchModel设置为singleTop或者去除launchModel这个属性


2.登录注册相关FAQ

Q2.1:授权登录成功后游戏重启原因?
A2.1:

  • 授权登录界面是竖屏的全屏,会导致游戏生命周期发生变化,游戏开发人员查看onStop之后游戏是否会重启
  • 之前遇到的新用户在游戏视频的启动页点击,进行授权登录发生游戏重启,游戏开发人员查看游戏视频播放逻辑

Q2.2:授权登录、一键登录、自动登录是什么含义?
A2.2:

  • 授权登录:手机安装Bili客户端并且登录bilibili账号下,之前用户未登录过游戏账号,游戏客户端调用login接口出现授权登录
  • 一键登录和自动登录:这两种登录是一样的, 都是用户第一次登录成功后,第二次会自动登录,不需要输入账号和密码

Q2.3:游戏登录验证失败的怎么排查?
A2.3:当游戏服务器到平台服务器验证用户信息失败时,会导致游戏登录失败,具体排查方式如下:

  • 分析游戏服务器请求session.verfy接口平台服务器返回结果,如果属于参数错误则检查签名和游戏参数是否配置正确;如果返回accesskey错误可以联系平台服务器人员查看原因
  • 如果游戏服务器请求session.verfy接口正常,但是游戏客户端提示验证失败,游戏客户端人员查看请求超时时间,以及请求服务器返回的时间,是否超时导致的,如果是超时导致的,请查看游戏服务器请求平台服务器返回时间和游戏服务器返给游戏客户端时间进行分析

Q2.4:注册账号或者游客登录的时候提示服务器内部错误
A2.4:当前ip注册次数超过限制,请过一段时间再进行尝试或者切换4G网络测试

Q2.5:登录或者注册时提示"无效的API签名"
A2.5:请检查初始化SDK的时相关参数是否正确

Q2.6:服务端登录验证公共参数要参与签名吗?
A2.6:请求参数都参与签名

Q2.7:服务端登录验证接口sessionVerify,要接几条线路
A2.7:该接口必接,且一定要加多线路切换逻辑,文档中含有3条线路,避免单条线路出问题,影响游戏的稳定。

Q2.8:B站账号换设备登录顶号,有对应的接口回调提示吗
A2.8:没有对应提示,在app端和pc端可以同时登录,这个不存在顶号的问题,游戏内要限制需研发自己判断

Q2.9:游戏数据SDK初始化接口dClnit参数uid,这个UID要从哪获取?
A2.9:从登录成功回调的的bundle取

Q2.10:B站sdk可以自行限制登录吗?
A2.10:我们不做限制,白名单机制或者是限量登录需游戏研发实现。

Q2.11:exitListener (ExitCallbackListener的实例 )是什么参数,如何设置?
A2.11:免费下载游戏,在exit回调里不做处理即可;付费下载游戏,用户如果没有付费的话,退出时会回调给研发,研发需要做退出游戏。

Q2.12:付费下载游戏登录验证
A2.12:判断是由SDK完成的,未付费会有提示弹框,点击 "我知道了" 按钮,会触发ExitListener的onExit方法,研发可以通过这个ExitListener得知用户是否已经购买。

Q2.13:游客登录可以屏蔽或者隐藏吗?
A2.13:SDK中没有关闭游客登录的功能。


3.支付相关FAQ

Q3.1:调用支付接口(pay)支付失败的原因?
A3.1:

  • 当游戏客户端进行支付时传入的uid与SDK本地存储的uid不同时SDK会返回7005的error code
  • 当游戏客户端在支付之前没有调用过notifyZone接口

Q3.2:微信支付注意点有哪些?
A3.2:

  • 在游戏package下新建wxapi文件夹,然后新建 WXPayEntryActivity,并且WXPayEntryActivity继承SDK中的BaseWXEntryActivity,WXPayEntryActivity不需要实现任何方法。
  • 在AndroidManifest.xml声明
<activity
    android:name=".wxapi.WXPayEntryActivity"
    android:exported="true"
    android:launchMode="singleTop" />  
  • SDK包含了微信SDK的支付和分享等模块,如果游戏要使用分享功能,无须再接入微信的SDK;
  • 平台会进行二次签名,如果游戏包含微信分享,在微信后台配置的签名需替换为平台正式签名后的;

Q3.3:调用支付接口提示"服务器返回数据异常"
A3.3:请检查

  • 登录后是否调用过通知区服接口,并且参数正确
  • 支付接口相关参数是否正确并且不为空
  • 确认网络是否畅通

Q3.4:支付接口的参数是游戏的还是平台的?
A3.4:

  • uid使用平台的唯一标识,由登录接口返回
  • username使用平台的用户名,由登录接口返回
  • serverid使用平台提供的服务器id
  • role使用游戏自身的信息

Q3.5:单笔支付有设置上限吗
A3.5:单笔支付上限5000

Q3.6:计费点(商品价格 ID等信息的传入)配置
A3.6:研发自己下单接口传入金额就可以了,不设置档位

Q3.7:SDK中有广告SDK吗?
A3.7:没有广告SDK,只有内购的

Q3.8:测试支付的时候选择支付宝,但是手机没有安装支付宝,不弹出相关提示就直接跳回游戏
A3.8:会有web版支付页面弹出,建议先用自建工具进行静态检查,查看是否因为遗漏部分接入内容导致。

Q3.9:不走服务器也可以付费,是否可以不接服务器这一块
A3.9:不可以,需要给一个可以应答的接口,但是不建议研发不做任何判断直接返回。

Q3.10:SDK的支付没有看到有支付取消的回调
A3.10:支付取消和大部分支付失败都是错误码1000。

Q3.11:服务端订单支付加入签名,会影响研发之前上线的游戏吗?
A3.11:不会,兼容旧版本SDK的。

Q3.12:一个渠道所有游戏都是用一个支付回调接口,可以吗?
A3.12:研发能够区分就行

Q3.13:Pay接口可以不传的notify_url吗?
A3.13:

  • pay接口的notify_url可以不传。如果不传就按照后台配置的通知发货,传了优先按传的,这个参数是方便研发进行测试服的通知发货
  • notify_url只有在后台已配置通知发货地址的情况下,才起作用
  • notify_url仅供测试使用,正式提测的版本里notify_url必须传""

Q3.14:支付order_sign字段签名错误
A3.14:

  • 让研发参考文档 有详细说明 检查下参数,拼接顺序,还有secret_key用服务端的密钥,如果notify_url为空 就不参与sign了
  • 请检查一下四个参与签名的字段最后到客户端请求出来的时候,是否被改变或传错、漏传
  • 可以使用在线工具校验签名:http://dev-tool.biligame.com/web/tool/apiTool.html

Q3.15:付费下载游戏,判断玩家是否已经付费,有对应的接口回调吗?
A3.15:没有回调,平台内部逻辑判断,不对外

Q3.16:extension_info有长度限制吗?
A3.16:extension_info不能超过255个字符

Q3.17:玩家没有付费的话,在登录时会调用onSuccess吗?
A3.17:没有付费,登录会失败

Q3.18:创建角色的时候调用createRole传入玩家名字,notifyZone的时候也传入了玩家名字。如果玩家改了名字,还可以支付吗
A3.18:可以,这个名字不强校验 只是用来记录 方便出问题的时候可以和用户核对

Q3.19:money,pay_money,game_money的区别是什么?
A3.19:money理解为商品的定价,pay_money就是实际支付金额,game_money这个参数的定义为游戏内货币数值,比方说1000钻就是1000,研发根据游戏情况来定,但是不能不传。

Q3.20:支付回调字段的具体使用方法是什么呢
A3.20:money和game_money要校验是否一致 然后还要同时校验对应的game_money是否正确,比方说30元买了300钻 这是一个对应关系 如果传过来的回调money是3000 game_money是600 那就说明用户通过非正常手段篡改了订单 那么这单就不该给发货.

Q3.21:充值异步回调时,是否需要再次通过接口查下订单真实性
A3.21:建议研发接主动查询

Q3.22:当notify_url传空("")的时候,B站加密的时候这个值会用配置的参数进行加密吗?
A3.22:没传的话,我们不会再拼配置的。

Q3.23:可以多个游戏使用一个支付回调吗?
A3.23:可以,只要CP那边分得清就行。这边只能设置一个回调地址,若CP游戏是分区回调则需要CP自行修改回调机制

Q3.24:extension_info可以传空吗?
A3.24:如果异步回调的时候 不依赖这个extension_info参数 就不要传了

Q3.25:没服务器的免费下载单机内购游戏怎么接SDK?
A3.25:sdk客户端一定要接,如果有内购,异步通知的需要研发提供一个接口可以做正确的应答。

Q3.26:支付报错:2001
A3.26:检查一下initialize,createRole,notifyZone,pay这几个接口传入的参数是否和后台提供的一致

Q3.27:下单时传入的参数extension_info如果含有emoji表情符的角色名字会导致下单失败吗?
A3.27:extension_info里的信息不能包含emoji表情符,有emoji会导致下单失败。且应减少比如角色名字等无效数据,业务逻辑应该不依赖角色名。

Q3.28:支付时选择paypal的外币支付功能,报错程序出错。
A3.28:研发接入了一个聚合SDK(OneSDK),导致使用的okhttp与我方sdk的不符。


4.创角与通知区服接口相关FAQ

Q4.1:创角接口(createRole)的参数是游戏的还是平台的?
A4.1:role和role_id均为游戏的角色名和角色id

如果游戏设定没有创角则role传入role_id,但是role_id必须是唯一的,role和role_id不能为空

Q4.2:通知区服接口(notifyZone)参数是游戏的还是平台的?
A4.2:

  • server_id由开放平台获取,server_name固定传 bilibili区;role_id和role_name跟创角接口的内容一样的
  • 支付接口依赖notifyZone接口,所以建议notifyZone接口在登录、创角、选择区服后调用
  • notifyZone每次登录之后只需要调用一次

Q4.3:如何查单接口的请求、接口是否调用?
A4.3:游戏方可以通过charles抓网络请求来判断请求参数是否正确以及接口调用手机是否正确

Q4.4:单机游戏没有创建角色过程、创角的时候还没有玩家数据
A4.4:创角接口的目的是在于收集用户真实进入到游戏内的数据,并不一定要真正纠结于创建角色这个动作,如无角色概念,可以按文档传b站uid和昵称当参数。如果没有创角的话,新手引导或者开场动画之类的,这些地方都可以埋createRole,各家游戏机制不同这边只要求一个用户永久调用一次就可以了

Q4.5:玩家注销重新回到主界面,notifyZone需要在调用吗
A4.5:重新调用登录就需要调用notifyZone

Q4.6:gameSdk.createRole()接口中的id可以重复吗
A4.6:可以的

Q4.7:B站的sdk包里 是否有判断用户是否已经创建过角色?
A4.7:这个需要游戏研发自己判断


5.其他FAQ

Q5.1:自检工具的使用
A5.1:游戏提包之前必须先使用自检工具检测,检测内容无误后再提包测试,研发自检工具使用说明下载

Q5.2:游戏包正式签名后启动失败的原因?
A5.2:

  • 游戏开发人员确保提测的游戏包没有加固过
  • 游戏开发人员确保游戏内没有对包的签名进行校验(如果有校验则需要是平台签名后的数据)

Q5.3:自检工具点击分析结果没有反应怎么办?
A5.3: * 1.记得停止测试 * 2.分析结果按钮点了以后稍微等10s左右,不要重复点击,或者点击重置再来一次。

Q5.4:游戏可以接广告SDK吗?
A5.4:没有广告SDK,只能研发自己接

Q5.5:调用了接口但是自检工具检测不到
A5.5: 首先确认CP确实调用过接口,可能的原因 * 证书没有安装成功:在设置-安全-凭据存储-用户凭据里可以看到有没有安装成功,可以把证书删掉重新安装下试试,安装有爱奇艺的手机需要到系统文件管理里找到证书安装,PEM格式安装不上就装CER格式的,浏览器里不能安装就去文件管理系统手动安装; * 使用了切换账号功能:测试时不要使用切换账号功能,测试前清除一下账号数据缓存,或者删除游戏重新安装; * 接口调用顺序不正确:需按照正确的接口调用顺序接入,有一些接口如creatrole接口需要在登录后调用才能检测到 * 设备不支持:若证书安装成功,没有使用账号切换功能,接口调用顺序也正确,则建议CP更换安卓7.0以上的小米手机进行尝试。


6.技术问题反馈

若本接入文档不能解决您的疑惑,或有其他技术问题咨询,请发送邮件至:gameopen@bilibili.com