iOS SDK 集成指南
一、导入 SDK
选择1:CocoaPods导入
1、cd到项目根目录,执行pod setup
2、在 Podfile 文件中添加命令:pod 'CodeInstallSDK'
备注:建议先pod update
来升级本机 pod 库,然后pod 'CodeInstallSDK'
来获取sdk最新版本
如果搜索不到libCodeInstallSDK,请按下面操作:
先执行:
pod setup
再清空搜索索引,让pod重建索引(可能需要等待一会):
rm ~/Library/Caches/CocoaPods/search_index.json
选择2:手动导入
下载 iOS 最新版本SDK
解压SDK压缩包,将文件夹添加到工程中(导入请选中 “Copy items if needed” ) `;
二、初始化
在Info.plist文件中配置appKey键值对,如下:
<key>com.CodeInstall.APP_KEY</key>
<string>您的appKey</string>
在AppDelegate中,增加头文件的引用:
//swift开发时,请使用桥接方式引入
#import "CodeInstallSDK.h"
在AppDelegate中遵守CodeInstallDelegate协议,参考如下:
@interface AppDelegate ()<CodeInstallDelegate>
@end
class AppDelegate: UIResponder, UIApplicationDelegate, CodeInstallDelegate {
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[CodeInstallSDK initWithDelegate:self];
return YES;
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
//请根据系统代码提示来写
CodeInstallSDK.initWith(self);
//例如,有的旧版swift中的写法是CodeInstallSDK.initWithDelegate(self);
return true;
}
三、功能集成
1. 快速下载
如果只需要快速下载功能,无需其它功能(携带参数安装、渠道统计、一键拉起),可直接跳过此步骤,进行下一步上传安装包
2. 一键拉起
CodeInstall通过标准的scheme(iOS <9),universal link(iOS≥9),在app已安装的情况下,从各种浏览器(包括微信、QQ、新浪微博、钉钉等主流社交软件的内置浏览器)拉起app并传递动态参数,避免重复安装。
2.1 集成通用链接(Universal Link),只适用于iOS9以上,CodeInstall完全兼容微信openSDK1.8.6以上版本的通用链接跳转功能。
在XCode中配置CodeInstall为当前应用生成的关联域名(Associated Domains):applinks:您的appKey.codeinstall.vip
如图所示:
在AppDelegate中添加通用链接(Universal Link)回调方法,委托给CodeInstallSDK来处理
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{
//处理通过CodeInstall一键唤起App时传递的数据
[CodeInstallSDK continueUserActivity:userActivity];
//其他第三方回调;
return YES;
}
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool{
//处理通过CodeInstall一键唤起App时传递的数据
CodeInstallSDK.continue(userActivity)
//其他第三方回调:
return true
}
//注意,swift4.2版本,系统方法修改为:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool{
CodeInstallSDK.continue(userActivity)
//其他第三方回调:
return true
}
//sceneDelegate.m中
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions API_AVAILABLE(ios(13.0)){
//最好先加载完UI代码[self.window makeKeyAndVisible];
//通用链接相关代码,用于App被杀死后一键拉起后传递动态参数
for (NSUserActivity *userActivity in connectionOptions.userActivities) {
[CodeInstallSDK continueUserActivity:userActivity];
}
}
//通用链接相关代码,用于App退到后台时一键拉起后传递动态参数
- (void)scene:(UIScene *)scene continueUserActivity:(NSUserActivity *)userActivity API_AVAILABLE(ios(13.0)){
[CodeInstallSDK continueUserActivity:userActivity];
}
//sceneDelegate.swift中
@available(iOS 13.0, *)
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
//最好先加载完UI代码window.makeKeyAndVisible()
//通用链接相关代码,用于App被杀死后一键拉起后传递动态参数
for userActivity in connectionOptions.userActivities {
CodeInstallSDK.continue(userActivity)
}
}
//通用链接相关代码,用于App退到后台时一键拉起后传递动态参数
@available(iOS 13.0, *)
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
CodeInstallSDK.continue(userActivity)
}
2.2 集成Scheme(只适用于iOS9以下)
在Xcode里选中Target-Info-URL Types,配置CodeInstall为当前应用生成的Scheme:"您的appKey", 如图所示:
在AppDelegate中添加Scheme回调方法,委托给CodeInstallSDK来处理
//适用目前所有iOS版本
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
//处理通过CodeInstall URL Scheme唤起App的数据
[CodeInstallSDK handLinkURL:url];
//其他第三方回调;
return YES;
}
//iOS9以上,会优先走这个方法
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(nonnull NSDictionary *)options{
//处理通过CodeInstall URL Scheme唤起App的数据
[CodeInstallSDK handLinkURL:url];
//其他第三方回调;
return YES;
}
//适用目前所有iOS版本
func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
CodeInstallSDK.handLinkURL(url)
//其他第三方回调;
return true
}
//iOS9以上,会优先走这个方法
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
CodeInstallSDK.handLinkURL(url)
//其他第三方回调;
return true
}
//注意,swift4.2版本,系统方法修改为:
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool{}
如果适配了SceneDelegate的App,需要额外添加以下代码(未使用SceneDelegate可忽略):
//sceneDelegate.m中
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions API_AVAILABLE(ios(13.0)){
//最好先加载完UI代码[self.window makeKeyAndVisible];
//scheme相关代码,用于App被杀死后一键拉起后传递动态参数
for (UIOpenURLContext *urlcontext in connectionOptions.URLContexts) {
[CodeInstallSDK handLinkURL:urlcontext.URL];
}
}
//scheme相关代码
- (void)scene:(UIScene *)scene openURLContexts:(NSSet *)URLContexts API_AVAILABLE(ios(13.0)){
for (UIOpenURLContext *urlcontext in URLContexts){
[CodeInstallSDK handLinkURL:urlcontext.URL];
}
}
//sceneDelegate.swift中
@available(iOS 13.0, *)
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
//最好先加载完UI代码window.makeKeyAndVisible()
//scheme相关代码,用于App被杀死后一键拉起后传递动态参数
for urlContext in connectionOptions.urlContexts {
CodeInstallSDK.handLinkURL(urlContext.url)
}
}
//scheme相关代码
@available(iOS 13.0, *)
func scene(_ scene: UIScene, openURLContexts URLContexts: Set) {
for urlcontext in URLContexts{
CodeInstallSDK.handLinkURL(urlcontext.url)
}
}
2.3 添加拉起参数回调方法
在AppDeletegate中遵守协议,添加一键拉起的回调,获取来自H5页面的动态参数,根据参数值直达具体页
//通过CodeInstall获取已经安装App被唤醒时的参数
- (void)getWakeUpParams:(CodeInstallData *)appData{
if (appData.data) {//(动态唤醒参数)
//e.g.如免填邀请码建立邀请关系、自动加好友、自动进入某个群组或房间等
}
if (appData.channelNo) {//(通过渠道链接或二维码唤醒会返回渠道编号)
//e.g.可自己统计渠道相关数据等
}
NSLog(@"CodeInstallSDK:\n动态参数:%@;\n渠道编号:%@",appData.data,appData.channelNo);
}
//通过CodeInstall获取已经安装App被唤醒时的参数
func getWakeUpParams(_ appData: CodeInstallData?) {
if let data = appData?.data{//(动态唤醒参数)
//e.g.如免填邀请码建立邀请关系、自动加好友、自动进入某个群组或房间等
}
if let channelNo = appData?.channelNo{//(通过渠道链接或二维码唤醒会返回渠道编号)
//e.g.可自己统计渠道相关数据等
}
print("CodeInstallSDK:\n动态参数:\(appData?.data)\n渠道编号:\(appData?.channelNo)")
}
3. 携带参数安装 高级版功能
在APP需要安装参数时(由web网页中传递过来的,如邀请码、游戏房间号等动态参数),调用getInstallParms方法,在回调中获取参数(可重复获取)
//根据自身业务在所需处获取动态安装参数
[CodeInstallSDK getInstallParams:^(CodeInstallData * _Nullable appData) {
if (appData.data) {//(动态唤醒参数)
//e.g.如免填邀请码建立邀请关系、自动加好友、自动进入某个群组或房间等
}
if (appData.channelNo) {//(通过渠道链接或二维码唤醒会返回渠道编号)
//e.g.可自己统计渠道相关数据等
}
NSLog(@"CodeInstallSDK:\n动态参数:%@;\n渠道编号:%@",appData.data,appData.channelNo);
}];
//根据自身业务在所需处获取动态安装参数
CodeInstallSDK.getInstallParams { (appData) in
if let data = appData?.data{//(动态唤醒参数)
//e.g.如免填邀请码建立邀请关系、自动加好友、自动进入某个群组或房间等
}
if let channelNo = appData?.channelNo{//(通过渠道链接或二维码唤醒会返回渠道编号)
//e.g.可自己统计渠道相关数据等
}
print("CodeInstallSDK:\n动态参数:\(appData?.data)\n渠道编号:\(appData?.channelNo)")
}
4. 渠道统计 高级版功能
SDK初始化时会自动完成访问量、点击量、安装量、活跃量、留存率等统计工作。
注册量统计
如需统计每个渠道的注册量(对评估渠道质量很重要),可根据自身的业务规则,在确保用户完成app注册的情况下调用相关api
//用户注册成功后调用
[CodeInstallSDK reportRegister];
// 或者调用 reportRegisterCompleted:failed: 统计注册并获取统计结果,两个接口任选其一,不能同时调用
[CodeInstallSDK reportRegisterCompleted:^{
NSLog(@"统计注册量成功");
} failed:^{
NSLog(@"统计注册量失败");
}];
//用户注册成功后调用
CodeInstallSDK.reportRegister();
// 或者调用 reportRegisterCompleted:failed: 统计注册并获取统计结果,两个接口任选其一,不能同时调用
CodeInstallSDK.reportRegisterCompleted {
print("\n统计注册量成功")
} failed: {
print("\n统计注册量失败”)
}