Unreal 推送指南
本文介绍了如何在 Unreal 中使用推送通知功能。建议先阅读 推送通知服务总览 了解相关概念。
由于 Android 系统对于第三方推送管控越来越严格,所以目前只支持 iOS 及 Android 厂商(华为、小米、vivo、OPPO、魅族、荣耀)推送。
准备工作
前提条件
- 安装 UE 4.26 及以上版本
- iOS 12 或更高版本
- Android MinSDK 为 API21 或更高版本
iOS
请参考 iOS 推送设置指南申请 iOS 推送证书。
Android
请参考 Android 混合推送开发指南申请各厂商 Android 推送权限。
注意:这里只需要参考混合推送指南申请各厂商的推送权限,不需要 参考混合推送指南中 Android 相关配置的内容。
接入推送服务
安装插件
- 下载 TapSDK.zip 解压后将
LeanCloudPush
、LeanCloud
文件夹Copy
到项目的Plugins
目录中(如果项目中缺少关于 AndroidX 的配置,可以将AndroidX
也Copy
到项目中) - 重启 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