iOS SDK 集成指南

下载并导入 SDK

下载中心下载 iOS 最新版本 SDK
解压 SDK 压缩包,将文件夹导入工程中(导入请选中 “Copy items if needed” )

初始化

在AppDelegate中,增加头文件的引用:

//swift开发时,请使用桥接方式引入
#import "OpenInstallSDK.h"

Info.plist文件中配置appKey键值对,如下:

<key>com.openinstall.APP_KEY</key>
<string>openinstall 分配给应用的 appkey</string>

application: didFinishLaunchingWithOptions方法中调用initWithDelegate方法来初始化 SDK,如下代码所示:

Object-C
Swift
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [OpenInstallSDK initWithDelegate:self];
    return YES;
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    OpenInstallSDK.initWithDelegate(self);
    return true;
}

功能集成

携带参数安装

在 APP 需要安装参数时(由 web 网页中传递过来的,如邀请码、游戏房间号等动态参数),调用getInstallParmsCompleted方法,在回调中获取参数(可重复获取),不要自行保存动态参数

Object-C
Swift
[[OpenInstallSDK defaultManager] getInstallParmsCompleted:^(OpeninstallData*_Nullable appData) {
    //在主线程中回调
    if (appData.data) {//(动态安装参数)
       //e.g.如免填邀请码建立邀请关系、自动加好友、自动进入某个群组或房间等
    }
    if (appData.channelCode) {//(通过渠道链接或二维码安装会返回渠道编号)
        //e.g.可自己统计渠道相关数据等
    }
    //弹出提示框(便于调试,调试完成后删除此代码)
    NSString *parameter = [NSString stringWithFormat:@"如果没有任何参数返回,请确认:\n1、新应用是否上传安装包(是否集成完毕)  2、是否正确配置appKey  3、是否通过含有动态参数的分享链接(或二维码)安装的app\n\n动态参数:\n%@\n渠道编号:%@",appData.data,appData.channelCode];
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"安装参数" message:parameter delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
    [alert show];
}];
OpenInstallSDK.defaultManager()?.getInstallParmsCompleted({ (appData:OpeninstallData?) in
            //在主线程中回调
            if appData?.data != nil {
                //e.g.如免填邀请码建立邀请关系、自动加好友、自动进入某个群组或房间等
            }
            if appData?.channelCode != nil{
                //e.g.可自己统计渠道相关数据等
            }
            print("安装参数 data = \(String(describing: appData?.data)),channelCode = \(String(describing: appData?.channelCode))")
        })

注:

  1. 不要自己保存动态安装参数,在每次需要用到参数时,请调用该方法去获取;
  2. 该方法默认超时为5秒,尽量写在业务场景需要参数的位置调用(在业务场景时,网络一般都是畅通的),例如,可以选择在用户注册成功后调用该方法获取参数,对用户进行奖励。原因是iOS首次安装、首次启动的app,会询问用户获取网络权限,用户允许后SDK才能正常联网去获取参数。如果调用过早,可能导致网络权限还未允许就被调用,导致参数无法及时拿到,误以为参数不存在(此时getInstallParmsCompleted法已超时,回调返回空);
  3. 如果是业务需要,必须在application:didFinishLaunchingWithOptions方法中获取参数,可调用下面高级API,修改超时时长,比如10秒或更长。

如需手动设置超时时间,请使用高级API:

-(void)getInstallParmsWithTimeoutInterval:(NSTimeInterval)timeoutInterval completed:(void (^_Nullable)(OpeninstallData*_Nullable appData))completedBlock;

渠道统计

SDK 会自动完成访问量、点击量、安装量、活跃量、留存率等统计工作。

注册量统计

如需统计每个渠道的注册量(对评估渠道质量很重要),可根据自身的业务规则,在确保用户完成 app 注册的情况下调用相关api

Object-C
Swift
//用户注册成功后调用
[OpenInstallSDK reportRegister];
//用户注册成功后调用
OpenInstallSDK.reportRegister();

渠道效果统计

效果点建立在渠道基础之上,主要用来统计终端用户对某些特殊业务的使用效果,如充值金额,分享次数等等。

调用接口前,请先进入管理后台“效果点管理”中添加效果点

效果点管理

调用接口时,请保证代码中的效果点ID与后台创建的效果点ID一致

