跳到主要内容

Unreal 推送指南

本文介绍了如何在 Unreal 中使用推送通知功能。建议先阅读 推送通知服务总览 了解相关概念。

由于 Android 系统对于第三方推送管控越来越严格,所以目前只支持 iOS 及 Android 厂商(华为、小米、vivo、OPPO、魅族、荣耀)推送。

准备工作

前提条件

  • 安装 UE 4.26 及以上版本
  • iOS 12 或更高版本
  • Android MinSDK 为 API21 或更高版本

iOS

请参考 iOS 推送设置指南申请 iOS 推送证书。

Android

请参考 Android 混合推送开发指南申请各厂商 Android 推送权限。

注意:这里只需要参考混合推送指南申请各厂商的推送权限,不需要 参考混合推送指南中 Android 相关配置的内容。

接入推送服务

安装插件

  • 下载 TapSDK.zip 解压后将 LeanCloudPushLeanCloud 文件夹 Copy 到项目的 Plugins 目录中(如果项目中缺少关于 AndroidX 的配置,可以将 AndroidXCopy 到项目中)
  • 重启 Unreal Editor
  • 打开 编辑 > 插件 > 项目 > TapTap,开启 LeanCloudPush 模块

依赖所需模块

Project.Build.cs 中添加所需模块:

PublicDependencyModuleNames.AddRange(new string[] { 
"Core",
"CoreUObject",
"Engine",
"Slate",
"SlateCore",
"Http",
"Json",
"JsonUtilities",
});
if (Target.Platform == UnrealTargetPlatform.IOS || Target.Platform == UnrealTargetPlatform.Android)
{
PublicDependencyModuleNames.AddRange(
new string[]
{
// 推送接入
"LeanCloudPush",
"LeanCloudMobile"
}
);
}
else
{
PublicDependencyModuleNames.AddRange(
new string[]
{
"LeanCloud"
}
);
}

项目所需配置

iOS 所需配置项

在文件 DefaultEngine.ini 添加如下配置:

[/Script/IOSRuntimeSettings.IOSRuntimeSettings]
bEnableRemoteNotificationsSupport=True

Android 所需配置项

  • 新建一个名叫 app 的文件夹,将从华为开发者中心下载到的 agconnect-services.json 文件拷贝到文件夹里
  • 在项目安卓的 UPL 文件中加入如下代码(没有 UPL 新建一个),填写正确的配置
<resourceCopies>
<copyDir src="$S(PluginDir)/你的路径/app/" dst="$S(BuildDir)/gradle/app/" />
</resourceCopies>

<androidManifestUpdates>
<addElements tag="application">
<meta-data
android:name="com.vivo.push.api_key"
android:value="vivo的key"/>
<meta-data
android:name="com.vivo.push.app_id"
android:value="vivo的appid"/>
<meta-data
android:name="com.hihonor.push.app_id"
android:value="荣耀的appid" />

</addElements>
</androidManifestUpdates>

导入头文件

#if PLATFORM_IOS
#include "iOS/LCIOSPush.h"
#elif PLATFORM_ANDROID
#include "Android/LCAndroidPush.h"
#endif

如何使用

将开发者平台获得的配置填入下面接口中:

#if PLATFORM_IOS
FLCIOSPush::Register("iOS Team ID");
#elif PLATFORM_ANDROID
FString DeviceName = FLCAndroidPush::GetDeviceName().ToLower();
if (DeviceName.Contains("huawei")) {
FLCAndroidPush::RegisterHuaWei();
} else if (DeviceName.Contains("oppo")) {
FLCAndroidPush::RegisterOPPO("OPPO的AppKey", "OPPO的AppSecret");
} else if (DeviceName.Contains("vivo")) {
FLCAndroidPush::RegisterVIVO();
} else if (DeviceName.Contains("meizu")) {
FLCAndroidPush::RegisterMeiZu("Meizu的AppId", "Meizu的AppKey");
} else if (DeviceName.Contains("honor")) {
FLCAndroidPush::RegisterHonor();
} else {
FLCAndroidPush::RegisterXiaoMi("小米的AppId", "小米的AppKey");
}
#endif