11/25/2024 10:18:48

接入教程(UnrealEngine)

一、导入插件

按照 GCloudSDK 文档指引,将 SDK 导入工程中。

二、配置环境

请先参考 环境配置 文档。

[info] 如果你接入了 GCloudSDK,以下关于 Android、iOS 的文件配置操作请参考 GCloud 文档。

2.1 Android

在 MSDK_UPL.xml 文件的 androidManifestUpdates 节点,加入每个 渠道功能 中必需的权限。

以下示例代码是增加 QQ 的配置:

<androidManifestUpdates>
    <log text="MSDK-UPL AndroidManifestUpdates begin" />  

    <!-- *************** MSDK 配置 ************** -->
    <addElements tag="application">

        <!-- *************** QQ 渠道配置 ************** -->
        <activity
            android:name="com.tencent.connect.common.AssistActivity"
            android:configChanges="orientation|screenSize|keyboardHidden"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />

        <activity
            android:name="com.tencent.tauth.AuthActivity"
            android:launchMode="singleTask"
            android:noHistory="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data android:scheme="tencent1106977030" />
            </intent-filter>
        </activity>

    </addElements>
    <log text="MSDK-UPL AndroidManifestUpdates finish" /> 
</androidManifestUpdates>

在 MSDK_UPL.xml 中,以下代码是 MSDK Android 生命周期和初始化的代码。

<!-- GameActivity.java中导入类 -->
  <gameActivityImportAdditions>
    <insert>
import com.tencent.gcloud.msdk.api.MSDKPlatform;
import com.tencent.gcloud.msdk.api.login.MSDKLoginRet;
import com.tencent.gcloud.msdk.tools.IT;
import com.tencent.gcloud.msdk.tools.MSDKLog;
import com.tencent.gcloud.msdk.tools.json.JsonSerializable;
    </insert>
  </gameActivityImportAdditions>

  <!--GameActivity.java onCreate添加代码 -->
  <gameActivityOnCreateAdditions>
    <insert>
        MSDKPlatform.initialize(this);
    </insert>
  </gameActivityOnCreateAdditions>

  <!-- GameActivity.java onActivityResult添加代码 -->
  <gameActivityOnActivityResultAdditions>
    <insert>
      MSDKPlatform.onActivityResult(requestCode,resultCode,data);
    </insert>
  </gameActivityOnActivityResultAdditions>

  <!--GameActivity.java OnNewIntent添加代码-->
  <gameActivityOnNewIntentAdditions>
    <insert>
      MSDKPlatform.onNewIntent(newIntent);
    </insert>
  </gameActivityOnNewIntentAdditions>

2.2 iOS

Project Settings - iOS - Extra Plist Data - Aditional Plist Data - 中添加相关的配置信息中添加相关的渠道信息。

以微信为例,微信需要在Info.plist 添加以下内容:

<key>CFBundleURLTypes</key>
<array>
    <dict> 
        <key>CFBundleTypeRole</key> 
        <string>Editor</string> 
        <key>CFBundleURLSchemes</key> 
        <array> 
            <string>xxxxx</string> 
        </array> 
    </dict> 
</array>     
<key>LSApplicationQueriesSchemes</key> 
<array>  
    <string>weixin</string> 
    <string>wechat</string> 
</array>

拷贝各个渠道的plist内容,复制到下图位置。

三、接入功能

3.1 注册MSDK初始化回调

0) 注意事项:

该接口 PIX 版本必须接入,非 PIX 版本可不接入

  • 一般版本:版本号第三段以 0 开头,如:V5.31.000
  • Pix 版本: 版本号第三段以 1 开头,如:V5.31.100

1) 功能描述

接受MSDK初始化完成的回调,游戏需要注册回调函数进行处理。游戏需要等待该回调完成后,才能开始调用MSDK其他模块功能接口。

2)接口声明

C++
class MSDK_EXPORT MSDKInitObserver
{
	
public:
    // MSDK初始化回调
    virtual void OnInitCompleteNotify(const MSDKBaseRet &baseRet) {};
};

3)示例代码

C++
MSDK::SetMSDKInitObserver(new MSDKDemoInitObserver());

class MSDKDemoInitObserver : public MSDKInitObserver
{
public:
    // MSDK初始化完成回调
    void OnInitCompleteNotify(const MSDKBaseRet &baseRet) 
    {
        if (baseRet.retCode == MSDKError::SUCCESS)
         {
            MSDKPIX_LOG_ERROR("", "MSDK is initialized successfully. ");
            // 此时可以调用MSDK接口了
        } 
        else 
        {
            MSDKPIX_LOG_ERROR("", "Failed to initialize MSDK.");
        }
    }
};

3.2 MSDK 功能模块

MSDK 功能模块的调用,请参考 功能模块 文档中的调用方式。

[info] UnrealEngine Editor 环境中仅支持 模拟登录,其他功能模块接入,需要出包调试。

四、常见问题

1、游戏杀死进程,点击手Q结构化消息或手Q游戏中心拉起游戏(账号未实名)实名认证页,点击返回游戏,游戏黑屏。

  • UnrealEngine 上,使用 Android Dialog 弹出测试环境提醒,在进行程序切换的过程中可能导致游戏黑屏。切换正式环境后不会有该问题。

2、UnrealEngine Android 加壳,MSDK 启动后 MSDKCore 崩溃,详情如下

/system/bin/tombstoned: received crash request for pid 17132
crash_dump32: performing dump of process 17132 (target tid = 17132)
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'Xiaomi/chiron/chiron:8.0.0/OPR1.170623.027/V10.2.2.0.ODECNXM:user/release-keys'
Revision: '0'
ABI: 'arm'
pid: 17132, tid: 17132, name: om.tencent.xxxx  >>> com.tencent.xxxx <<<
signal 7 (SIGBUS), code 1 (BUS_ADRALN), fault addr 0x6f732e
r0 00000020  r1 2f62696c  r2 00000015  r3 2f6d7261
r4 5562696c  r5 c4e0bcb8  r6 00000020  r7 732e3445
r8 c4da37bd  r9 6c50006f  sl d4c13124  fp 6e696775
ip c4dfe06c  sp ffa62af8  lr c4bc63cf  pc 006f732e  cpsr 200e0010

backtrace:
#00 pc 006f732e  <unknown>
#01 pc 000b63cb  /data/app/com.tencent.xxxx-snxAMykZwlX4C7sfQvQjbw==/lib/arm/libMSDKCore.so (_ZNSt6__ndk112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcj+46)
  • 问题原因是 UnrealEngine 与 Android C++ 环境不一样,需要保证 so 加载的顺序,内部函数才能正常执行。
  • 解决方案可在 MSDKCore/Source/MSDKCore/MSDKCore_UPL.xml 文件此行代码后
<log text="MSDK-UPL MSDK.so loaded after libUE4.so" />

新增以下代码解决。

 <loadLibrary name="MSDKCore" failmsg="MSDKCore libary not loaded!“ />

3、关于 Android 端混淆配置文件 proguard-rules.pro 的注意事项

PIX 版本,大部分 java 类都是通过 JNI 反射调用的,当业务开启代码混淆后,可能会导致部分反射找不到类或方法。当业务在 gradle 打包插件时,业务需注意 MSDK proguard-rules.pro 文件新增的内容。



Copyright © 2024 MSDK.
All rights reserved.

results matching ""

    No results matching ""