Object-C
Swift
[[OpenInstallSDK defaultManager] reportEffectPoint:@"效果点ID" effectValue:100];
OpenInstallSDK.defaultManager()?.reportEffectPoint("效果点ID", effectValue: 100);

调用接口后,可在后台查看效果点统计数据

一键拉起

openinstall 通过标准的 scheme(iOS<9),universal link(iOS≥9),在 app 已安装的情况下,从各种浏览器(包括微信、QQ、新浪微博、钉钉等主流社交软件的内置浏览器)拉起 app 并传递动态参数,避免重复安装。

集成通用链接(Universal Link),只适用于iOS9以上

苹果开发者网站,为当前的 App ID 开启关联域名(Associated Domains)服务:

创建新的(或更新现有的)描述文件,下载并导入到XCode中(通过xcode自动生成的描述文件,可跳过这一步):

在 XCode 中配置 openinstall 为当前应用生成的关联域名(Associated Domains)

AppDelegate中添加通用链接(Universal Link)回调方法,委托给 OpeninstallSDK 来处理

Object-C
Swift
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{
    //判断是否通过OpenInstall Universal Link 唤起App
    if ([OpenInstallSDK continueUserActivity:userActivity]){//如果使用了Universal link ,此方法必写
        return YES;
    }
    //其他第三方回调;
     return YES;
}
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool{
        //判断是否通过OpenInstall Universal Link 唤起App
        if OpenInstallSDK.continue(userActivity){
            return true
        }
        //其他第三方回调:
        return true
    }

集成 Scheme,只适用于iOS9以下

在Xcode里选中 Target -> Info -> URL Types,配置 openinstall 为当前应用生成的 Scheme,如图所示:

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

注意:当需要在openURL这个方法中处理第三方回调的时候(比如支付宝回调,微信回调等),请注意区分

Object-C
Swift
//适用目前所有iOS版本
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
    //判断是否通过OpenInstall URL Scheme 唤起App
    if  ([OpenInstallSDK handLinkURL:url]){//必写
        return YES;
    }
    //其他第三方回调;
    return YES;
}
//iOS9以上,会优先走这个方法
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(nonnull NSDictionary *)options{
    //判断是否通过OpenInstall URL Scheme 唤起App
    if  ([OpenInstallSDK handLinkURL:url]){//必写
        return YES;
    }
    //其他第三方回调;
     return YES;
}
//适用目前所有iOS版本
    func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
        if OpenInstallSDK.handLinkURL(url) {
            return true
        }
        return true
    }
//iOS9以上,会优先走这个方法
    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        if OpenInstallSDK.handLinkURL(url) {
            return true
        }
        return true
    }

AppDeletegate中遵守协议,添加一键拉起的回调,获取来自 H5 页面的动态参数,根据参数值直达具体页

Object-C
Swift
//通过OpenInstall获取已经安装App被唤醒时的参数(如果是通过渠道页面唤醒App时,会返回渠道编号)
-(void)getWakeUpParams:(OpeninstallData *)appData{
    if (appData.data) {//(动态唤醒参数)
        //e.g.如免填邀请码建立邀请关系、自动加好友、自动进入某个群组或房间等
    }
    if (appData.channelCode) {//(通过渠道链接或二维码唤醒会返回渠道编号)
        //e.g.可自己统计渠道相关数据等
    }
    //弹出提示框(便于调试,调试完成后删除此代码)
    NSLog(@"OpenInstallSDK:\n动态参数:%@;\n渠道编号:%@",appData.data,appData.channelCode);
    NSString *parameter = [NSString stringWithFormat:@"如果没有任何参数返回,请确认:\n是否通过含有动态参数的分享链接(或二维码)唤醒的app\n\n动态参数:\n%@\n渠道编号:%@",appData.data,appData.channelCode];
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"唤醒参数" message:parameter delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
    [alert show];
}
//通过OpenInstall获取已经安装App被唤醒时的参数(如果是通过渠道页面唤醒App时,会返回渠道编号)
    func getWakeUpParams(_ appData: OpeninstallData?) {
        if appData?.data != nil {
            //e.g.如免填邀请码建立邀请关系、自动加好友、自动进入某个群组或房间等
        }
        if appData?.channelCode != nil{
            //e.g.可自己统计渠道相关数据等
        }
        print("唤醒参数 data = \(String(describing: appData?.data)),channelCode = \(String(describing: appData?.channelCode))")
    }