# 1 UE4工程相关配置

# 1.1 Sign In with Apple 苹果登录相关配置

DefaultEngine.ini/Script/IOSRuntimeSettings.IOSRuntimeSettings中添加字段bEnableSignInWithAppleSupport值为True,代码如下:


bEnableSignInWithAppleSupport=True

1
2
3

WARNING

2020年4月开始包含第三方登录都需要添加苹果登录,这一步骤不可少,否则苹果登录会失败

Updated Resources and Guidelines for Sign in with Apple (opens new window)

# 2 UE4 Swift混编配置

WARNING

SDK因为涉及到Swift混编,因此UE4需要做如下配置。
如果不配置,则会出现UE4无法成功编译,配置只需要一次,但是如果重装或者修复了UE4编辑器则需要重新配置。

下述配置操作以 UE4.27 来作为示例

# 2.1 第一步:修改XcodeProject.cs文件

修改XcodeProject.cs文件,文件路径为/UE4/UE_4.27/Engine/Source/Programs/UnrealBuildTool/ProjectFiles/Xcode/XcodeProject.cs ,作如下修改

  • 备注:这个文件位置是在UE4安装目录,每个CP安装UE4的目录可能出现不一致,可以使用全局搜索XcodeProject.cs文件找到当前目录,例如:Mac电脑地址为/Users/Shared/Epic Games/UE_4.27/Engine/Source/Programs/UnrealBuildTool/ProjectFiles/Xcode/XcodeProject.cs.

修改函数


private void AppendProjectBuildConfiguration(StringBuilder Content, string ConfigName, string ConfigGuid)

1
2
3

修改内容

# 2.2 第二步:修改IOSToolChain.cs文件

修改IOSToolChain.cs文件,文件路径为UE4/UE_4.27/Engine/Source/Programs/UnrealBuildTool/Platform/IOS/IOSToolChain.cs

  • 备注 :这个文件位置是在UE4安装目录,每个CP安装UE4的目录可能出现不一致。修改如下
  • 以下代码放到 // need to tell where to load Framework dylibs 注释上面, 位置不对,会导致打出的iOS包启动crash

修改函数


string GetLinkArguments_Global(LinkEnvironment LinkEnvironment)

1
2
3

修改内容

# 2.3 第三步:重新编译UBT

使用 msbuild 工具重新编译 UnrealBuildTool ,即在xxx/UE4/UE_4.27/Engine/Source/Programs/UnrealBuildTool,目录运行 msbuild 来重新编译

直到出现下图后,则表示生成成功

WARNING

1、Mac环境下如果无法执行msbuild命令
1.1 下载Mono.framework (opens new window)
1.2 将Moon.framework拷贝至/Library/Frameworks/Mono.framework目录下
1.3 打开 ~/.zshrc 文件,添加环境变量export PATH="/Library/Frameworks/Mono.framework/Versions/6.12.0/Commands:$PATH"
1.4 使用source ~/.zshrc命令刷新环境变量,即可使用msbuild命令

2、编译过程中可能出现权限问题,导致生成失败.则需要执行chmod 755+ 相关文件路径增加执行权限

# 3 iOS全球渠道第三方登录配置

  • iOS因为需要配置NSAppTransportSecurity,LSApplicationQueriesSchemes,CFBundleURLTypes,以及相关权限申明,需要在UE4编辑器中项目设置/iOS/ Extra PList Data中添加,如图:

# 3.1 Facebook登录配置

  • 游戏需要支持Facebook登录则需要在项目设置/iOS/Extra PList Data中添加如下Facebook配置代码:

<key>CFBundleURLTypes</key>
<array>
        <dict>
                <key>CFBundleTypeRole</key>
                <string>Editor</string>
                <key>CFBundleURLName</key>
                <string>facebook</string>
                <key>CFBundleURLSchemes</key>
                <array>
                        <string>fb768888346983340</string>
                </array>
        </dict>
