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协议,参考如下:

Object-C
Swift
@interface AppDelegate ()<CodeInstallDelegate>
@end
class AppDelegate: UIResponder, UIApplicationDelegate, CodeInstallDelegate {
}
在application: didFinishLaunchingWithOptions:方法中调用initWithDelegate方法来初始化SDK,如下代码所示:

Object-C
Swift
- (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来处理

Object-C
Swift
- (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的App,需要额外添加以下代码(未使用SceneDelegate可忽略):
Object-C
Swift
//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", 如图所示:

集成Scheme

在AppDelegate中添加Scheme回调方法,委托给CodeInstallSDK来处理

Object-C
Swift
//适用目前所有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可忽略):

Object-C
Swift
//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页面的动态参数,根据参数值直达具体页

Object-C
Swift
//通过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方法,在回调中获取参数(可重复获取)

Object-C
Swift
//根据自身业务在所需处获取动态安装参数
[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

Object-C
Swift
//用户注册成功后调用
[CodeInstallSDK reportRegister];
// 或者调用 reportRegisterCompleted:failed: 统计注册并获取统计结果,两个接口任选其一,不能同时调用
[CodeInstallSDK reportRegisterCompleted:^{
  NSLog(@"统计注册量成功");
} failed:^{
    NSLog(@"统计注册量失败");
}];
//用户注册成功后调用
CodeInstallSDK.reportRegister();
// 或者调用 reportRegisterCompleted:failed: 统计注册并获取统计结果,两个接口任选其一,不能同时调用
CodeInstallSDK.reportRegisterCompleted {
  print("\n统计注册量成功")
} failed: {
  print("\n统计注册量失败”)
}

results matching ""

    No results matching ""