手记

Xinstall集成Android和iOS以及Web三端快速集成SDK与使用

功能概述

Xinstall是一款可以提升App推广能力和数据统计的第三方SDK。集成xinstall SDK无需手动填写邀请码,自动建立社交关系携带参数安装下载App,,该SDK能在App推广过程中实现上下级关系绑定,从而达到无需手动填写邀请码即可自动识别邀请来源等功能,获取精准的统计数据。最终提高App安装率和转化率。

XInstall 业务功能

  1. 传递智能参数
    可以为APP的每一个安装自定义不同的初始化参数,安装后打开APP通过Xinstall精准识别,自动追踪安装来源,支持小程序、二维码、网页、短信、海报等与APP参数互传。从而实现免填邀请码安装、场景还原等功能,为数据统计做准备。

  2. 渠道数据统计
    渠道通支持线上线下App渠道推广统计,广告效果统计,地推扫码统计等场景,渠道通可查看实时报表、实时排重,第一时间洞察渠道状况,助您灵活调整计划

  3. X闪装
    全程接管App安装流程,兼容各种社交平台与浏览器,大幅提升安装概率告别点击右上角,首次安装启动,直达指定场景页面减少用户操作步骤,优化用户下载安装体验,提升App推广渠道流量转化率

  4. Universal Link

解决微信登录Universal Link校验不通过,无法直达APP场景页面,一分钟完成苹果Universal Link配置,最简单的配置流程

Android集成SDK

1、下载并导入 SDK

  • 从下载中心下载 Android 最新版本 SDK
  • 从下载的文件中,将 aar 文件拷贝到项目的libs文件夹中,并使用 gradle 导入implementation files('libs/xinstall_vX.X.X.aar')

2、 初始化SDK
AndroidManifest.xml中添加权限声明:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

AndroidManifest.xmlapplication 标签内设置 AppKey

<meta-data android:name="com.xinstall.APP_KEY" android:value="XINSTALL_APPKEY"/>

备注: 将XINSTALL_APPKEY替换成 xinstall 为应用分配的appkeyApp 启动时,调用 XInstall.init(context) 方法完成 sdk 初始化

public class MyApplication extends Application {
  @Override
  public void onCreate() {
    super.onCreate();
    if (isMainProcess()) {
      // 初始化
      XInstall.init(this);
      // 启用log
      XInstall.setDebug(true)
    }
  }

  public boolean isMainProcess() {
    int pid = android.os.Process.myPid();
    ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    for (ActivityManager.RunningAppProcessInfo appProcess : activityManager.getRunningAppProcesses()) {
      if (appProcess.pid == pid) {
        return getApplicationInfo().packageName.equals(appProcess.processName);
      }
    }
    return false;
  }
}

示例代码 在自定义 Application中初始化为例
备注: 当应用存在多个进程时,确保只在主进程进行初始化在 AndroidManifest.xml 中的 application 标签中添加 android:name=“.MyApplication" 指定自定义的Application类,以便程序启动的时候初始化自定义Application类,而不是系统默认的Application类

<application
  android:name=".MyApplication"
  android:allowBackup="false"
  android:icon="@drawable/ic_launcher"
  android:label="@string/app_name"
  android:supportsRtl="true"
  android:theme="@style/AppTheme">
  ...
</application>

二、一键拉起

1、在AndroidManifest.xml的拉起页面activity标签中添加intent-filter(一般为MainActivity),配置scheme,用于浏览器中拉起

<activity android:name=".MainActivity" android:launchMode="singleTask">
  <intent-filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="XINSTALL_SCHEME"/>
  </intent-filter>
</activity>

如果拉起页面和启动页是同一Activity,则AndroidManifest.xml的配置如下


<activity android:name=".MainActivity" android:launchMode="singleTask">
  <intent-filter>
    <action android:name="android.intent.action.MAIN"/>
    <category android:name="android.intent.category.LAUNCHER"/>
  </intent-filter>
  <intent-filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="XINSTALL_SCHEME"/>
  </intent-filter>
</activity>

备注:将 XINSTALL_SCHEME配置成 xninstall 为应用分配的scheme: xi40zr7uc

2、在拉起页面中如下调用相关代码,获取 web 端传过来的动态参数

class MainActivity extends AppCompatActivity {

