# 1. 视频号授权相关

# 1.1. 视频号一键登陆失败

  1. 检查Init时传入的ilinkappid,appid参数是否正确
  2. 检查OnRequireAuthorize回调是否实现
  3. 检查微信返回授权票据是否正确,注意tdiAuthBuffer字段需要进行base64解码后,传入AuthorizeFinish接口完成视频号登录

# 1.2. 微信侧开播,拉起游戏后没有拉起直播挂件

  1. MSDK:检查游戏被第三方应用拉起时,传递过来的参数,确认是被微信视频号拉起时,是否调用SetMessageFromWeChat接口将相关参数传给直播SDK。
    private void OnLoginBaseRetEvent(MSDKBaseRet baseRet)
      {
      ...
        else if (baseRet.MethodNameId == (int)MSDKMethodNameID.MSDK_LOGIN_WAKEUP) {
                var dict = Json.Deserialize(baseRet.ExtraJson) as Dictionary<string,object>;
                string _params = dict["params"].ToString();
                var wxDict = Json.Deserialize(_params) as Dictionary<string,object>;
                string messageFromWx = "";
    #if UNITY_ANDROID
                messageFromWx = wxDict["_wxappextendobject_extInfo"].ToString();
    #elif UNITY_IOS
                messageFromWx = wxDict["messageExt"].ToString();
    #endif
                if (messageFromWx.Contains("WeChatLive_ShiPinHao"))
                {
                    mLiveEngine.SetMessageFromWeChat(messageFromWx);//微信侧拉起直播必须实现
                }
            }
      ...
      }
    
  2. openSDK:在WXEntryAcivity的onReq是否实现了WXGameLiveWrapper.onMessageFromWeChat(obj.extInfo);
    @Override
        public void onReq(BaseReq req) {
            Log.i(TAG,"onReq   =---- ");
    //        视频号开播冷启动游戏流程:
    //        1、WxEntryActivity收到type为4的消息
    //        2、处理type为4,启动游戏主Activity
    //        3、主Activity拉起微信登录或游戏内其它登录方式(此处为用户手动点击登录)
    //        4、处理登录成功的回调,登录成功进行checksupport
    //        5、checksupport成功后调用init会自动拉起挂件
            switch (req.getType()) {
                case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
                    ShowMessageFromWX.Req wxReq = (ShowMessageFromWX.Req) req;
                    WXMediaMessage wxMsg = wxReq.message;
                    WXAppExtendObject obj = (WXAppExtendObject) wxMsg.mediaObject;
                    if (obj.extInfo.contains("WeChatLive_ShiPinHao")) {
                        WXGameLive.sharedInstance().onMessageFromWeChat(obj.extInfo);
                    }
                    Intent descIntent;
                    PackageManager pm = this.getPackageManager();
                    String packageName = this.getPackageName();
                    descIntent = pm.getLaunchIntentForPackage(packageName);
                    if (descIntent == null) {
                        Log.e(TAG,"getLaunchIntentForPackage return null, please check AndroidManifest.xml!");
                        return;
                    }
                    descIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    descIntent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
                    descIntent.putExtra("openid", wxReq.openId);
                    this.startActivity(descIntent);
                    this.finish();
                    break;
                default:
                    break;
            }
            finish();
        }
    
  3. 查看游戏的MSDK时序问题,是否能收到拉起传入参数

# 1.3. 视频号登陆后返回游戏页面卡死(OpenSDK)

  1. 查看WXEntryActicity是否没有调用finish()
    q1

# 2. 开关播相关

# 2.1. Android平台挂件修改封面失败

  1. 先检查游戏Activity的onActivityResult回调中是否有调用WXGameLiveWrapper.onActivityResult(requestCode,resultCode, data),确保游戏Activity生命周期回调。
      @Override
      public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        GCloudAppLifecycle.Instance.onActivityResult(requestCode, resultCode, data);
        WXGameLiveWrapper.onActivityResult(requestCode,resultCode, data);//查看这个是否配置
      }
      @Override
      public void onRequestPermissionsResult(int arg0, String[] arg1, int[] arg2)
      {
        super.onRequestPermissionsResult(arg0, arg1, arg2);
        GCloudAppLifecycle.Instance.onRequestPermissionsResult(arg0, arg1, arg2);
        WXGameLiveWrapper.onRequestPermissionsResult(arg0, arg1, arg2);//查看这个是否配置
      }
    

# 2.2. 无法跳转微信

  1. 先确认在Init之后有调用mLiveEngine.SetSupportStartChannelLive(true);
  2. 升级微信版本

# 2.3. 开播中切换账号观众端显示主播离开并且无法恢复

  1. 开播过程中退出当前登录的帐号,需要结束当前的直播,退出登录时调用
mLiveEngine.PostGameMessage("{\"type\":&nbsp;\"finishLive\"}");

# 2.4. 出现Network/Server error

