iOS壳包接入头条
<p>[TOC]</p>
<h3>1、SDK资源引入</h3>
<pre><code>//可混淆修改
LewanSDK.h
LewanSDK.m
//头条 SDK
BDASignalDefinitions.h
BDASignalManager.h
libBDASignalSDK
//BUGLY SDK
Bugly.framework
//隐私文件 按需合并自身已有
PrivacyInfo.xcprivacy</code></pre>
<pre><code>头条 SDK pod 引入方式
pod &#039;BDASignalSDK&#039;</code></pre>
<h4>1.2.2、build settings设置</h4>
<ul>
<li>Build Settings中Other Linker Flags 增加参数</li>
</ul>
<pre><code>-ObjC
-l&quot;c++&quot;
-l&quot;c++abi&quot;
-l&quot;sqlite3&quot;
-l&quot;z&quot;
-all_load</code></pre>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=ab7f8a2a07d464995ce13c585d8baa36&amp;file=file.png" alt="" /></p>
<h4>1.2.4、iOS17隐私策略适配说明</h4>
<ul>
<li>如果您的游戏本身包含PrivacyInfo.xcprivacy文件,请将穿山甲的PrivacyInfo.xcprivacy中的条款补全到自身的PrivacyInfo.xcprivacy中</li>
<li>如果没有可以在工程点击 file-new-file 选择 PrivacyInfo 文件,然后使用source code方式打开复制以下内容</li>
</ul>
<pre><code class="language-xml">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
&lt;plist version=&quot;1.0&quot;&gt;
&lt;dict&gt;
&lt;key&gt;NSPrivacyCollectedDataTypes&lt;/key&gt;
&lt;array/&gt;
&lt;key&gt;NSPrivacyAccessedAPITypes&lt;/key&gt;
&lt;array&gt;
&lt;dict&gt;
&lt;key&gt;NSPrivacyAccessedAPIType&lt;/key&gt;
&lt;string&gt;NSPrivacyAccessedAPICategoryDiskSpace&lt;/string&gt;
&lt;key&gt;NSPrivacyAccessedAPITypeReasons&lt;/key&gt;
&lt;array&gt;
&lt;string&gt;E174.1&lt;/string&gt;
&lt;/array&gt;
&lt;/dict&gt;
&lt;dict&gt;
&lt;key&gt;NSPrivacyAccessedAPIType&lt;/key&gt;
&lt;string&gt;NSPrivacyAccessedAPICategoryFileTimestamp&lt;/string&gt;
&lt;key&gt;NSPrivacyAccessedAPITypeReasons&lt;/key&gt;
&lt;array&gt;
&lt;string&gt;DDA9.1&lt;/string&gt;
&lt;/array&gt;
&lt;/dict&gt;
&lt;dict&gt;
&lt;key&gt;NSPrivacyAccessedAPIType&lt;/key&gt;
&lt;string&gt;NSPrivacyAccessedAPICategoryUserDefaults&lt;/string&gt;
&lt;key&gt;NSPrivacyAccessedAPITypeReasons&lt;/key&gt;
&lt;array&gt;
&lt;string&gt;CA92.1&lt;/string&gt;
&lt;/array&gt;
&lt;/dict&gt;
&lt;/array&gt;
&lt;/dict&gt;
&lt;/plist&gt;</code></pre>
<h4>1.2.3、添加依赖库</h4>
<ul>
<li>工程需要在TARGETS -> Build Phases中找到Link Binary With Libraries,点击“+”,依次添加下列依赖库</li>
</ul>
<pre><code>Security.framework
SystemConfiguration.framework
libc++.tbd
libz.tbd</code></pre>
<h4>1.2.6、支持苹果ATT</h4>
<ul>
<li>要获取 App Tracking Transparency 权限,请更新您的 Info.plist,添加 NSUserTrackingUsageDescription 字段和自定义文案描述。代码示例:</li>
</ul>
<pre><code class="language-xml">&lt;key&gt;NSUserTrackingUsageDescription&lt;/key&gt;
&lt;string&gt;该标识符将用于向您投放个性化广告&lt;/string&gt;</code></pre>
<h4>1.2.7、添加注册 URL scheme</h4>
<ul>
<li>在 Xcode 中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“URL type“添加“URL scheme”
1、输入应用对应的包名作为scheme头;</li>
</ul>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=7368a1e4b8c69ee64b613bb84ad5df97&amp;file=file.png" alt="" /></p>
<h3>2、接口说明</h3>
<h4>2.1、客户端启动上报接口( 生命周期)</h4>
<pre><code>#import &quot;LewanSDK.h&quot;
如使用AppDelegate</code></pre>
<pre><code class="language-objectivec">- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[LewanSDK getInstance] application:application didFinishLaunchingWithOptions:launchOptions];
return YES;
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary&lt;UIApplicationOpenURLOptionsKey,id&gt; *)options{
[[LewanSDK getInstance] application:app openURL:url options:options];
return YES;
}
</code></pre>
<pre><code>如使用SceneDelegate</code></pre>
<pre><code class="language-objectivec">- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
[[LewanSDK getInstance] scene:scene willConnectToSession:session options:connectionOptions];
}
- (void)scene:(UIScene *)scene openURLContexts:(NSSet&lt;UIOpenURLContext *&gt; *)URLContexts{
[[LewanSDK getInstance] scene:scene openURLContexts:URLContexts];
}
</code></pre>
<h4>2.2、SDK 初始化</h4>
<ul>
<li>在 H5 游戏界面 WKWebView中调用</li>
</ul>
<pre><code> [[LewanSDK getInstance] setupSDK:self];//初始化
[[LewanSDK getInstance] setPageView:WKWebView];//传入 webview 用于交互</code></pre>
<h4>2.3、注册交互监听</h4>
<ul>
<li>在 H5游戏界面 WKWebView 初始化中设置 <code>iosWebView</code>(必须)</li>
</ul>
<pre><code> WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc]init];
[config.userContentController addScriptMessageHandler:self name:@&quot;iosWebView&quot;];
webview.navigationDelegate = self;//设置代理
//webview 初始化传入,或其他方式传入 iosWebView 即可</code></pre>
<ul>
<li>在WKScriptMessageHandler中调用</li>
</ul>
<pre><code>- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message{
[[LewanSDK getInstance] userContentController:userContentController didReceiveScriptMessage:message];
}</code></pre>
<ul>
<li>在delegate 中调用</li>
</ul>
<pre><code>- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView{
[[LewanSDK getInstance] webViewWebContentProcessDidTerminate];
}</code></pre>