</array>
<key>FacebookAdvertiserIDCollectionEnabled</key>
<true/>
<key>FacebookAppID</key>
<string>FacebookAppID</string>
<key>FacebookAutoLogAppEventsEnabled</key>
<false/>
<key>FacebookDisplayName</key>
<string>FacebookDisplayName</string>
<key>FacebookClientToken</key>
<string>FacebookClientToken</string>
<key>LSApplicationQueriesSchemes</key>
<array>
        <string>fbapi</string>
        <string>fbapi20130214</string>
        <string>fbapi20130410</string>
        <string>fbapi20130702</string>
        <string>fbapi20131010</string>
        <string>fbapi20131219</string>
        <string>fbapi20140410</string>
        <string>fbapi20140116</string>
        <string>fbapi20150313</string>
        <string>fbapi20150629</string>
        <string>fbapi20160328</string>
        <string>fbauth</string>
        <string>fbauth2</string>
        <string>fb-messenger-api20140430</string>
        <string>fb-messenger-api</string>
        <string>fb-messenger-share-api</string>
        <string>fbshareextension</string>
</array>

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

注意:

  • FacebookAppID为Facebook APPID,需要游戏修改为申请的正式参数
  • FacebookDisplayName为Facebook DisplayName,需要游戏修改为申请的正式参数
  • FacebookClientToken值需要从Facebook开发者网站获取,需要游戏修改为申请的正式参数

# 3.2 Twitter登录配置

  • 游戏需要支持Twitter登录则需要在项目设置/iOS/Extra PList Data中添加如下Twitter配置代码:

<key>CFBundleURLTypes</key>
<array>
        <dict>
                <key>CFBundleTypeRole</key>
                <string>Editor</string>
                <key>CFBundleURLName</key>
                <string>twitter</string>
                <key>CFBundleURLSchemes</key>
                <array>
                        <string>twitterkit-Jcqz4RZJuCv6iDQZ2Nf9mJXxF</string>
                </array>
        </dict>        
</array>

<key>LSApplicationQueriesSchemes</key>
<array>
        <string>twitter</string>
        <string>twitterauth</string>
</array>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 3.3 LINE登录配置

  • 游戏需要支持LINE登录则需要在项目设置/iOS/Extra PList Data中添加如下LINE配置代码:

<key>CFBundleURLTypes</key>
<array>
        <dict>
                <key>CFBundleTypeRole</key>
                <string>Editor</string>
                <key>CFBundleURLSchemes</key>
                <array>
                        <string>line3rdp.$(PRODUCT_BUNDLE_IDENTIFIER)</string>
                </array>
        </dict>
</array>

<key>LSApplicationQueriesSchemes</key>
<array>
        <string>line</string>
        <string>lineauth2</string>
</array>

<key>LineSDKConfig</key>
<dict>
        <key>ChannelID</key>
        <string>1654474289</string>
</dict>

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

注意:

  • 1654474289为LINE APPID,需要游戏修改为申请的正式参数

# 3.4 Google登录配置

  • 游戏需要支持Google登录则需要在项目设置/iOS/Extra PList Data中添加如下LINE配置代码:

<key>CFBundleURLTypes</key>
<array>
        <dict>
                <key>CFBundleTypeRole</key>
                <string>Editor</string>
                <key>CFBundleURLName</key>
                <string>google</string>
                <key>CFBundleURLSchemes</key>
                <array>
                        <string>com.googleusercontent.apps.563030493444-cvpb7br6sbkof7s1n5j1grfqk6dhuu8d</string>
                </array>
        </dict>
</array>


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

注意:

  • com.googleusercontent.apps.563030493444-cvpb7br6sbkof7s1n5j1grfqk6dhuu8d为Demo测试参数,需要游戏修改为申请的正式参数

提示

