# Android UE4 接入步骤

# 引入文件到项目中

将提供的 aar 文件添加到项目,如果项目不支持 gradle 构建,需解压 aar 包得到 jar 包和资源 res 目录,将 jar 和 res 资源目录添加到项目

# SlugSDK_APL.xml 配置:

<!-- 不使用aar包需要配置activity和service声明 -->
<androidManifestUpdates>
      <addElements tag="application">
        <activity
            android:name="com.tencent.slugsdk.minprogram.SlugMiniProgramActivity"
            android:configChanges="orientation|screenSize|keyboardHidden|smallestScreenSize|screenLayout"
            android:exported="false"
            android:process=":ingame_inner_webview"
            android:screenOrientation="sensor"
            android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"
            android:windowSoftInputMode="adjustPan">
          <meta-data
              android:name="android.max_aspect"
              android:value="2.2" />
          <meta-data
              android:name="notch.config"
              android:value="portrait|landscape" />
          <meta-data
              android:name="android.notch_support"
              android:value="true" />
          <intent-filter>
            <action android:name="com.tencent.slugsdk.minprogram.SlugMiniProgramActivity" />
            <category android:name="android.intent.category.DEFAULT" />
          </intent-filter>
        </activity>
        <activity
            android:name="com.tencent.slugsdk.SlugWebActivity"
            android:configChanges="orientation|screenSize|keyboardHidden|smallestScreenSize|screenLayout"
            android:exported="false"
            android:process=":ingame_inner_webview"
            android:screenOrientation="sensor"
            android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"
            android:windowSoftInputMode="adjustPan">
          <meta-data
              android:name="android.max_aspect"
              android:value="2.2" />
          <meta-data
              android:name="notch.config"
              android:value="portrait|landscape" />
          <meta-data
              android:name="android.notch_support"
              android:value="true" />
          <intent-filter>
            <action android:name="com.tencent.slugsdk.SlugWebActivity" />
            <category android:name="android.intent.category.DEFAULT" />
          </intent-filter>
        </activity>
        <service
            android:name="com.tencent.slugsdk.config.SlugConfigService"
            android:enabled="true"
            android:exported="false"
            android:process=":ingame_inner_slugsdk_config" />
      </addElements>
  </androidManifestUpdates>
  <!-- GameActivity.java中导入类 -->
  <gameActivityImportAdditions>
    <insert>
      import com.tencent.slugsdk.SlugWebAdapter;
    </insert>
  </gameActivityImportAdditions>

  <!-- 使用高清视频播放器需要配置 -->
  <proguardAdditions>
    <insert>
      -keep interface    com.tencent.thumbplayer.api.** { *; }
      -keep class        com.tencent.thumbplayer.api.** { *; }
      -keep interface    com.tencent.thumbplayer.core.** { *; }
      -keep class        com.tencent.thumbplayer.core.** { *; }
      -keep class        com.tencet.tvkbeacon.** {*;}
    </insert>
  </proguardAdditions>


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73

# SlugSDK.build.cs

    if (Target.Platform == UnrealTargetPlatform.Android)
    {
        PrivateDependencyModuleNames.Add("Launch");
        string PluginPath = Utils.MakePathRelativeTo(ModuleDirectory, Target.RelativeEnginePath);
        string aplPath = PluginPath + "/SlugSDK_APL.xml";
        AdditionalPropertiesForReceipt.Add(new ReceiptProperty("AndroidPlugin", aplPath));
    }
1
2
3
4
5
6
7

# 初始化 SDK

# 参数说明

/*
* 初始化sdk配置,在登录后进入游戏大厅界面调用初始化,通用版本
* */
static void initSlugSDKConfig();

/*
* 初始化sdk配置,在登录后进入游戏大厅界面调用初始化,接入高清视频版本时使用
* @appkey 高清视频appkey
* @platform 高清视频platform
* @stdfrom 高清视频stdfrom
* */
static void initSlugSDKConfig(FString appkey, int platform, FString stdfrom);
1
2
3
4
5
6
7
8
9
10
11
12

# 接口实现

/*
* 通用版本
*/
void AndroidSlugSDK::initSlugSDKConfig(){
    JNIEnv *env = FAndroidApplication::GetJavaEnv();
    jclass cls = FAndroidApplication::FindJavaClass("com/tencent/slugsdk/SlugWebAdapter");
    jmethodID jInitSdkMthod = env->GetStaticMethodID(cls, "initSlugSDKConfig", "(Landroid/content/Content;)V");
	env->CallStaticVoidMethod(cls, jInitSdkMthod, FAndroidApplication::GetGameActivityThis());
}