a.检查当前网络是否正常 b. 检查checkSupport 的userInfo 数据类型是否正确

* @param userInfo  "{\"openid\":string, \"appid\":string, \"area_id\":number,\"plat_id\":number, \"partition_id\":number, \"role_id\":string, \"rank_role\":string, \"rank_area\":string, "\"renderer\":string}" 

# 2.5. 游戏退出时,未自动关播

  1. 检查注销时是否调用结束直播

# 2.6. 游戏没有开播入口

  1. 可查看OnCheckSupportResult返回值,查看对应情况
* @param result   结果值如下,result==0时,可以显示直播入口
  *      LIVE_SUPPORT = 0; 支持一键开播
  *      LIVE_UNSUPPORT_SDK_VERSION = -1;   系统版本不支持,目前只开发AndroidN机器以上机型
  *      LIVE_UNSUPPORT_GL_VERSION = -2;    openGL ES版本不支持,目前支持opengl es3.0以上机型
  *      LIVE_UNSUPPORT_WX_NOTFOUND = -3;   未安装微信
  *      LIVE_UNSUPPORT_WX_VERSION = -4;    微信版本过低,一键开播最低需要微信7.0.15
  *      LIVE_UNSUPPORT_NOT_WHITELIST = -5; 不在白名单内的机型,完成兼容性测试后启用
  *      LIVE_UNSUPPORT_RESP_ERR = -6;      后台回包错误
  *      LIVE_UNSUPPORT_JSON_INVALID = -7   后台回包缺失相关字段
  *      LIVE_UNSUPPORT_NETWORK_ERR = -8    网络请求错误
  *      LIVE_ONLY_SUPPORT_LIVE = 1    仅支持直播不支持活动页面
  *      LIVE_ONLY_SUPPORT_ACTIVITY = 2    仅支持活动页面不支持直播
  *      LIVE_UNSUPPORT_ALL_WIDGET = -10    不支持活动页面不支持直播
  1. 如果是正式环境返回-5,需要在管理端 配置白名单,测试环境默认开启直播入口,而正式环境需要在管理端 配置白名单。

# 2.7 挂件创建视频号跳转失败

q2 q3

  1. 需联系一键直播产品开通startchannelLive权限。
  2. 可先前往微信创建

q4

# 2.8. 如何在微信侧开播

  1. 需在管理端申请权限:https://gamemp.weixin.qq.com/live#/live/begin-live/version

q5

# 3. 直播画面相关

# 3.1. IOS没有画面输出

  1. 检查自己使用的Metal还是OpenGLES

img.png

# 3.2. 画面颜色不正常,偏暗或泛白

  1. 联系后台开发,定位后台配置问题

# 4. 声音相关

# 4.1. 使用GVoice的游戏首次开播没有主播语音

  1. 确保在同意麦克风权限后再调用GVoice的invoke(4,1,0)
  2. V1.3.0之后的版本支持SDK内部处理麦克风权限,只需要在Init之后调用mLiveEngine.EnableInnerAudioPermissionAuth(true)
  3. 确保游戏Activity的onRequestPermissionsResult回调中调用WXGameLiveWrapper.onRequestPermissionsResult(arg0, arg1, arg2);

# 4.2. 直播没有游戏声音

  1. Unity内置音频采集组件,启用需要在Player Settings --> Other Settings --> Scripting Define Symbols中添加UNITY_AUDIO_CAPTURE
  2. fmod for unity音频采集组件,启用需要在Player Settings --> Other Settings --> Scripting Define Symbols中添加FMOD_AUDIO_CAPTURE
  3. IOS报错
