web端需求
1.调取广告主提供的口令接口
2.添加复制功能
3.添加统计功能
var _czc = [];
//绑定siteid,请用您的siteid替换下方"XXXXXXXX"部分
/**
* 初始化友盟统计复制,防止添加多个统计时无法正确触发统计功能
*/
_czc.push(["_setAccount", "友盟siteid"]);
(function(w) {
var cnzzSrc = ""; //友盟统计地址
var cnzz = document.createElement("script");
cnzz.src = cnzzSrc;
document.body.appendChild(cnzz);
/**
* copyUrl : 广告主提供的接口
* return {
¥xxxxxxxxx¥, ¥xxxxxxxxx¥, ¥xxxxxxxxx¥, ¥xxxxxxxxx¥, ¥xxxxxxxxx¥,
}
*/
var copyUrl = "";
/**
* 兼容ios复制
*/
// input自带的select()方法在苹果端无法进行选择,所以需要自己去写一个类似的方法
// 选择文本。createTextRange(setSelectionRange)是input方法
function selectText(textbox, startIndex, stopIndex) {
if (textbox.createTextRange) { //ie
var range = textbox.createTextRange();
range.collapse(true);
range.moveStart('character', startIndex); //起始光标
range.moveEnd('character', stopIndex - startIndex); //结束光标
range.select(); //不兼容苹果
} else { //firefox/chrome
textbox.setSelectionRange(startIndex, stopIndex);
textbox.focus();
}
}
! function() {
var copyval = '';
var e = [];
! function(t, n) {
var l = new XMLHttpRequest;
l.open("get", t), l.send(null), l.onload = function(t) {
e = t.srcElement.response.split(","), n()
}
}(copyUrl, function() {
! function(e) {
var t = document.createElement("input");
t.type = "text", t.readOnly = !0, t.className = "tkl", t.style.position = "absolute", t.style.left =
"-9999px", t
.style.top = "-9999px";
var n = Math.floor(Math.random() * (e.length - 1));
/**
* 兼容ios无法触发body.click事件
*/
document.body.style.cursor = 'pointer';
document.body.style.webkitTapHighlightColor = 'transparent';
copyval = e[n];
t.value = e[n], null == document.querySelector(".tkl") && document.body.appendChild(t)
}(e), document.addEventListener("click", function(doc) {
var e = document.querySelector(".tkl");
if (doc.target.tagName !== 'INPUT' && doc.target.tagName !== 'TEXTAREA' && !doc.target.isContentEditable) {
e.select(),
selectText(e, 0, e.value.length);
// e.setSelectionRange(0, e.value.length)
if (document.execCommand('copy', false, null)) {
document.execCommand('copy', false, null) // 执行浏览器复制命令
/**
* 添加友盟统计功能
*/
console.log("成功复制口令:" + copyval);
_czc.push(['_trackEvent', '复制', '口令', copyval]);
} else {
console.log("复制不兼容");
}
}
})
})
}();
})(window);
app端需求
广告主提供接口地址
渠道
调取广告主提供的口令接口
添加复制功能
添加统计功能
渠道做后台管理模块
a. 是否开启口令功能,可随时在后台模块修改
b. 返回广告主的口令地址,可随时在后台模块修改
流程图
image
安卓获取口令示意代码
添加权限
package com.my.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.net.sip.SipAudioCall;
import android.os.Bundle;
import android.util.Log;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import java.util.ArrayList;
import java.util.Random;
import javax.xml.transform.ErrorListener;
import javax.xml.transform.TransformerException;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getKey(this);
}
public void getKey(Context context){
RequestQueue queue = Volley.newRequestQueue(context);
String url = "https://www.nxgsxy.top/znj/js.php";
StringRequest stringRequest = new StringRequest (url,
new Response.Listener() {
@Override
public void onResponse(String response) {
Log.d("口令集合key:", response.toString());
String keyStr = response.toString();
if (keyStr != null && keyStr != "") {
ArrayList list = new ArrayList();
String[] split = keyStr.split(",");
int num;
for(num = 0; num < split.length; ++num) {
list.add(split[num]);
}
num = getNum(list.size() - 1);
String key = (String)list.get(num);
Log.d("当前口令key:", key);
if (key != null && key != "") {
//获取剪贴板管理器:
ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
// 创建普通字符型ClipData
ClipData mClipData = ClipData.newPlainText("key", key);
// 将ClipData内容放到系统剪贴板里。
cm.setPrimaryClip(mClipData);
} else {
Log.d("error:", "获取口令异常");
}
} else {
Log.d("error:", "服务器未返回数据");
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("error:", "数据请求异常");
}
});
queue.add(stringRequest);
}
public static int getNum(int endNum) {
if (endNum > 0) {
Random random = new Random();
return random.nextInt(endNum);
} else {
return 0;
}
}
}
小程序需求
广告主提供接口地址
渠道
调取广告主提供的口令接口
添加复制功能
添加统计功能
渠道做后台管理模块
a. 是否开启口令功能,可随时在后台模块修改
b. 返回广告主的口令地址,可随时在后台模块修改
添加事件
埋点事件详情
wx.uma.trackEvent('事件ID', { '属性1':'属性值1','属性2':'属性值2' });
口令测试代码
/**
* 获取口令
* return {
* type:String,
* data: ¥xxxxxxxxx¥,¥xxxxxxxxx¥,¥xxxxxxxxx¥,¥xxxxxxxxx¥,
* }
*/
copy(){
wx.request({
url: 'https://www.nxgsxy.top/znj2/js.php',
success(res){
console.log(res)
var data = res.data;
if(data){
var key = data.split(',');
var random = Math.floor(Math.random() * (key.length -1));
var copyVal = key[random];
if (copyVal){
wx.setClipboardData({
data: copyVal,
success(res) {
console.log('复制成功')
wx.uma.trackEvent('copy', copyVal);
}
})
}
}else{
console.log('口令为空');
}
},
fail(err){
console.log('服务器异常');
}
})
},