Deployment

To deploy an ArcGIS Maps SDK for Unreal Engine app, see Build Operations: Cook, Package, Deploy, and Run from the Unreal Engine documentation.

To deploy an app to a mobile device, you can find more information on the Unreal Engine Mobile Game Development page.

For documentation specific to the Android platform, refer to the Android Game Development page. For documentation specific to the iOS platform, refer to the iOS Game Development page.

Platform specific requirements

Android

Online services over HTTPS

ArcGIS Maps SDK for Unreal Engine relies on OpenSSL to access online services over HTTPS. The plugin comes with support for OpenSSL but the OpenSSL libraries are not part of this plugin so you should include them in your Unreal project. Although prebuilt binaries can be found on the Internet, building OpenSSL from source is recommended.

ArcGIS Maps SDK for Unreal Engine expects the OpenSSL binaries to be named libcrypto_1_1.so and libssl_1_1.so. The plugin will try to load them at run-time. If they are not present, only access to online services over HTTP will be enabled.

Once the binaries have been included to the Unreal project, a APL/UPL XML file should be used to include them in the APK.

You can use the following example:

                                          
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
<?xml version="1.0" encoding="utf-8"?>
<!-- steps to add to build additions -->
<root xmlns:android="http://schemas.android.com/apk/res/android">
	<!-- init section is always evaluated once per architecture -->
	<init>
		<setBool result="bSupported" value="false"/>
		<isArch arch="armeabi-v7a">
			<setBool result="bSupported" value="true"/>
		</isArch>
		<isArch arch="arm64-v8a">
			<setBool result="bSupported" value="true"/>
		</isArch>
	</init>

	<!-- optional files or directories to copy to Intermediate/Android/APK -->
	<resourceCopies>
		<isArch arch="armeabi-v7a">
			<log text="Copying libcrypto_1_1.so"/>
			<copyFile
				src="$S(PluginDir)/Binaries/Android/armv7/libcrypto_1_1.so"
				dst="$S(BuildDir)/libs/armeabi-v7a/libcrypto_1_1.so"
			/>
			<log text="Copying libssl_1_1.so"/>
			<copyFile
				src="$S(PluginDir)/Binaries/Android/armv7/libssl_1_1.so"
				dst="$S(BuildDir)/libs/armeabi-v7a/libssl_1_1.so"
			/>
		</isArch>
		<isArch arch="arm64-v8a">
			<log text="Copying libcrypto_1_1.so"/>
			<copyFile
				src="$S(PluginDir)/Binaries/Android/arm64/libcrypto_1_1.so"
				dst="$S(BuildDir)/libs/arm64-v8a/libcrypto_1_1.so"
			/>
			<log text="Copying libssl_1_1.so"/>
			<copyFile
				src="$S(PluginDir)/Binaries/Android/arm64/libssl_1_1.so"
				dst="$S(BuildDir)/libs/arm64-v8a/libssl_1_1.so"
			/>
		</isArch>
	</resourceCopies>
</root>

The example XML assumes the OpenSSL binaries were placed in Binaries\Android relative to the XML file.

Make sure you include this file by using the following line of code:

 
1
AdditionalPropertiesForReceipt.Add("AndroidPlugin", Path.Combine(ModuleDirectory, "Android_OpenSSL_UPL.xml"));

in the Build.cs file of your project.

Deep linking for OAuth

If your OAuth challenge handler is based on deep linking, make sure you set up your Unreal project to enable it. To do this, the Android manifest should be modified using an APL file.

                  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<androidManifestUpdates>
    <loopElements tag="activity">
        <setStringFromAttribute result="activityName" tag="$" name="android:name" />
        <setBoolIsEqual result="bGameActivity" arg1="$S(activityName)" arg2="com.epicgames.ue4.GameActivity" />
        <if condition="bGameActivity">
            <true>
                <addElements tag="$">
                    <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="unreal" android:host="auth" />
                    </intent-filter>
                </addElements>
            </true>
        </if>
    </loopElements>
</androidManifestUpdates>

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.