1. Android 集成
1) 导入 SDK
SDK 优先提供 aar 包,如需 jar 包,请联系客服 把下载的 ShareInstallSdk.zip 文件解压,将 ShareInstall_x.x.x.aar 文件拷贝到项目的 libs 文件夹中,并在当前项目下的 build.gradle 文件中导入(注:不是项目的根目录 build.gradle 文件)
dependencies {
compile(name: 'ShareInstall_v1.2.7', ext: 'aar')
}
(注:导入 aar 前需检查当前项目下的 build.gradle 文件中(不是项目的根目录 build.gradle 文件),android 标签下是否已经加入以下代码,否则会报错)
repositories {
flatDir {
dirs 'libs'
}
}
2) 初始化 sdk
在 AndroidMainfest.xml 中添加权限声明。
<!-- 连接互联网Internet权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 允许应用程序联网,以便向我们的服务器端发送数据。 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
在 AndroidMainfest.xml 中的 application 标签中添加分配给你应用的 Appkey
<meta-data
android:name="com.shareinstall.APP_KEY"
android:value="shareinstall为当前应用分配的appkey"/>
在自定义 Application 中调用 ShareInstall.getInstance().init(context)方法完成 SDK 初始化,初始化前先判断当前进程是否是应用的主进程。
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
if (isMainProcess()) {
ShareInstall.getInstance().init(getApplicationContext());
}
}
/**
* 判断当前进程是否是应用的主进程
*
* @return
*/
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;
}
}
在 AndroidMainfest.xml 中的 application 标签中添加 android:name=".MyApplication"指定自定义的 Application 类,以便程序启动的时候初始化自定义 Application 类,而不是系统默认的 Application 类。
<application
android:name=".MyApplication"
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
</application>
3) 功能集成
1. 快速下载
如果只需要快速下载功能,无需其它功能(携带参数安装、渠道统计、一键拉起),完成初始化即可。
2. 携带参数安装
在 APP 需要个性化安装参数时(由 web 网页中传递过来的,如邀请码、游戏房间号等 自定义参数),调用以下方法,在回调中获取参数。
// 注意:SDK调用getInstallParams方法获取参数是异步操作,请确保在onGetInstallFinish回调中拿到参数后才去处理自己的业务逻辑
ShareInstall.getInstance().getInstallParams(new
AppGetInstallListener() {
@Override
public void onGetInstallFinish(String info) {
// 客户端获取到的参数是json字符串格式
Log.d("ShareInstall", "info = " + info);
try {
JSONObject object = new JSONObject(info);
// 通过该方法拿到设置的渠道值,剩余值为自定义的其他参数
String channel = object.optString("channel");
Log.d("ShareInstall", "channel = " + channel);
} catch (JSONException e) {
e.printStackTrace();
}
}
});
3. 一键拉起
3.1 配置 scheme
在 AndroidMainfest 的唤醒页面 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="shareinstall为当前应用分配的scheme" />
</intent-filter>
</activity>
注:如果唤醒页面和启动页是同一 Activity,则 AndroidMaifest.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="shareinstall为当前应用分配的scheme"/>
</intent-filter>
</activity>
3.2 在配置了 ShareInstall scheme 的拉起页面中调用下面相关代码,获取从网页 H5 页面传过来的动态参数
public class WakeUpActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wake_up);
// 获取唤醒参数
ShareInstall.getInstance().getWakeUpParams(getIntent(), wakeUpListener););
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// 此处要调用,否则app在后台运行时,会无法截获
ShareInstall.getInstance().getWakeUpParams(intent, wakeUpListener);
}
// 注意:SDK调用AppGetWakeUpListener方法获取参数是异步操作,请确保在onGetWakeUpFinish回调中拿到参数后才去处理自己的业务逻辑
private AppGetWakeUpListener wakeUpListener = new AppGetWakeUpListener() {
@Override
public void onGetWakeUpFinish(String info) {
// 客户端获取到的参数是json字符串格式
Log.d("ShareInstall", "info = " + info);
try {
JSONObject object = new JSONObject(info);
// 通过该方法拿到设置的渠道值,剩余值为自定义的其他参数
String channel = object.optString("channel");
Log.d("ShareInstall", "channel = " + channel);
} catch (JSONException e) {
e.printStackTrace();
}
}
};
3.3 判断是否首次调用
SDK 提供一个判断是否是首次调用的方法,一般情况在首次安装的时候调用获取安装参数的方法(getInstallParams),在非首次安装时调用获取唤醒参数的方法(getWakeUpParams) 。 接入方可根据自己的场景确定是否使用该方法。
方法:ShareInstall.getInstance().isFirstInstall()
4. 渠道统计
统计每个渠道的注册量(对评估渠道质量很重要),可根据自身的业务规则,在确保用户完成 app 注册的情况下调用以下方法: 注意该方法要在 ShareInstall.getInstance().init (context)方法之后调用,否则会抛异常,如不需要回调监听可传null。
// 用户注册成功后调用注册接口
ShareInstall.getInstance().reportRegister(new OnReportRegisterListener() {
@Override
public void onSuccess()
{ Log.d("shareinstall", "reportRegister onSuccess"); }
@Override
public void onError()
{ Log.d("shareinstall", "reportRegister onError"); }
});
5. 在自己项目的proguard-rules.pro文件中加入以下防混淆配置:
-keep class com.sh.sdk.shareinstall.** {*;}