/*
* 高清视频版本
*/
void AndroidSlugSDK::initSlugSDKConfig(FString appkey, int platform, FString stdfrom){
    JNIEnv *env = FAndroidApplication::GetJavaEnv();
    jclass cls = FAndroidApplication::FindJavaClass("com/tencent/slugsdk/SlugWebAdapter");
    jstring jAppkey = env->NewStringUTF(TCHAR_TO_UTF8(*appkey));
    jstring jStdfrom = env->NewStringUTF(TCHAR_TO_UTF8(*stdfrom));
    jmethodID jInitSdkMthod = env->GetStaticMethodID(cls, "initSlugSDKConfig", "(Landroid/content/Content;Ljava/lang/String;ILjava/lang/String;)V");
	env->CallStaticVoidMethod(cls, jInitSdkMthod, FAndroidApplication::GetGameActivityThis(), jAppkey, platform, jStdfrom);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 打开微社区

注意:打开微社区页面会打开一个 activity(在新进程), 这时游戏的 activity 将处于后台(处于后台可能与服务器连接会断开),返回游戏大厅时游戏注意如果与服务器连接断开需要游戏自动重新连接下

# 参数说明

/*
* @url 打开的页面url
* @supportedOrientations 设置屏幕方向类型(1:只支持横屏,2:只支持竖屏,3:横竖屏都支持)
* @qqAppid 设置游戏的qq Appid(用来分享到qq)
* @wxAppid 设置游戏的微信Appid(用来分享到微信)
* @className: String类型,比如"com.tencent.ingame.TestActivity",从H5页面跳转到游戏的某个界面,如果不需要可以设置为"",H5页面跳转到游戏的某个界面时,会先跳转到游戏的该Activity(Activity声明需设置singleTask或singleTop)再由该Activity作为中转跳转到具体的游戏界面,该Activity先在onNewIntent方法setIntent(intent),然后可以通过getIntent().getStringExtra("routeInfo")获取跳转的路由信息,比如关闭浏览器时获取的routeInfo值为"close"
* @finishShouldSendMsgToGame 浏览器webview finish时向游戏发送close消息,不需要可以传false,如果需要则必须先设置@className参数
* @webviewBackground 设置打开的浏览器背景颜色,比如#ffffffff
* */
static void openIngameCommunityByUrl(FString url, int supportedOrientations, FString qqAppid, FString wxAppid, FString className, bool finishShouldSendMsgToGame, FString webviewBackground);
1
2
3
4
5
6
7
8
9
10

# 接口实现

void AndroidSlugSDK::OpenIngameCommunity(FString url, int supportedOrientations, FString qqAppid, FString wxAppid, FString className, bool finishShouldSendMsgToGame, FString webviewBackground){
    JNIEnv *env = FAndroidApplication::GetJavaEnv();
    jclass cls = FAndroidApplication::FindJavaClass("com/tencent/slugsdk/SlugWebAdapter");
    jmethodID jOpenCommunityMthod = env->GetStaticMethodID(cls, "openIngameCommunityByUrl", "(Landroid/app/Activity;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;)V");
    jstring jUrl = env->NewStringUTF(TCHAR_TO_UTF8(*url));
	jstring jqqAppID = env->NewStringUTF(TCHAR_TO_UTF8(*qqAppID));
	jstring jwxAppID = env->NewStringUTF(TCHAR_TO_UTF8(*wxAppID));
	jstring jclassName = env->NewStringUTF(TCHAR_TO_UTF8(*className));
	jstring jwebColor = env->NewStringUTF(TCHAR_TO_UTF8(*WebViewBackgroundColor));
	env->CallStaticVoidMethod(cls, jOpenCommunityMthod, FAndroidApplication::GetGameActivityThis(), jUrl, supportedOrientations, jqqAppID, jwxAppID, jclassName, finishShouldSendMsgToGame, jwebColor);
}
1
2
3
4
5
6
7
8
9
10
11

# 使用示例

#include "AndroidSlugSDK.h"
SlugSDK::AndroidSlugSDK::OpenIngameCommunity("https://www.qq.com", 1, "testqqappid", "testwxappid", "", false, "#ffffff");

1
2
3

# 拼接用户参数

游戏客户端需在微社区首页 URL 上拼接以下参数:

参数名 描述 必须
openid 游戏的 openid 如果是 msdkv5 版本则必传
gameid_v5 msdkv5 分配的游戏的 gameid 如果是 msdkv5 版本则必传
areaid 账号类型:1(微信),2(QQ)
partition 区服 id,若无则传 0
platid 平台类型:0(iOS),1(Android)
roleid 角色 id
lng 用户当前位置:经度
lat 用户当前位置:纬度

示例一:

首页 URL:https://sy.qq.com/hyrzol/ingame/

拼接后 URL:https://sy.qq.com/hyrzol/ingame/?openid=xxx&gameid_v5=xxx&areaid=1&platid=0&partition=8195&roleid=2306687434798319382&lng=113.944527&lat=22.547869

示例二:

首页 URL:https://sy.qq.com/zhuoyao/ingame/?router=moment

拼接后 URL:https://sy.qq.com/zhuoyao/ingame/?router=moment&openid=xxx&gameid_v5=xxx&areaid=2&partition=0&platid=1&roleid=40520350780&lng=113.944527&lat=22.547869