积分墙接入指引

目录


1、 积分墙SDK接入准备

1.1 步骤一 将sdk的jar包导入您的工程中

&bull新建libs文件夹,将jar包添加入。

1.2 步骤二 添加assets内容

&bull将assets.zip解压,将里面全部文件导入apk工程的assets中,确保其中文件在apk打包后的assets根目录下存在。

1.3 步骤三 将so导入您的工程中

&bull在步骤一建好的libs下面新建armeabi
&bull将libsuperapp_base_armeabi*.so重命名为libsuperapp_base.so和libps.so、libBeacon.so、libsuperapp_ex.so以及libBugly.so这4个so一起放到libs/armeabi目录下面。
&bull在assets/ superapp目录下(工程默认有这个目录)新建lib目录,lib目录下面新建x86目录(兼容x86架构),libsuperapp_base_x86*.so重命名为libsuperapp_base.so放到assets/lib/x86目录下面,请仔细确认目录名称和位置,否则会无法正常使用并拉取到数据。

1.4 步骤四 在AndroidManifest.xml文件中配置用户权限

&bull请将下面权限配置代码复制到 AndroidManifest.xml 文件中,否则可能会无法正常使用。
以下列出的所有权限都是必要权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="com.android.launcher.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<android:uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

1.5 步骤五 在AndroidManifest.xml中声明Activity和service

&bull在AndroidManifest.xml 文件中,声明展示应用的Activity:

<activity
    android:name="com.tencent.assistant.oem.superapp.activity.HomeActivity"
    android:configChanges="keyboardHidden|orientation"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:screenOrientation="portrait" />
 

&bull在AndroidManifest.xml 文件中,声明应用试玩监听的应用,如果不注册将无法监听积分任务应用的试玩情况:

<service android:name="com.tencent.assistant.oem.superapp.scorewall.AppMonitorService"/>

1.6 步骤六 混淆注意事项

&bull在进行打包混淆的时候,在build文件中加入以下内容,否则SDK无法正常使用:

-dontwarn com.tencent.**
-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep class com.tencent.** {*;}
-keep class com.qq.** {*;}
-keepclasseswithmembernames class com.tencent.beaconyybwall.nativeimpl.a {native <methods>;}

2、 积分墙SDK接口说明及使用说明

2.1、积分墙SDK接口说明

public static synchronized TADownloadSdkManager getInstance()

介绍:返回一个SDK接口类的单实例,接口对象必须通过该方法取得实例,获取到的实例应与主Activity生命周期相同。

返回值:返回一个接口对象的引用。

public boolean isInit()

介绍:判断是否已经初始化
返回值:SDKInitResult中有两个参数,resultCode表示返回码,resultMessage表示返回结果说明。当resultCode==0时,表示初始化成功

public synchronized void initSDK(Context context, String appKey, String appSecret, String userId, ArrayList<Integer> sceneList, SDKInitCallback callback)

介绍:初始化接口对象,显示任何Activity前必须初始化,否则会抛出异常。为了确保「监听积分墙任务完成情况」功能正常使用,初始化必须在Application中完成,如果在启动Activity前如果发现未初始化,也应做初始化。如果需要更新除context以外的参数信息,可以通过再次调用该方法更新信息。
参数说明:
Context:盛放SuperApp的容器Context,如果为null,则不进行初始化,只更新其他参数。
appKey:申请接入通过后发放的AppKey,如果为null,则不更新该参数。
appSecret:申请接入通过后发放的AppSecret1,如果为null,则不更新该参数。
userId:当前用户的唯一标识符,发放奖励时使用,如果为null,则不更新该参数。
sceneList:需要SDK支持的场景集合,如果为null,则不更新该参数。

1:积分墙
示例:

ArrayList<Integer> ids = new ArrayList<Integer>();
ids.add(1);

callback:通知初始化结果的回调,如果为null,则不更新该参数。关于SDKInitCallback的定义参见下文
备注:
如果不接受在Application 里面完成初始化,需要在application 类中定义函数:

public void initSuperApp(Context context)

在这个函数中调用initSDK 函数完成初始化,这样在应用意外重启的时候我们可以调用这个函数及时完成初始化,保证奖励能够及时发放,如果不在application 完成初始化也不定义
initSuperApp 函数,则意外重启会丢失任务完成奖励。

public void showSDKView(int type);

介绍:显示SDK的Activity场景
参数说明: type: 1表示积分墙;

SDKInitCallback:
public interface SDKInitCallback {
	void onInitFinished(SDKInitResult result);
	void onUserTaskCompleted(PrizeInfo prize);
}
public void onInitFinished(SDKInitResult result)

介绍:初始化完成的回调函数
参数说明:
SDKInitResult:定义一些常用的初始化返回码和返回内容,说明如下: resultCode==0,初始化成功
resultCode==-1,网络不通
resultCode==-2,认证失败,请检查appKey和appSecret传入是否正确,请检查接入的应用包名和签名是否与官网注册的信息一致
resultCode==-100,其他错误,请检查AndroidManifest中权限配置与接入文档是否一致,如果有做代码混淆,请检查接入文档中的混淆的语句是否加入混淆脚本