[E][2023-09-08 ;+8.0 13:55:49.173][643, 10799219008*][WXGameLive][WXPcmPreprocessor.mm, -[WXPcmPreprocessor checkAndCopyModelFilesIfNeedToPath:], 48][modelBundle is empty.

检查是否将WXGameLiveKit.bundle加入到工程里。

img2.png

# 4.3. ios直播的时候切后台后再切回游戏会导致主播端游戏音乐和音效消失,且可以调节音量数值为0,直播间能正常听到游戏内的音乐和音效。关闭直播,主播端声音恢复

  1. 由于gvoice内部切换通话模式和媒体模式导致的,无论游戏用的wwise还是FMOD音频引擎,IOS因为是全系统共用的音频,都可能会存在兼容问题,所以需要GVoice切后台前invoke(4, 0, 0),回前台invoke(4, 1, 0)。(Gvioce SDK兼容问题)

# 4.4. 手机开的静音,开直播会强制打开手机声音

  1. 开播时会切换到通话模式,通话模式是无法静音的,音量不能调到0的,这个现象是符合预期的

# 4.5. 游戏使用了自研的音频引擎,导致直播无法收到音频

  1. 通过OnGamePcm这个接口把音频数据发送给sdk

# 4.6. 设置队友语音回调mVoiceEngine.OnPlayingData += OnPlayingData报错(其他回调同理)

Error: MSDK :   at GCloud.GVoice.GCloudVoiceEngine.SetOnPlayingDataCB () [0x00000] in <00000000000000000000000000000000>:0
at GCloud.GVoice.GCloudVoiceEngine.invoke (System.UInt32 nCmd, System.UInt32 nParam1, System.UInt32 nParam2, System.UInt32[] pOutput) [0x00000] in <00000000000000000000000000000000>:0
at TLivingSDKManager.InitGVoice (System.String openId) [0x00000] in <00000000000000000000000000000000>:0
at MSDK_Login.OnLoginRetEvent (GCloud.MSDK.MSDKLoginRet loginRet) [0x00000] in <00000000000000000000000000000000>:0
at GCloud.MSDK.OnMSDKRetEventHandler`1[T].Invoke (T ret) [0x00000] in <00000000000000000000000000000000>:0
at GCloud.MSDK.MSDKLogin.OnLoginRet (System.String json) [0x00000] in <00000000000000000000000000000000>:0
at GCloud.MSDK.MSDKMessageCenter.ParaseDelegate (System.Object arg) [0x00000] in <00000000000000000000000000000000>:0
at GCloud.MSDK.MSDKMessageCenter.Update () [0x00000] in <00000000000000000000000000000000>:0


UnityEngine.Logger:Log(LogType, Object)
GCloud.MSDK.MSDKMessageCenter:ParaseDelegate(Object)
GCloud.MSDK.MSDKMessageCenter:Update()
  1. 业务实现静态方法OnPlayingData,(重点查看是否是静态方法)
  2. 将OnPlayingData注册到GVoice,mVoiceEngine.OnPlayingData += OnPlayingData;

# 5.直播任务

# 5.1无法打开H5直播广场链接

  1. 查看链接额外参数是否配置齐全,并且额外参数的数据格式需要一致。需注意游戏appid是飞鹰系统微信平台的 appid。

img3.png

  1. 可查看接入pdf排错,或联系相关对接人员。

# 5.2直播任务挂件问题

  1. 可参考直播任务挂件接入

# 6. 其它

# 6.1. IOS接入SDK闪退,或者编译不过

  1. 编译报错,目标库未引用

    答:将VideoToolBox库增加到UnityFramework中

  2. 闪退,未链接

2023-03-08 10:27:07.439008+0800 jhx[1998:1118995] [general] Error loading
/var/containers/Bundle/Application/76561DE8-4C7-46D-B2C4-205B76D4D6A6/jyhx.app/Frameworks/UnityFramework
•framework/UnityFramework (131):
dlopen(/var/containers/Bundle/Application/76561DE8-4DC7-46D-B2C4-205B76D4D6A6/jyhx
•app/Frameworks/UnityFramework.framework/UnityFramework, Ox0109): Library not loaded:
@rpath/ilink_live.framework/ilink_live
Referenced from: <6067FA40-4DDF-3AD9-A3F8-E5A63787C37C>
/private/var/containers/Bundle/Application/76561DE8-4DC7-46D-B2C4-205B76D4D6A6/iyhx .app/Frameworks/UnityFramework.framework/UnityFramework
Reason: tried: '/usr/lib/swift/ilink_live.framework/ilink_live' (errno=2, not in dyld cache),
"/private/preboot/Cryptexes/os/us/lib/swift/ilink_live.framework/ilink_live'(errno=2)
/private/var/containers/Bundle/Application/76561DE8-4DC7-46D-B2C4-205B76D4D6A6/jiyhx
•app/Frameworks/ilink_live.framework/ilink_live' (errno=2),
'/private/var/containers/Bundle/Application/76561DE8-4DC7-46D-B2C4-205B76D4D6A6/iyhx
•app/Frameworks/ilink_live.framework/ilink_live' (errno=2),
'/usr/lib/swift/ilink_live.framework/ilink_live' (errno=2, not in dyld cache)

答:framework 没有link进来,需要将ilink_live.framework设置为Embed&Sign

  1. 检查IOS相关配置是否已配置 img4.png

# 6.2 安卓Kotlin报错ClassNotFoundException

  1. sdk引用了kotlin,但是没有直接将kt打包到sdk里面去,游戏的宿主工程需要同样引用kotlin,kotlin版本是否有冲突,查看依赖的其他SDK使用的kotlin版本是否与直播kotlin版本冲突,需要统一下版本。
  2. 如果1未生效,可能个别机型可能将kotlin和sdk的代码被分到的不同的dex包里,并且被混淆了,所以导致找不到相关的kt类,可以尝试配置混淆规则以避免 Kotlin 相关的类被混淆,在ProGuard 配置文件(通常是 proguard-rules.pro)中添加以下规则:
    • 保留 Kotlin 标准库的类和方法
      • keep class kotlin.** { *; }
    • 保留 Kotlin 反射相关的类和方法
      • keep class kotlin.reflect.** { *; }