所有的第三方登录方式配置涉及到CFBundleURLTypes,LSApplicationQueriesSchemes都统一写在Array中分组配置,例如游戏同时支持FacebTwitter,LINE,Google登录,按照如下配置添加到项目设置/iOS/Extra PList Data`


<key>CFBundleURLTypes</key>
<array>
        <dict>
                <key>CFBundleTypeRole</key>
                <string>Editor</string>
                <key>CFBundleURLName</key>
                <string>facebook</string>
                <key>CFBundleURLSchemes</key>
                <array>
                        <string>fb768888346983340</string>
                </array>
        </dict>
        <dict>
                <key>CFBundleTypeRole</key>
                <string>Editor</string>
                <key>CFBundleURLName</key>
                <string>twitter</string>
                <key>CFBundleURLSchemes</key>
                <array>
                        <string>twitterkit-Jcqz4RZJuCv6iDQZ2Nf9mJXxF</string>
                </array>
        </dict>
        <dict>
                <key>CFBundleTypeRole</key>
                <string>Editor</string>
                <key>CFBundleURLSchemes</key>
                <array>
                        <string>line3rdp.$(PRODUCT_BUNDLE_IDENTIFIER)</string>
                </array>
        </dict>
        <dict>
                <key>CFBundleTypeRole</key>
                <string>Editor</string>
                <key>CFBundleURLName</key>
                <string>google</string>
                <key>CFBundleURLSchemes</key>
                <array>
                        <string>com.googleusercontent.apps.563030493444-cvpb7br6sbkof7s1n5j1grfqk6dhuu8d</string>
                </array>
        </dict>
</array>
<key>FacebookAdvertiserIDCollectionEnabled</key>
<true/>
<key>FacebookAppID</key>
<string>FacebookAppID</string>
<key>FacebookAutoLogAppEventsEnabled</key>
<false/>
<key>FacebookDisplayName</key>
<string>FacebookDisplayName</string>
<key>FacebookClientToken</key>
<string>FacebookClientToken</string>

<key>LSApplicationQueriesSchemes</key>
<array>
        <string>fbapi</string>
        <string>line</string>
        <string>lineauth2</string>
        <string>fbapi20130214</string>
        <string>fbapi20130410</string>
        <string>fbapi20130702</string>
        <string>fbapi20131010</string>
        <string>fbapi20131219</string>
        <string>fbapi20140410</string>
        <string>fbapi20140116</string>
        <string>fbapi20150313</string>
        <string>fbapi20150629</string>
        <string>fbapi20160328</string>
        <string>fbauth</string>
        <string>fbauth2</string>
        <string>fb-messenger-api20140430</string>
        <string>fb-messenger-api</string>
        <string>fb-messenger-share-api</string>
        <string>fbshareextension</string>
        <string>twitter</string>
        <string>twitterauth</string>
</array>
<key>LineSDKConfig</key>
<dict>
        <key>ChannelID</key>
        <string>1654474289</string>
</dict>


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
74
75
76
77
78
79
80
81
82
83
84

# 4 iOS国内渠道第三方登录配置

# 4.1 QQ登录配置

  • 游戏需要支持QQ登录则需要在项目设置/iOS/Extra PList Data中添加如下QQ配置代码:

<key>CFBundleURLTypes</key>
<array>
        <dict>
                <key>CFBundleTypeRole</key>
                <string>Editor</string>
                <key>CFBundleURLName</key>
                <string>tencent</string>
                <key>CFBundleURLSchemes</key>
                <array>
                        <string>tencent101977956</string>
                </array>
        </dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>

<string>mqq</string>
        <string>mqqapi</string>
        <string>mqqwpa</string>
        <string>mqqbrowser</string>
        <string>mttbrowser</string>
        <string>mqqOpensdkSSoLogin</string>
        <string>mqqopensdkapiV2</string>
        <string>mqqopensdkapiV3</string>
        <string>mqqopensdkapiV4</string>
        <string>wtloginmqq2</string>
        <string>mqzone</string>
        <string>mqzoneopensdk</string>
        <string>mqzoneopensdkapi</string>
        <string>mqzoneopensdkapi19</string>
        <string>mqzoneopensdkapiV2</string>
        <string>mqqapiwallet</string>
        <string>mqqopensdkfriend</string>
        <string>mqqopensdkdataline</string>
        <string>mqqgamebindinggroup</string>
        <string>mqqopensdkgrouptribeshare</string>
        <string>tencentapi.qq.reqContent</string>
        <string>tencentapi.qzone.reqContent</string>
        <string>tim</string>
        <string>timapi</string>
        <string>timopensdkfriend</string>
        <string>timwpa</string>
        <string>timgamebindinggroup</string>
        <string>timapiwallet</string>
        <string>timOpensdkSSoLogin</string>
        <string>wtlogintim</string>
        <string>timopensdkgrouptribeshare</string>
        <string>timopensdkapiV4</string>
        <string>timgamebindinggroup</string>
        <string>timopensdkdataline</string>
        <string>wtlogintimV1</string>
        <string>timapiV1</string>

</array>

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

注意:

  • tencent101977956QQ APPID,需要游戏修改为申请的正式参数

# 4.2 微信登录配置

  • 游戏需要支持微信登录则需要在项目设置/iOS/Extra PList Data中添加如下微信配置代码:

<key>CFBundleURLTypes</key>
<array>
        <dict>
                <key>CFBundleTypeRole</key>
                <string>Editor</string>
                <key>CFBundleURLName</key>
                <string>weixin</string>
                <key>CFBundleURLSchemes</key>
                <array>
                        <string>wxb14372732801c3bb</string>
                </array>
        </dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>

        <string>weixin</string>
        <string>weixinULAPI</string>

</array>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

注意:

  • wxb14372732801c3bb微信 APPID,需要游戏修改为申请的正式参数

# 4.2 TapTap登录配置

  • 游戏需要支持TapTap登录则需要在项目设置/iOS/Extra PList Data中添加如下TapTap配置代码:

<key>CFBundleURLTypes</key>
<array>
        <dict>
                <key>CFBundleTypeRole</key>
                <string>Editor</string>
                <key>CFBundleURLName</key>
                <string>taptap</string>
                <key>CFBundleURLSchemes</key>
                <array>
                        <string>ttY3fegCTe1WQ4NZ8kgb</string>
                </array>
        </dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>

       <string>tapiosdk</string>
       <string>tapsdk</string>

</array>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

注意:

  • ttY3fegCTe1WQ4NZ8kgbTapTap APPID,需要游戏修改为申请的正式参数

# 4.3 一键手机号登录配置

  • 游戏需要支持一键手机号登录则需要在项目设置/iOS/Extra PList Data中添加如下配置代码:

<key>NSAppTransportSecurity</key>
<dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSExceptionDomains</key>
        <dict>
                <key>10010.com</key>
                <dict>
                        <key>NSIncludesSubdomains</key>
                        <true/>
                        <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                        <true/>
                </dict>
                <key>cmpassport.com</key>
                <dict>
                        <key>NSIncludesSubdomains</key>
                        <true/>
                        <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                        <true/>
                </dict>
        </dict>
</dict>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

提示

所有的第三方登录方式配置涉及到CFBundleURLTypes,LSApplicationQueriesSchemes都统一写在Array中分组配置,例如游戏同时支 QQ,微信,TapTap一键手机号登录,按照如下配置添加到项目设置/iOS/Extra PList Data


<key>CFBundleURLTypes</key>
<array>
        <dict>
                <key>CFBundleTypeRole</key>
                <string>Editor</string>
                <key>CFBundleURLName</key>
                <string>tencent</string>
                <key>CFBundleURLSchemes</key>
                <array>
                        <string>tencent101977956</string>
                </array>
        </dict>
        <dict>
                <key>CFBundleTypeRole</key>
                <string>Editor</string>
                <key>CFBundleURLName</key>
                <string>weixin</string>
                <key>CFBundleURLSchemes</key>
                <array>
                        <string>wxb14372732801c3bb</string>
                </array>
        </dict>
        <dict>
                <key>CFBundleTypeRole</key>
                <string>Editor</string>
                <key>CFBundleURLSchemes</key>
                <array>
                        <string>h5game.yingxiong.com</string>
                </array>
        </dict>
        <dict>
                <key>CFBundleTypeRole</key>
                <string>Editor</string>
                <key>CFBundleURLSchemes</key>
                <array>
                        <string>sdk-api.yingxiong.com</string>
                </array>
        </dict>
        <dict>
                <key>CFBundleTypeRole</key>
                <string>Editor</string>
                <key>CFBundleURLName</key>
                <string>taptap</string>
                <key>CFBundleURLSchemes</key>
                <array>
                        <string>ttY3fegCTe1WQ4NZ8kgb</string>
                </array>
        </dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
        <string>mqq</string>
        <string>mqqapi</string>
        <string>mqqwpa</string>
        <string>mqqbrowser</string>
        <string>mttbrowser</string>
        <string>mqqOpensdkSSoLogin</string>
        <string>mqqopensdkapiV2</string>
        <string>mqqopensdkapiV3</string>
        <string>mqqopensdkapiV4</string>
        <string>wtloginmqq2</string>
        <string>mqzone</string>
        <string>mqzoneopensdk</string>
        <string>mqzoneopensdkapi</string>
        <string>mqzoneopensdkapi19</string>
        <string>mqzoneopensdkapiV2</string>
        <string>mqqapiwallet</string>
        <string>mqqopensdkfriend</string>
        <string>mqqopensdkdataline</string>
        <string>mqqgamebindinggroup</string>
        <string>mqqopensdkgrouptribeshare</string>
        <string>tencentapi.qq.reqContent</string>
        <string>tencentapi.qzone.reqContent</string>
        <string>tim</string>
        <string>timapi</string>
        <string>timopensdkfriend</string>
        <string>timwpa</string>
        <string>timgamebindinggroup</string>
        <string>timapiwallet</string>
        <string>timOpensdkSSoLogin</string>
        <string>wtlogintim</string>
        <string>timopensdkgrouptribeshare</string>
        <string>timopensdkapiV4</string>
        <string>timgamebindinggroup</string>
        <string>timopensdkdataline</string>
        <string>wtlogintimV1</string>
        <string>timapiV1</string>
        <string>weixin</string>
        <string>weixinULAPI</string>
        <string>tapiosdk</string>
        <string>tapsdk</string>
</array>
<key>NSAppTransportSecurity</key>
<dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSExceptionDomains</key>
        <dict>
                <key>10010.com</key>
                <dict>
                        <key>NSIncludesSubdomains</key>
                        <true/>
                        <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                        <true/>
                </dict>
                <key>cmpassport.com</key>
                <dict>
                        <key>NSIncludesSubdomains</key>
                        <true/>
                        <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                        <true/>
                </dict>
        </dict>
</dict>

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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116

# 5、配置镜像ID屏幕旋转方式埋点地址灾备地址等,如图:

# 6、必配项:

检查一下 项目设置/iOS/ Extra PList Data 中是否添加 相机和相册权限,示例如下:

	<key>NSCameraUsageDescription</key>
	<string>APP需要访问您的相机,实现扫码登录功能</string>
	<key>NSPhotoLibraryAddUsageDescription</key>
	<string>APP需要访问您的相册,实现保存图片功能</string>
	<key>NSPhotoLibraryUsageDescription</key>
	<string>APP需要访问您的相册,实现保存图片功能</string>
1
2
3
4
5
6

配置地方如下

恭喜你完成iOS配置,进入《第三步:开始接入

本文档对解决你的问题有所帮助?