Xinstall集成Android和iOS以及Web三端快速集成SDK与使用
前文知识:
1、Xinstall是什么?
2、Xinstall使用方法?
功能概述
Xinstall是一款可以提升App推广能力和数据统计的第三方SDK。集成xinstall SDK无需手动填写邀请码,自动建立社交关系携带参数安装下载App,,该SDK能在App推广过程中实现上下级关系绑定,从而达到无需手动填写邀请码即可自动识别邀请来源等功能,获取精准的统计数据。最终提高App安装率和转化率。
XInstall 业务功能
-
传递智能参数
可以为APP的每一个安装自定义不同的初始化参数,安装后打开APP通过Xinstall精准识别,自动追踪安装来源,支持小程序、二维码、网页、短信、海报等与APP参数互传。从而实现免填邀请码安装、场景还原等功能,为数据统计做准备。 -
渠道数据统计
渠道通支持线上线下App渠道推广统计,广告效果统计,地推扫码统计等场景,渠道通可查看实时报表、实时排重,第一时间洞察渠道状况,助您灵活调整计划 -
X闪装
全程接管App安装流程,兼容各种社交平台与浏览器,大幅提升安装概率告别点击右上角,首次安装启动,直达指定场景页面减少用户操作步骤,优化用户下载安装体验,提升App推广渠道流量转化率 -
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.xml的
application标签内设置
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的安装、注册以及活跃设备数
- 如何获取Gaid,Android Advertising ID 简介以及快速集成和使用
- 关于iOS GangSDK的使用 为App快速集成社群公会模块
- Android 集成sina sdk 开发中,不能使用web授权,停止运行解决办法
- 关于iOS GangSDK的使用,为App快速集成社群公会模块
- AndroidUiAutomator使用Jenkins搭建持续集成测试系统Ⅰ—Android UiAutomator以及快速编译方法
- 【用objective-c写android和ios游戏】初次使用Stella SDK
- 使用迅雷代替SDK Manager快速下载Android SDK
- 使用Jenkins搭建iOS/Android持续集成打包平台
- 【Android】google plus、Facebook登陆sdk集成打包出aar的使用步骤
- 使用迅雷代替SDK Manager快速下载Android SDK相关
- Android使用webview调用系统浏览器以及项目内显示并支持图片和输入
- 谷歌面向iOS、Android以及Chrome开发者发布Chromecast SDK
- Google Advertising ID 简介以及快速集成和使用
- IOS Android 视频播放(不使用第三方库,使用平台底层sdk)实现
- 最新Android实现分享到QQ QZone 博客功能(集成官方SDK,不使用第三方)
- IOSWebView的使用以及WKWebView的使用
- 使用Jenkins搭建iOS/Android持续集成打包平台
- 【移动端打包平台搭建】使用Jenkins搭建iOS/Android持续集成打包平台
- android webview 使用以及一些常见的异常处理
- Google Advertising ID 简介以及快速集成和使用