  @Override
  protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //获取唤醒参数
    XInstall.getWakeUpParam(getIntent(), wakeUpAdapter);
  }

  @Override
  protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    // 此处要调用,否则App在后台运行时,会无法截获
    XInstall.getWakeUpParam(getIntent(), wakeUpAdapter);
  }

  XWakeUpAdapter wakeUpAdapter = new XWakeUpAdapter() {
    @Override
    public void onWakeUp(XAppData XAppData) {
      //获取渠道数据
      String channelCode = XAppData.getChannelCode();

      //获取数据
      Map<String, String> data = XAppData.getExtraData();
      //通过链接后面携带的参数或者通过webSdk初始化传入的data值。
      String uo = data.get("uo");
      //webSdk初始,在buttonId里面定义的按钮点击携带数据
      String co = data.get("co");

      //获取时间戳
      String timeSpan = XAppData.getTimeSpan();

    }
  };

  @Override
  protected void onDestroy() {
    super.onDestroy();
    wakeUpAdapter = null;
  }
}

三、携带安装参数
在 APP 需要安装参数时(由 web 网页中传递过来的,如邀请码、游戏房间号等动态参数),调用 XInstall.getInstall方法,在回调中获取参数(可重复获取):

XInstall.getInstallParam(new XInstallAdapter() {
  @Override
  public void onInstall(XAppData XAppData) {
    //获取渠道数据
    String channelCode = XAppData.getChannelCode();

    //获取数据
    Map<String, String> data = XAppData.getExtraData();
    //通过链接后面携带的参数或者通过webSdk初始化传入的data值。
    String uo = data.get("uo");
    //webSdk初始,在buttonId里面定义的按钮点击携带数据
    String co = data.get("co");

    //获取时间戳
    String timeSpan = XAppData.getTimeSpan();
  }
});

四、渠道统计

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

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

//用户注册成功后调用
XInstall.reportRegister();

iOS集成SDK

XInstall的核心价值在于,帮助iOS开发者通过Xinstall提供的sdk,精确的获取app每一次安装的分享(或推广)来源。
1、下载SDK并导入
下载ios最新版本SDK,解压SDK压缩包,将文件夹添加到工程中(导 入请选中Copy items if needed
2、初始化SDK
在AppDelegate中,增加头文件的引用:

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

增加遵守的协议:

@interface AppDelegate ()<XInstallDelegate>

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

<key>com.xinstall.APP_KEY</key>
<string>40zr7uc</string>

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

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  [XInstallSDK initWithDelegate:self];
  return YES;
}

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

首先,我们需要到苹果开发者网站,为当前的App ID开启关联域名(Associated Domains)服务:

为刚才开发关联域名功能的AppID创建新的(或更新现有的)描述文件,下载并导入到XCode中(通过xcode自动生成的描述文件,可跳过这一步):


在XCode中配置Xinstall为当前应用生成的关联域名(Associated Domains): applinks:40zr7uc.xinstall.top


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

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{
  //判断是否通过XInstall Universal Link 唤起App
  if ([XinstallSDK continueUserActivity:userActivity]){//如果使用了Universal link ,此方法必写
    return YES;
  }
  //其他第三方回调;
  return YES;
}

如果有SceneDelegate, 则调用的方法需要放SceneDelegate

//SceneDelegate
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions  API_AVAILABLE(ios(13.0)) {
    // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
    // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
    // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).

    // 走scene 如果是universal Link 冷启动不会调SceneDelegate 的 - (void)scene:(UIScene *)scene continueUserActivity:(NSUserActivity *)userActivity 方法
    if (connectionOptions.userActivities.count > 0 ){
        [connectionOptions.userActivities enumerateObjectsUsingBlock:^(NSUserActivity * _Nonnull obj, BOOL * _Nonnull stop) {
            if ([XinstallSDK continueUserActivity:obj]) {
                 *stop = YES;
            }
        }];
    }
}

- (void)scene:(UIScene *)scene continueUserActivity:(NSUserActivity *)userActivity {
  NSLog(@"userActivity : %@",userActivity.webpageURL.description);
  if (![XinstallSDK continueUserActivity:userActivity]) {
    //其他第三方回调 
  }
}

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

/通过Xinstall获取已经安装App被唤醒时的参数(如果是通过渠道页面唤醒App时,会返回渠道编号)
- (void)xinstall_getWakeUpParams:(nullable XInstallData *)appData {
  if (appData.data) { //(动态唤醒参数)
    //e.g.如免填邀请码建立邀请关系、自动加好友、自动进入某个群组或房间等
  }
  if (appData.channelCode) { //(通过渠道链接或二维码唤醒会返回渠道编号)
    //e.g.可自己统计渠道相关数据等
  }
  if (appData.timeSpan > 20 ) {
    //e.g. 超过20s不处理
  }
  NSLog(@"XinstallSDK:\n动态参数:%@;\n渠道编号:%@",appData.data,appData.channelCode);
}