2.2、积分墙SDK初始化

启动应用时调用TADownloadSDKManager.getInstance().initSDK(xxx)方法进行初始化,(最好在Application里进行初始化,因为初始化是一个异步过程,需要预先进行,无法正常初始化的话会导致无法正常使用SDK的各项功能)如果未调用初始化函数,则无法正常使用SDK的各项功能。初始化的结果可以在SDKInitCallback的onInitFinished回调方法中得到,也可以调用TADownloadSdkManager getInstance().isInit()来查询SDK是否初始化完成。参数userId必须填写,没有的话可以填null。如果用户登录了app或者切换了帐号请务必重新调用初始化函数。SDKInitCallback的onUserTaskCompleted方法如果要使用积分墙本地发放奖励的话必须实现,否则可以不实现。

2.3、显示积分墙SDK

调用TADownloadSDKManager.getInstance().showSDKView(1)来显示积分墙。

2.4、电量监控场景广告使用(可选功能)

调用
TADownloadSDKManager.getInstance().startBatteryMonitor(BatteryConditionCallback callback)来启动SDK对手机电量的监控功能,当手机电量到达SDK后台配置的弹窗条件时,会通过callback.onConditionReaced(DialogWrapper dialog)方法传递一个DialogWrapper对象,开发者可以根据需要通过调用DialogWrapper.show(Activity activity)方法来让广告弹窗显示,简单的示例代码如下:

TADownloadSdkManager.getInstance().startBatteryMonitor(new BatteryConditionCallback() {
   @Override
   public void onConditionReached(DialogWrapper dialog) {
      dialog.show(MainActivity.this);
   }
});

也可以调用DialogWrapper.dismiss()方法来关闭弹窗,如果要停止SDK对手机电量的监控功能,则可以调用TADownloadSDKManager.getInstance().stopBatteryMonitor()方法。

2.5、push功能接入(可选功能)

Push分为下载安装等本地Push和运营push两种,本地push和应用墙搭配使用,积分墙不能接入。运营push则积分墙和应用墙都可以接入。

2.5.1本地push接入

先在AndroidManifest中注册Serivce如下

然后调用TADownloadSDKManager.getInstance().startLocalPush(int smallIcon, int tickerIcon)方法,参数smallIcon是用来设置notification的smallIcon属性的,tickerIcon是用来设置ticker显示时的icon的,由于Android系统的限制tickerIcon的尺寸有如下规则,否则会显示不全。

如果不遵循该规则,则在部分手机上可能出现如下现象:

2.5.2运营push接入

先在AndroidManifest中注册Service和Receiver如下

<receiver android:name="com.tencent.assistant.timer.ScheduleJobReceiver">
    <intent-filter android:priority="1000">
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <action android:name="com.tentcent.superapp.action.SCHEDULE_JOB" />
        <action android:name="android.intent.action.SCREEN_ON" />
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>
<service android:name="com.tencent.assistant.push.PushService" />

然后调用TADownloadSDKManager.getInstance().startOperatePush(int smallIcon, int tickerIcon)接口,参数解释如上,另注:如果先调用了本地Push接口再调用这个,参数会互相覆盖,反之亦然。

3、 积分墙货币发放规范

3.1、概述

应用宝后台发放奖励有两种方式:
(1) 、前端发放:通过SDK建立安全通道的方式发放奖励;
(2) 、后台发放:通过后台对接的方式发放奖励;
如果选择通过SDK建立安全通道的方式发放奖励,可以忽略本节,如果选择通过后台对接的方式发放奖励,那么必须满足这里定义的规范。

3.2、接入流程

(1) 、开发者在申请接入时,向应用宝后台注册接收Push信息的Url。
(2) 、应用宝后台向开发者分配奖励发放密钥(appSecretIssue)。
(3) 、应用宝推送时的IP为一下四个,开发者只能接受以下IP地址推送的发放记录:
140.207.62.199 101.226.86.179 219.133.40.97 119.147.207.162

3.3、注册URL需要满足的条件

(1) 、注册的Url 需要接收Post 请求,Body内容为Json格式。
(2) 、应用宝后台推送消息示例:

{
    "issueList": [
        {
            "appId": "0", 
            "issueNum": "0", 
            "issueTime": "1441415624655", 
            "moneyUnit": "黄金", 
            "reward": "20", 
            "signature": "87654321908765432109098765432199", 
            "taskGroup": "6", 
            "taskId": "0", 
            "taskIndex": "3", 
            "totalReward": "100", 
            "userId": "wwwwwwwwwwwwwwwwwwwww"
        }, 
        {
            "appId": "1", 
            "issueNum": "1", 
            "issueTime": "1441415624655", 
            "moneyUnit": "黄金", 
            "reward": "20", 
            "signature": "87654321908765432109098765432199", 
            "taskGroup": "6", 
            "taskId": "1", 
            "taskIndex": "3", 
            "totalReward": "100", 
            "userId": "wwwwwwwwwwwwwwwwwwwww"
        }
    ]
}

(3)、应用宝后台推送消息字段说明

字段名 数据类型 含义 备注
appId string 用户下载应用的唯一标识
issueNum string 发放流水号
issueTime string 发放时间,单位为毫秒
moneyUnit string 宿主(接入方)货币单位
reward string 发放的货币数量,单位为宿主(接入方)货币单位
taskGroup string 任务组Id
taskId string 任务Id,任务唯一标识
taskIndex string 任务序号
totalReward string 总的奖励数
userId string 宿主用户唯一标识
signature string 本条发放记录的签名

说明
接入方必须对每条发放记录进行签名校验,以确保该请求来自应用宝后台,且未被篡改。

签名signature的计算方式如下:

Signature=md5(reward+"_"+taskIndex+"_"+issueNum+"_"+taskId+"_"+appId+"_"+taskGroup+"_"+totalReward+"_"+moneyUnit+"_"+appSecretIssue+"_"+issueTime)

其中:
appSecretIssue——发放密钥,接入时由应用宝后台向接入方提供。
例如上边的发放列表中的第一个发放记录的signature的计算方式如下:(假设appSecretIssue为“111111111111”)
Signature = md5("20"+"_"+"3"+"_"+"0"+"_"+"0"+"_"+"0"+"_"+"6"+"_"+"100"+"_"+"黄金"+"_"+"111111111111"+"_"+"1441415624655")

接入方必须对发放流水号进行记录,确保一个发放流水号只发放一次,以避免同一记录多次发放。
但是注意:由于各种难以预料的原因可能造成如下情况:
应用宝后台推送过去了,开发者也收到了,但是开发者回包的时候由于不能预料的原因(例如网络抖动等)出了问题,这时应用宝后台会认为开发者没有收到,就会重复推送,这种情况需要开发者自己处理,但是开发者收到这种情况下推送的数据时应该以成功的格式回包,回包的具体格式见4)

(4) 、开发者所注册URL 需以如下格式回包

{
"ret": "0", 
    "issueNumList": [
        "0", 
        "1", 
    ], 
"resTime": "1441776758267", 
    "nonce": "1869870458", 
    "signature": "5e1a52991e19ad64577fce04b67bd556"
}

其中各个字段的含义如下表:

字段名 数据类型 含义 备注
ret string 接收结果,0成功,-1失败
issueNumList vector<string> 开发者响应时需要把Push过去的发放记录列表中的每个发放记录的发放流水号返回来(以红色标出)。
resTime string 开发者响应时的时间戳,单位为毫秒
nonce string 开发者每次响应需要生成一个随机数
signature

string 开发者每次响应需要生成一个签名

errMsg string 开发者返回的错误信息(最多10字节)

说明:

signature——响应签名,string 类型,32位小写Md5,应用宝后台收到回包后,会对签名(signature)字段进行校验,只有校验通过,才认为是开发者的合法回包,签名(sinature)的计算公式如下:

signature=md5( ret+resTime+issueNum0+....+ssueNumN+appSecretIssue+nonce)

其中:

“issueNum0+....+issueNumN”:表示把回包中的发放流水号列表(issueNumList)中的每一个发放流水号都拼接起来,而且必须按照回包中发放流水号列表(issueNumList)中的顺序进行计算。
appSecretIssue:接入时由应用宝后台向开发者提供的奖励发放密钥。
本例中回包的signature计算如下:(假设appSecretIssue为“111111111111”)
Signature = md5("0"+"1441776758267"+"0"+"1"+"111111111111"+"1869870458")
回包格式里的ret: 只要有任凭一条处理成功了,这里就回0,只有全部都失败时,才填-1
回包格式里的IssueList:只填你们成功处理的流水号,如果我们推送了5个,你们成功处理了4个,那么这里就只填那4个

4、 积分墙货币接入注意事项

4.1 appkey和appsecret必须使用分配的,否则无法正常使用SDK

4.2 apk必须用申请时的签名文件进行签名,否则无法正常使用SDK

4.3 初始化失败常用错误码说明如下

SDKInitResult:定义一些常用的初始化返回码和返回内容,说明如下:
resultCode==0,初始化成功
resultCode==-1,网络不通
resultCode==-2,认证失败,请检查appKey和appSecret传入是否正确,请检查接入的应用包名和签名是否与官网注册的信息一致
resultCode==-100,其他错误,请检查AndroidManifest中权限配置与接入文档是否一致,如果有做代码混淆,请检查接入文档中的混淆的语句是否加入混淆脚本,其他错误码请及时沟通反馈,联系人QQ:3077973301

以上信息是否解决您的问题?

Copyright © 1998 - 2017 Tencent. All Rights Reserved.

腾讯公司 版权所有

有问必答 返回顶部