4、携带安装参数
在·AppDeletegate·中遵守协议,添加安装参数的回调,获取来自H5页面的动态参数,根据参数值直达具体页:

//安装App后,通过XinstallSDK获取到传递的参数(如果是通过渠道页面安装App时,会返回渠道编号)
- (void)xinstall_getInstallParams:(nullable XInstallData *)appData {
  if (appData.data) { //(动态传递参数)
    //e.g.如免填邀请码建立邀请关系、自动加好友、自动进入某个群组或房间等安装事件
  }
  if (appData.channelCode) {//(通过渠道链接或二维码安装会返回渠道编号)
    //e.g.可自己统计渠道相关数据等
  }
  if (appData.timeSpan > 20 ) {
    //e.g. 超过20s不处理
  }
  NSLog(@"XinstallSDK:\n动态参数:%@;\n渠道编号:%@",appData.data,appData.channelCode);
}

而非安装后第一次启动可以通过XinstallSDK 单例的属性installData获取到

[XinstallSDK defaultManager].installData

如若installData为nill 则安装不来自于渠道

5、渠道统计
SDK初始化时会自动完成访问量、点击量、安装量、活跃量、留存率等统计工作。
注册量统计 如需统计每个渠道的注册量(对评估渠道质量很重要),可根据自身的业务规则,在确保用户完成app注册的情况下调用相关api

//用户注册成功后调用
[XinstallSDK reportRegister];

WEB集成SDK

Xinstall提供完整的javascript api,方便web开发者实现完全自主的设计。

<!-- 以下为xinstall集成代码,建议在html文档中尽量靠前放置,加快初始化过程 -->
<!-- 强烈建议直接引用下面的cdn加速链接,可以得到最及时的更新,我们将持续跟踪各种主流浏览器的变化,提供最好的服务;不推荐将此js文件下载到自己的服务器-->
<script type="text/javascript" charset="UTF-8" src="//cdn.xinstall.com/xinstall.js"></script>
<script type="text/javascript">
  //xinstall初始化,xinstall初始化时将与xinstall服务器交互,应尽可能早的调用
  /*web页面向app传递的json数据(json string/js Object),应用被拉起或是首次安装时,通过相应的ios api可以获取此数据*/
  var data = XInstall.parseUrlParams(); //xinstall.js中提供的工具函数,解析url中的所有查询参数
  new XInstall({
    /*appKey必选参数,xinstall平台为每个应用分配的appKey*/
    appKey : "40zr7uc",
    /*可选项,微信中打开自定义遮罩层*/
    //mask:function(){
    //  return "<div style='background:rgba(0,0,0,.5);position:fixed;left:0;top:0;filter:alpha(opacity=50);width:100%;height:100%;z-index:9999;'><div style='text-align:right; margin-top:1%; margin-right:5%;'><img style='width:70%; margin:0 auto;' src='https://cdn.xinstall.com/image/no_safari.png'/></div></div>"
    //},
    /*可选项,按钮携带特殊参数安装,idName(按钮的id值),params(当前按钮点击携带的传入值,传入类型强制为Array[Object])*/
    //buttonId: [
    //   { idName: 'downOne', params: {dataA: 'downOne', da: '1'} },
    //   { idName: 'downTwo', params: {dataB: 'downTwo', d: 'abc', c: 'cba'} },
    //   { idName: 'downThree' }
    // ],
    /*xinstall初始化完成的回调函数,可选*/
    onready : function() {
      var m = this,
          button = document.getElementById("downloadButton");
      button.style.visibility = "visible";
      /*用户点击某个按钮时(假定按钮id为downloadButton),安装app*/
      button.onclick = function() {
        m.wakeupOrInstall();
      }
    }
  }, data);
</script>

集成完成后导出development/adhoc/enterprise类型的ipa包上传,生成在线测试链接

渠道管理


新建渠道

可以使用自己的落地页来管理渠道,如果没有自己的落地页,可以只用Xinstall系统默认的页面

渠道报表

可以看到ios和Android的安装、注册以及活跃设备数

0人推荐
随时随地看视频
慕课网APP