diff --git a/android_click/click.py b/android_click/click.py
index 350c793..e767c5b 100644
--- a/android_click/click.py
+++ b/android_click/click.py
@@ -39,7 +39,7 @@ ry_adcreative_name = 'c测试1'
 # bytedance_int 今日头条,kuaishou_int 快手,tencentams_int	(新)广点通,rryingxiao_int 人人营销
 pid = 'rryingxiao_int'
 # URL = 'http://52.80.137.106:8083/tkio/euAVfua?noredirect=true&callback=http%3A%2F%2Fad.toutiao.com%2Ftrack%2Factivate%2F%3Fcallback%3DCKP4rs-Zn4QDEKiQ6teZn4QDGN6L8Y-h9Wcg3ovxj6H1ZyiE0PjgroSEAzAOOM_X-8IDQik0YWY1NzdlOC1lZmViLTRmZDEtYmZkZC00MzE1Zjc1MmJhMGF1NTQ5M0iA0pOtA1AAiAEAkAECmAEA%26os%3D0%26muid%3D'
-URL = 'http://uri6.com/tkio/vMn2eea?noredirect=true&callback=http%3A%2F%2Fad.toutiao.com%2Ftrack%2Factivate%2F%3Fcallback%3DCKP4rs-Zn4QDEKiQ6teZn4QDGN6L8Y-h9Wcg3ovxj6H1ZyiE0PjgroSEAzAOOM_X-8IDQik0YWY1NzdlOC1lZmViLTRmZDEtYmZkZC00MzE1Zjc1MmJhMGF1NTQ5M0iA0pOtA1AAiAEAkAECmAEA%26os%3D0%26muid%3D'
+URL = 'http://uri6.com/tkio/a6ZVNba?noredirect=true'
 
 # 测试头条衍生事件回调时加上
 # callback= http%3A%2F%2Fad.toutiao.com%2Ftrack%2Factivate%2F%3Fcallback%3DCKP4rs-Zn4QDEKiQ6teZn4QDGN6L8Y-h9Wcg3ovxj6H1ZyiE0PjgroSEAzAOOM_X-8IDQik0YWY1NzdlOC1lZmViLTRmZDEtYmZkZC00MzE1Zjc1MmJhMGF1NTQ5M0iA0pOtA1AAiAEAkAECmAEA%26os%3D0%26muid%3D
@@ -60,7 +60,7 @@ def computeMD5upper(message):
     return m.hexdigest().upper()
 
 
-appkey = '3f2706b7afdf89d95ffa7d2e9cc13e2e'
+appkey = '16dc0cb882d3dbec4f7f66251a84d6dd'
 lst = []
 nowTime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
 s = 0
diff --git a/android_event/android_script.py b/android_event/android_script.py
index fcc7e4e..ff6f6a2 100644
--- a/android_event/android_script.py
+++ b/android_event/android_script.py
@@ -7,8 +7,8 @@ headers = {'Content-Type': 'application/json', 'X-RY-Access-Token': 'test_access
 
 # 测试环境
 URL_batch = 'http://10.3.20.42:8080/receive/batch'
-URL = 'http://52.80.137.106:8080/receive/tkio/'
-# URL = 'http://log.trackingio.com/receive/tkio/'
+# URL = 'http://52.80.137.106:8080/receive/tkio/'
+URL = 'http://log.trackingio.com/receive/tkio/'
 # URL = 'http://jisulog.sortda.com/receive/tkio/'
 # URL = 'http://172.31.21.207:8080/receive/tkio/'
 # URL = 'http://120.53.212.71/receive/tkio/'
diff --git a/android_event_case/android_fenlianjie.py b/android_event_case/android_fenlianjie.py
index 71dea3a..ec14b4d 100644
--- a/android_event_case/android_fenlianjie.py
+++ b/android_event_case/android_fenlianjie.py
@@ -52,7 +52,7 @@ for index in range(1):
     # time.sleep(1)
     allEvent().startupEvent(i, ip, appkey)
     # # time.sleep(1)
-    # allEvent().loginEvent(i, ip, appkey)
+    allEvent().loginEvent(i, ip, appkey)
     # time.sleep(1)
     # allEvent().registerEvent(i, ip, appkey)
     # allEvent().payEvent(i, ip, appkey)
diff --git a/microservices/attributioncase.py b/microservices/attributioncase.py
index c7d051e..0f66370 100644
--- a/microservices/attributioncase.py
+++ b/microservices/attributioncase.py
@@ -8,6 +8,7 @@ import time
 import hashlib
 import requests
 import json
+
 # 700bdf6f8e628686dc9fffccf6ebe58b 对应的安卓短链:73iIZ3a
 
 # URL = 'http://tmtest.trackingio.com/receive/turl/QJZfmma'
@@ -29,6 +30,8 @@ z2 = '0000000000000000'
 z3 = '0000000000000000000000000000000000000000000000000000000000000000'
 
 ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
+
+
 # md5加密
 def computeMD5(message):
     m = hashlib.md5()
@@ -38,6 +41,8 @@ def computeMD5(message):
 
 # 生成小写字母加数字组合
 n = 10
+
+
 def code_nums(n=6):
     ret = ''
     for i in range(n):
@@ -47,8 +52,11 @@ def code_nums(n=6):
         ret += s
     return ret
 
+
 # 生成大写字母加数字组合
 n = 10
+
+
 def code_Nums(n=6):
     ret = ''
     for i in range(n):
@@ -58,6 +66,7 @@ def code_Nums(n=6):
         ret += s
     return ret
 
+
 # ------------------------点击deviceid取值顺序-----------------------
 # device_id取值顺序-oaid不为空,取oaid
 def test_qz1():
@@ -107,7 +116,6 @@ def test_qz6():
     print(ip)
 
 
-
 # ------------------------点击device_id_md5取值顺序-----------------------
 
 # device_id_md5取值顺序-imei1_md5,imei2_md5,oaid_md5,gaid_md5,mac_md5,android_id_md5不为空,取oaid_md5
@@ -123,7 +131,6 @@ def test_qz7():
     print(computeMD5(i))
 
 
-
 # device_id_md5取值顺序-oaid_md5为空,imei1_md5,imei2_md5,gaid_md5,mac_md5,android_id_md5不为空,取imei1_md5
 def test_qz8():
     redirectandroid.parms['imei1_md5'] = computeMD5(i)
@@ -146,7 +153,6 @@ def test_qz9():
     print(computeMD5(i2))
 
 
-
 # device_id_md5取值顺序-imei1_md5,oaid_md5,imei2_md5为空,gaid_md5,mac_md5,android_id_md5不为空,取mac_md5
 def test_qz10():
     redirectandroid.parms['mac_md5'] = computeMD5(m)
@@ -157,7 +163,6 @@ def test_qz10():
     print(computeMD5(m))
 
 
-
 # device_id_md5取值顺序-imei1_md5,oaid_md5,imei2_md5,mac_md5为空,android_id_md5不为空,取android_id_md5
 def test_qz11():
     redirectandroid.parms['gaid_md5'] = computeMD5(g)
@@ -181,7 +186,6 @@ def test_atb1():
     print(i)
 
 
-
 # 安卓精准归因-imei1归因
 def test_atb2():
     i = code_nums(12)
@@ -236,7 +240,6 @@ def test_atb5():
     print(i)
 
 
-
 # 安卓精准归因-imei1_md5归因
 def test_atb6():
     redirectandroid.parms['imei1_md5'] = md
@@ -253,7 +256,6 @@ def test_atb6():
     print(o)
 
 
-
 # 安卓精准归因-imei2_md5归因
 def test_atb7():
     redirectandroid.parms['imei2_md5'] = md
@@ -270,7 +272,6 @@ def test_atb7():
     print(o)
 
 
-
 # 安卓精准归因-oaid_md5归因
 def test_atb8():
     redirectandroid.parms['oaid_md5'] = md
@@ -288,7 +289,6 @@ def test_atb8():
     print(md)
 
 
-
 # 安卓精准归因-mac_md5归因
 def test_atb44():
     redirectandroid.parms['mac_md5'] = md
@@ -306,8 +306,6 @@ def test_atb44():
     print(md)
 
 
-
-
 # 安卓精准归因-gaid_md5归因
 def test_atb9():
     redirectandroid.parms['gaid_md5'] = md
@@ -324,8 +322,6 @@ def test_atb9():
     print(o)
 
 
-
-
 # ---------------------点击激活中设备大小写不一致,无法归因上----------------------------
 # 安卓精准归因-imei1归因:点击imei1大写,激活中imei1小写,无法归因上
 def test_atb10():
@@ -340,7 +336,6 @@ def test_atb10():
     print(imei1)
 
 
-
 # 安卓精准归因-imei2归因:点击imei2大写,激活中imei2小写,无法归因上
 def test_atb14():
     imei2 = code_nums(12)
@@ -369,7 +364,6 @@ def test_atb11():
     print(i)
 
 
-
 # 安卓精准归因-mac归因:点击mac大写,激活中mac小写,无法归因上
 def test_atb12():
     m = code_nums(17)
@@ -398,7 +392,6 @@ def test_atb13():
     print(i)
 
 
-
 # 安卓精准归因-imei1归因:点击imei1小写,激活中imei1大写,无法归因上
 def test_atb15():
     imei1 = code_nums(12)
@@ -412,7 +405,6 @@ def test_atb15():
     print(imei1.upper())
 
 
-
 # 安卓精准归因-imei2归因:点击imei2小写,激活中imei2小大写,无法归因上
 def test_atb16():
     imei2 = code_nums(12)
@@ -428,7 +420,6 @@ def test_atb16():
     print(i)
 
 
-
 # 安卓精准归因-oaid归因:点击oaid小写,激活中oaid小大写,无法归因上
 def test_atb17():
     i = code_nums(12)
@@ -442,9 +433,6 @@ def test_atb17():
     print(i)
 
 
-
-
-
 # 安卓精准归因-mac归因:点击mac小写,激活中mac大写,无法归因上
 def test_atb18():
     m = code_nums(17)
@@ -458,7 +446,6 @@ def test_atb18():
     print(m.upper())
 
 
-
 # 安卓精准归因-gaid归因:点击gaid小写,激活中gaid大写,无法归因上
 def test_atb19():
     g = code_nums(36)
@@ -474,10 +461,9 @@ def test_atb19():
     print(i)
 
 
-
 # 安卓精准归因-imei1_md5归因:点击imei1_md5大写,激活中imei1_md5小写,无法归因上
 def test_atb20():
-    md =code_nums(32)
+    md = code_nums(32)
     redirectandroid.parms['imei1_md5'] = md.upper()
     redirectandroid.parms['imei1'] = i
     redirectandroid.send_request3('')
@@ -490,13 +476,12 @@ def test_atb20():
     print(o)
 
 
-
 # 安卓精准归因-imei2_md5归因:点击imei2_md5大写,激活中imei2_md5小写,无法归因上
 def test_atb21():
-    md =code_nums(32)
+    md = code_nums(32)
     redirectandroid.parms['imei2_md5'] = md.upper()
     redirectandroid.parms['imei1'] = i
-    redirectandroid.send_request3( '')
+    redirectandroid.send_request3('')
     time.sleep(10)
     receiveandroid.data[0]['device_info']['device_id'] = o
     receiveandroid.data[0]['device_info']['imei2_md5'] = md
@@ -506,10 +491,9 @@ def test_atb21():
     print(o)
 
 
-
 # 安卓精准归因-oaid_md5归因:点击oaid_md5大写,激活中oaid_md5小写,无法归因上
 def test_atb22():
-    md =code_nums(32)
+    md = code_nums(32)
     redirectandroid.parms['oaid_md5'] = md.upper()
     redirectandroid.parms['imei1'] = i
     redirectandroid.send_request3('')
@@ -522,11 +506,9 @@ def test_atb22():
     print(o)
 
 
-
-
 # 安卓精准归因-mac_md5归因:点击mac_md5大写,激活中mac_md5小写,无法归因上
 def test_atb23():
-    md =code_nums(32)
+    md = code_nums(32)
     redirectandroid.parms['mac_md5'] = md.upper()
     redirectandroid.parms['imei1'] = i
     redirectandroid.send_request3('')
@@ -539,13 +521,12 @@ def test_atb23():
     print(o)
 
 
-
 # 安卓精准归因-gaid_md5归因:点击gaid_md5大写,激活中gaid_md5小写,无法归因上
 def test_atb24():
-    md =code_nums(32)
+    md = code_nums(32)
     redirectandroid.parms['gaid_md5'] = md.upper()
     redirectandroid.parms['imei1'] = i
-    redirectandroid.send_request3( '')
+    redirectandroid.send_request3('')
     time.sleep(10)
     receiveandroid.data[0]['device_info']['device_id'] = o
     receiveandroid.data[0]['device_info']['gaid_md5'] = md
@@ -555,10 +536,9 @@ def test_atb24():
     print(o)
 
 
-
 # 安卓精准归因-imei1_md5归因:点击imei1_md5小写,激活中imei1_md5小大写,无法归因上
 def test_atb25():
-    md =code_nums(32)
+    md = code_nums(32)
     redirectandroid.parms['imei1_md5'] = md
     redirectandroid.parms['imei1'] = i
     redirectandroid.send_request3('')
@@ -571,10 +551,9 @@ def test_atb25():
     print(o)
 
 
-
 # 安卓精准归因-imei2_md5归因:点击imei2_md5小写,激活中imei2_md5大写,无法归因上
 def test_atb26():
-    md =code_nums(32)
+    md = code_nums(32)
     redirectandroid.parms['imei2_md5'] = md
     redirectandroid.parms['imei1'] = i
     redirectandroid.send_request3('')
@@ -587,11 +566,9 @@ def test_atb26():
     print(o)
 
 
-
-
 # 安卓精准归因-oaid_md5归因:点击oaid_md5小写,激活中oaid_md5大写,无法归因上
 def test_atb27():
-    md =code_nums(32)
+    md = code_nums(32)
     redirectandroid.parms['oaid_md5'] = md
     redirectandroid.parms['imei1'] = i
     redirectandroid.send_request3('')
@@ -604,11 +581,9 @@ def test_atb27():
     print(o)
 
 
-
-
 # 安卓精准归因-mac_md5归因:点击mac_md5小写,激活中mac_md5大写,无法归因上
 def test_atb28():
-    md =code_nums(32)
+    md = code_nums(32)
     redirectandroid.parms['mac_md5'] = md
     redirectandroid.parms['imei1'] = i
     redirectandroid.send_request3('')
@@ -621,10 +596,9 @@ def test_atb28():
     print(o)
 
 
-
 # 安卓精准归因-gaid_md5归因:点击gaid_md5小写,激活中gaid_md5大写,无法归因上
 def test_atb29():
-    md =code_nums(32)
+    md = code_nums(32)
     redirectandroid.parms['gaid_md5'] = md
     redirectandroid.parms['imei1'] = i
     redirectandroid.send_request3('')
@@ -637,7 +611,6 @@ def test_atb29():
     print(o)
 
 
-
 # -----------------------不可用归因的设备ID无法精准归因----------------------
 
 # android_id相同,激活中其他参数为空,无法归因
@@ -666,7 +639,6 @@ def test_atb30():
     print(i)
 
 
-
 # 点击激活oaid为’00000000-0000-0000-0000-000000000000‘,激活中其他参数为空,无法归因
 def test_atb31():
     i = code_nums(16)
@@ -693,8 +665,6 @@ def test_atb31():
     print(i)
 
 
-
-
 # 点击激活oaid为’000000000000000‘,激活中其他参数与点击不同,无法归因
 def test_atb32():
     i = code_nums(16)
@@ -722,7 +692,6 @@ def test_atb32():
     print(a)
 
 
-
 # 点击激活oaid为’0000000000000000000000000000000000000000000000000000000000000000‘,激活中其他参数与点击不同,无法归因
 def test_atb33():
     i = code_nums(16)
@@ -778,7 +747,6 @@ def test_atb34():
     print(a)
 
 
-
 # 点击激活oaid_md5为大写’9f89c84a559f573636a47ff8daed0d33‘,激活中其他参数与点击不同,无法归因(待产品决定)
 def test_atb35():
     i = code_nums(16)
@@ -807,7 +775,6 @@ def test_atb35():
     print(a)
 
 
-
 # 点击激活oaid_md5为’5284047f4ffb4e04824a2fd1d1f0cd62‘,激活中其他参数与点击不同,无法归因
 def test_atb36():
     i = code_nums(16)
@@ -864,7 +831,6 @@ def test_atb37():
     print(a)
 
 
-
 # 点击激活oaid_md5为写’1e4a1b03d1b6cd8a174a826f76e009f4‘,激活中其他参数与点击不同,无法归因
 def test_atb38():
     i = code_nums(16)
@@ -893,7 +859,6 @@ def test_atb38():
     print(a)
 
 
-
 # 点击激活oaid_md5为写’10eab6008d5642cf42abd2aa41f847cb‘,激活中其他参数与点击不同,无法归因
 def test_atb39():
     i = code_nums(16)
@@ -922,7 +887,6 @@ def test_atb39():
     print(a)
 
 
-
 # ------------------------------概率归因---------------------
 
 # 点击激活oaid_md5为’5284047f4ffb4e04824a2fd1d1f0cd62‘,激活中其他参数与点击不同,ip相同,ua_click_fp_ip_switch为关闭/开启状态,不可/可归因
@@ -956,12 +920,6 @@ def test_atb40():
     print(ip)
 
 
-
-
-
-
-
-
 # 当receive信息中的可用归因设备ID,其md5值为空时,需要实时添加md5加密值,加密后的md5参数名称与<receive_template.txt>中相关md5值一致,
 # 包括:"oaid_md5","imei1_md5","imei2_md5","mac_md5","gaid_md5"。
 def test_atb41():
@@ -986,10 +944,6 @@ def test_atb41():
     print(a)
 
 
-
-
-
-
 # 安卓精准归因-gaid归因
 def test_atb42():
     g = code_nums(36)
@@ -1018,9 +972,6 @@ def test_atb43():
     print(a)
 
 
-# b8e5e389e1223ffa16a5a9420258383d 8221(Mintegral)渠道短链:beEJbma    2586(快手)渠道短链: FV73Yra
-
-
 # 安卓精准归因-oaid归因,渠道后续事件
 def test_atb45():
     i = code_nums(12)
@@ -1088,25 +1039,70 @@ def test_atb45():
     print(i)
 
 
-
 # 安卓精准归因-oaid归因,渠道的event事件
 def test_atb46():
     i = code_nums(12)
     redirectandroid.parms['account_id'] = '123'
     redirectandroid.parms['oaid'] = i
-    redirectandroid.send_request3("beEJbma", '')
+    redirectandroid.send_request3('')
     time.sleep(10)
-    receiveandroid.data[0]['application_info']['appkey'] = 'b8e5e389e1223ffa16a5a9420258383d'
+    receiveandroid.data[0]['application_info']['appkey'] = 'c54bbff0d3b5d986718eee951fa206cb'
     receiveandroid.data[0]['device_info']['device_id'] = i
     receiveandroid.data[0]['device_info']['oaid'] = i
     receiveandroid.data[0]['device_info']['device_id_type'] = 'oaid'
     receiveandroid.send_request()
     time.sleep(3)
-    receiveandroid.data[0]['application_info']['appkey'] = 'b8e5e389e1223ffa16a5a9420258383d'
+    receiveandroid.data[0]['application_info']['appkey'] = 'c54bbff0d3b5d986718eee951fa206cb'
     receiveandroid.data[0]['device_info']['device_id'] = i
     receiveandroid.data[0]['device_info']['oaid'] = i
     receiveandroid.data[0]['device_info']['device_id_type'] = 'oaid'
     receiveandroid.data[0]["event_info"]['event_name'] = 'custom_event_100'
     receiveandroid.data[0]["event_info"]['event_type'] = 'custom'
     receiveandroid.send_request()
-    print(i)
\ No newline at end of file
+    print(i)
+
+# -------------------展示归因-------------------------
+# ************************精准归因验证************************
+# 【新客获取展示精准归因开关】开,【新客获取展示概率IP+UA归因开关】开,【新客获取展示概率IP归因开关】开,传展示和激活数据(设备id,ip,ua相同),可精准归因
+# 【新客获取展示精准归因开关】开,【新客获取展示概率IP+UA归因开关】开,【新客获取展示概率IP归因开关】开,传展示和激活数据(设备id不同,ip,ua相同),可ip+ua归因
+# 【新客获取展示精准归因开关】开,【新客获取展示概率IP+UA归因开关】开,【新客获取展示概率IP归因开关】开,传展示和激活数据(设备id,ua不同,ip相同),可ip归因
+
+
+# ************************ip+ua归因验证************************
+# 【新客获取展示精准归因开关】关,【新客获取展示概率IP+UA归因开关】开,【新客获取展示概率IP归因开关】关,传展示和激活数据(ip,ua相同),归因上ip+ua
+# 【新客获取展示精准归因开关】关,【新客获取展示概率IP+UA归因开关】开,【新客获取展示概率IP归因开关】关,传展示和激活数据(ip相同,ua不同),归因不上
+
+
+# ************************ip归因验证************************
+# 【新客获取展示精准归因开关】开,【新客获取展示概率IP+UA归因开关】关,【新客获取展示概率IP归因开关】开,传展示和激活数据(ip相同),归因上ip
+# 【新客获取展示精准归因开关】开,【新客获取展示概率IP+UA归因开关】关,【新客获取展示概率IP归因开关】开,传展示和激活数据(ip不相同),归因不上
+
+
+# ************************ip+ua,ip同时开启,优先级验证************************
+# 【新客获取展示精准归因开关】开,【新客获取展示概率IP+UA归因开关】开,【新客获取展示概率IP归因开关】开,传展示和激活数据(ip,ua相同),归因上ip
+
+
+# ************************【新客获取展示精准归因回溯窗口期】验证************************
+# 【新客获取展示精准归因回溯窗口期】设置10秒,发送展示,5秒后发送激活,可精准归因上
+# 【新客获取展示精准归因回溯窗口期】设置10秒,发送展示,15秒后发送激活,归因不上
+
+
+# ************************【新客获取展示概率IP+UA归因回溯窗口期】验证************************
+# 【新客获取展示精准归因回溯窗口期】设置20秒,发送展示,18秒后发送激活,可ip+ua归因
+# 【新客获取展示精准归因回溯窗口期】设置20秒,发送展示,21秒后发送激活,归因不上
+
+
+# ************************【新客获取展示概率IP归因回溯窗口期】验证************************
+# 【新客获取展示精准归因回溯窗口期】设置60秒,发送展示,50秒后发送激活,可ip归因
+# 【新客获取展示精准归因回溯窗口期】设置60秒,发送展示,70秒后发送激活,归因不上
+
+
+# ************************归因优先级验证************************
+# 有可用于精准归因的设备
+# 先传点击,再传展示,然后激活(与点击,展示设备一致),可归因到点击(精准)
+# 先传点击,再传展示,然后激活(与点击设备不一致,与展示设备一致),可归因到展示(精准)
+#
+#
+# 无可用与精准归因的设备
+# 先传点击,再传展示,然后激活(与点击,展示设备一致),可归因到点击(概率)
+# 先传点击,再传展示,然后激活(与点击设备不一致,与展示设备一致),可归因到展示(概率)
diff --git a/tkio/attributioncaseandroid.py b/tkio/attributioncaseandroid.py
index 51d54c3..ca52478 100644
--- a/tkio/attributioncaseandroid.py
+++ b/tkio/attributioncaseandroid.py
@@ -5,35 +5,12 @@ import time
 import string
 
 import hashlib
-from tkio import clickios
-from tkio import tkioreceive
+from tkio import clickandroid
+from tkio import tkioreceiveandroid
 
 
-# 生成idfa大写
-def idfacode():
-    ret = ''
-    a = "".join(random.sample(string.ascii_letters + string.digits, 8))
-    b = "".join(random.sample(string.ascii_letters + string.digits, 4))
-    c = "".join(random.sample(string.ascii_letters + string.digits, 4))
-    d = "".join(random.sample(string.ascii_letters + string.digits, 4))
-    e = "".join(random.sample(string.ascii_letters + string.digits, 12))
-    i = (a + "-" + b + "-" + c + "-" + d + "-" + e).upper()
-    ret += i
-    return ret
 
 
-# 生成idfa小写
-def idfacode_lower():
-    ret = ''
-    a = "".join(random.sample(string.ascii_letters + string.digits, 8))
-    b = "".join(random.sample(string.ascii_letters + string.digits, 4))
-    c = "".join(random.sample(string.ascii_letters + string.digits, 4))
-    d = "".join(random.sample(string.ascii_letters + string.digits, 4))
-    e = "".join(random.sample(string.ascii_letters + string.digits, 12))
-    i = (a + "-" + b + "-" + c + "-" + d + "-" + e).lower()
-    ret += i
-    return ret
-
 
 # md5加密转大写
 def computeMD5upper(message):
@@ -63,648 +40,589 @@ def code_nums1(n=6):
     return ret
 
 
-# 1.点击1:idfa=111,ip=222
-# 2.点击2:idfa=444,ip=333
-# 3.激活:idfa=111,ip=333
-# 归因到点击1
-def test_at1():
-    i = idfacode()
-    i2 = idfacode()
-    ip1 = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    ip2 = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    clickios.parms['idfa'] = i
-    clickios.parms['ip'] = ip1
-    clickios.send_requestandroid('')
-    time.sleep(3)
-    clickios.parms['idfa'] = i2
-    clickios.parms['ip'] = ip2
-    clickios.send_requestandroid('')
-    time.sleep(5)
-    tkioreceive.data['context']['_deviceid'] = i
-    tkioreceive.data['context']['_idfa'] = i
-    tkioreceive.data['context']['_ip'] = ip2
-    tkioreceive.send_request()
-    print(i)
-    print(i2)
-    print(ip1)
-    print(ip2)
-
-
-# 1.点击1:idfa=111,ip=222.点击2:idfa=444,ip=3333.激活:idfa=444,ip=222
-# 归因到点击2
-def test_at2():
-    i = idfacode()
-    i2 = idfacode()
-    ip1 = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    ip2 = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    clickios.parms['idfa'] = i
-    clickios.parms['ip'] = ip1
-    clickios.send_requestandroid('')
-    time.sleep(3)
-    clickios.parms['idfa'] = i2
-    clickios.parms['ip'] = ip2
-    clickios.send_requestandroid('')
+# -----------------------------------点击激活的imei/imei_MD5,oaid,androidid,mac,ip值相同,归因到imei---------------------
+# 点击imei=111,oaid=222,androidid=333,mac=444,ip=1.1.1.1激活imei=111,oaid=222,androidid=333,mac=444,ip=1.1.1.1
+def test_imei1():
+    i = code_nums1(32)
+    oaid = code_nums1(15)
+    mac = code_nums1(32)
+    androidid = code_nums1(16)
+    ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
+    clickandroid.parms['imei'] = i
+    clickandroid.parms['imei_MD5'] = ''
+    clickandroid.parms['oaid'] = oaid
+    clickandroid.parms['androidid'] = androidid
+    clickandroid.parms['mac'] = mac
+    clickandroid.parms['ip'] = ip
+    clickandroid.send_requestandroid('')
     time.sleep(5)
-    tkioreceive.data['context']['_deviceid'] = i2
-    tkioreceive.data['context']['_idfa'] = i2
-    tkioreceive.data['context']['_ip'] = ip1
-    tkioreceive.send_request()
+    tkioreceiveandroid.data['context']['_deviceid'] = i
+    tkioreceiveandroid.data['context']['_imei'] = i
+    tkioreceiveandroid.data['context']['_oaid'] = oaid
+    tkioreceiveandroid.data['context']['_androidid'] = androidid
+    tkioreceiveandroid.data['context']['_mac'] = mac
+    tkioreceiveandroid.data['context']['_ip'] = ip
+    tkioreceiveandroid.send_request()
     print(i)
-    print(i2)
-    print(ip1)
-    print(ip2)
+    print(ip)
 
 
-# 点击激活的idfa,caid,ip+ua,ip都相同,归因方式为idfa
-def test_at3():
-    i = idfacode()
-    caid = code_nums1(36)
-    ip1 = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    clickios.parms['idfa'] = i
-    clickios.parms['ip'] = ip1
-    clickios.parms['caid1'] = caid
-    clickios.send_requestandroid('')
-    time.sleep(5)
-    tkioreceive.data['context']['_deviceid'] = i
-    tkioreceive.data['context']['_idfa'] = i
-    tkioreceive.data['context']['_ip'] = ip1
-    tkioreceive.data['context']['_caid'] = caid
-    tkioreceive.send_request()
-    print(i)
-    print(ip1)
 
 
-# 在优先级同样的情况下,优先匹配lastclick
-def test_at4():
-    i = idfacode()
-    i2 = idfacode()
-    ip1 = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    ip2 = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    clickios.parms['idfa'] = i
-    clickios.parms['ip'] = ip1
-    clickios.send_requestandroid('')
-    time.sleep(3)
-    clickios.parms['idfa_MD5'] = computeMD5upper(i)
-    clickios.parms['idfa'] = i2
-    clickios.parms['ip'] = ip2
-    clickios.send_requestandroid('')
+# 点击imei=111,oaid=222,androidid=333,mac=444,ip=1.1.1.1,muid=555激活imei=555,oaid=222,androidid=333,mac=444,ip=1.1.1.1
+def test_imei2():
+    i = code_nums1(32)
+    oaid = code_nums1(15)
+    mac = code_nums1(32)
+    androidid = code_nums1(16)
+    ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
+    clickandroid.parms['imei'] = '111'
+    clickandroid.parms['imei_MD5'] = ''
+    clickandroid.parms['oaid'] = oaid
+    clickandroid.parms['androidid'] = androidid
+    clickandroid.parms['mac'] = mac
+    clickandroid.parms['muid'] = i
+    clickandroid.parms['ip'] = ip
+    clickandroid.send_requestandroid('')
     time.sleep(5)
-    tkioreceive.data['context']['_deviceid'] = i
-    tkioreceive.data['context']['_idfa'] = i
-    tkioreceive.data['context']['_ip'] = ip1
-    tkioreceive.send_request()
+    tkioreceiveandroid.data['context']['_deviceid'] = i
+    tkioreceiveandroid.data['context']['_imei'] = i
+    tkioreceiveandroid.data['context']['_oaid'] = oaid
+    tkioreceiveandroid.data['context']['_androidid'] = androidid
+    tkioreceiveandroid.data['context']['_mac'] = mac
+    tkioreceiveandroid.data['context']['_ip'] = ip
+    tkioreceiveandroid.send_request()
     print(i)
-    print(i2)
-    print(ip1)
-    print(ip2)
 
 
-# 激活的idfa与点击idfa_MD5相同,caid,ip+ua,ip都相同,归因方式为idfa_MD5
-def test_at5():
-    i = idfacode()
-    caid = code_nums1(32)
+# 点击imei=111,oaid=222,androidid=333,mac=444,ip=1.1.1.1,muid=555,imei_MD5=666激活imei=666,oaid=222,androidid=333,mac=444,ip=1.1.1.1
+def test_imei3():
+    i = code_nums1(32)
+    oaid = code_nums1(15)
+    mac = code_nums1(32)
+    androidid = code_nums1(16)
     ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    clickios.parms['idfa_MD5'] = computeMD5upper(i)
-    clickios.parms['idfa'] = i
-    clickios.parms['ip'] = ip
-    clickios.parms['caid1'] = caid
-    clickios.send_requestandroid('')
+    clickandroid.parms['imei'] = '111'
+    clickandroid.parms['imei_MD5'] = computeMD5lower(i)
+    clickandroid.parms['oaid'] = oaid
+    clickandroid.parms['androidid'] = androidid
+    clickandroid.parms['mac'] = mac
+    clickandroid.parms['muid'] = ''
+    clickandroid.parms['ip'] = ip
+    clickandroid.send_requestandroid('')
     time.sleep(5)
-    tkioreceive.data['context']['_deviceid'] = i
-    tkioreceive.data['context']['_idfa'] = i
-    tkioreceive.data['context']['_ip'] = ip
-    tkioreceive.data['context']['_caid'] = caid
-    tkioreceive.send_request()
+    tkioreceiveandroid.data['context']['_deviceid'] = i
+    tkioreceiveandroid.data['context']['_imei'] = i
+    tkioreceiveandroid.data['context']['_oaid'] = oaid
+    tkioreceiveandroid.data['context']['_androidid'] = androidid
+    tkioreceiveandroid.data['context']['_mac'] = mac
+    tkioreceiveandroid.data['context']['_ip'] = ip
+    tkioreceiveandroid.send_request()
     print(i)
-    print(ip)
 
 
-# 点击激活的idfa以及idfa_MD5不相同,点击的caid1和激活的caid相同,归因方式为caid
-def test_at6():
-    i = idfacode()
-    i2 = idfacode()
-    caid = code_nums1(32)
-    caid2 = code_nums1(32)
-    ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    clickios.parms['idfa_MD5'] = computeMD5upper(i)
-    clickios.parms['idfa'] = i
-    clickios.parms['ip'] = ip
-    clickios.parms['caid1'] = caid
-    clickios.parms['caid2'] = caid2
-    clickios.send_requestandroid('')
-    time.sleep(5)
-    tkioreceive.data['context']['_deviceid'] = i2
-    tkioreceive.data['context']['_idfa'] = i2
-    tkioreceive.data['context']['_ip'] = ip
-    tkioreceive.data['context']['_caid1'] = caid
-    tkioreceive.send_request()
-    print(i2)
-    print(ip)
-
+# -----------------------------------点击激活的imei/imei_MD5值不相同,oaid,androidid,mac,ip值相同,归因到oaid/oaid_MD5-----------------------------------
+# 点击imei=111,oaid=222,androidid=333,mac=444,ip=1.1.1.1激活imei=999,oaid=222,androidid=333,mac=444,ip=1.1.1.1
 
-# 点击激活的idfa,idfa_MD5不相同,点击的caid2和激活的caid相同,归因方式为caid
-def test_at7():
-    i = idfacode()
-    i2 = idfacode()
-    caid = code_nums1(32)
-    caid2 = code_nums1(32)
+def test_oaid1():
+    i = code_nums1(32)
+    oaid = code_nums1(15)
+    mac = code_nums1(32)
+    androidid = code_nums1(16)
     ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    clickios.parms['idfa_MD5'] = computeMD5upper(i)
-    clickios.parms['idfa'] = i
-    clickios.parms['ip'] = ip
-    clickios.parms['caid1'] = caid
-    clickios.parms['caid2'] = caid2
-    clickios.send_requestandroid('')
+    clickandroid.parms['imei'] = '111'
+    clickandroid.parms['imei_MD5'] = ''
+    clickandroid.parms['oaid'] = oaid
+    clickandroid.parms['androidid'] = androidid
+    clickandroid.parms['mac'] = mac
+    clickandroid.parms['muid'] = ''
+    clickandroid.parms['ip'] = ip
+    clickandroid.send_requestandroid('')
     time.sleep(5)
-    tkioreceive.data['context']['_deviceid'] = i2
-    tkioreceive.data['context']['_idfa'] = i2
-    tkioreceive.data['context']['_ip'] = ip
-    tkioreceive.data['context']['_caid1'] = caid2
-    tkioreceive.send_request()
-    print(i2)
-    print(ip)
+    tkioreceiveandroid.data['context']['_deviceid'] = i
+    tkioreceiveandroid.data['context']['_imei'] = i
+    tkioreceiveandroid.data['context']['_oaid'] = oaid
+    tkioreceiveandroid.data['context']['_androidid'] = androidid
+    tkioreceiveandroid.data['context']['_mac'] = mac
+    tkioreceiveandroid.data['context']['_ip'] = ip
+    tkioreceiveandroid.send_request()
+    print(i)
 
 
-# 点击激活的idfa,idfa_MD5不相同,点击的caid2和激活的caid相同,归因方式为caid
-def test_at8():
-    i = idfacode()
-    i2 = idfacode()
-    caid = code_nums1(32)
-    caid2 = code_nums1(32)
+# 点击imei=111,oaid=222,androidid=333,mac=444,ip=1.1.1.1,muid=555激活imei=999,oaid=555,androidid=333,mac=444,ip=1.1.1.1
+def test_oaid2():
+    i = code_nums1(32)
+    oaid = code_nums1(15)
+    mac = code_nums1(32)
+    androidid = code_nums1(16)
     ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    clickios.parms['idfa_MD5'] = computeMD5upper(i)
-    clickios.parms['idfa'] = i
-    clickios.parms['ip'] = ip
-    clickios.parms['caid1'] = caid
-    clickios.parms['caid2'] = caid2
-    clickios.send_requestandroid('')
+    clickandroid.parms['imei'] = '111'
+    clickandroid.parms['imei_MD5'] = ''
+    clickandroid.parms['oaid'] = ''
+    clickandroid.parms['androidid'] = androidid
+    clickandroid.parms['mac'] = mac
+    clickandroid.parms['muid'] = oaid
+    clickandroid.parms['ip'] = ip
+    clickandroid.send_requestandroid('')
     time.sleep(5)
-    tkioreceive.data['context']['_deviceid'] = i2
-    tkioreceive.data['context']['_idfa'] = i2
-    tkioreceive.data['context']['_ip'] = ip
-    tkioreceive.data['context']['_caid1'] = caid2
-    tkioreceive.send_request()
-    print(i2)
-    print(ip)
+    tkioreceiveandroid.data['context']['_deviceid'] = i
+    tkioreceiveandroid.data['context']['_imei'] = i
+    tkioreceiveandroid.data['context']['_oaid'] = oaid
+    tkioreceiveandroid.data['context']['_androidid'] = androidid
+    tkioreceiveandroid.data['context']['_mac'] = mac
+    tkioreceiveandroid.data['context']['_ip'] = ip
+    tkioreceiveandroid.send_request()
+    print(i)
 
 
-# 点击激活的idfa,idfa_MD5不相同,点击的caid2和激活的caid1相同,归因方式为caid
-def test_at9():
-    i = idfacode()
-    i2 = idfacode()
-    caid = code_nums1(32)
-    caid2 = code_nums1(32)
+# 点击imei=111,oaid=222,androidid=333,mac=444,ip=1.1.1.1,muid=555,imei_MD5=666,oaid_MD5=888激活imei=777,oaid=888,androidid=333,mac=444,ip=1.1.1.1
+def test_oaid3():
+    i = code_nums1(32)
+    oaid = code_nums1(15)
+    mac = code_nums1(32)
+    androidid = code_nums1(16)
     ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    clickios.parms['idfa_MD5'] = computeMD5upper(i)
-    clickios.parms['idfa'] = i
-    clickios.parms['ip'] = ip
-    clickios.parms['caid1'] = caid
-    clickios.parms['caid2'] = caid2
-    clickios.send_requestandroid('')
+    clickandroid.parms['imei'] = '111'
+    clickandroid.parms['imei_MD5'] = ''
+    clickandroid.parms['oaid'] = ''
+    clickandroid.parms['oaid_MD5'] = computeMD5lower(oaid)
+    clickandroid.parms['androidid'] = androidid
+    clickandroid.parms['mac'] = mac
+    clickandroid.parms['muid'] = ''
+    clickandroid.parms['ip'] = ip
+    clickandroid.send_requestandroid('')
     time.sleep(5)
-    tkioreceive.data['context']['_deviceid'] = i2
-    tkioreceive.data['context']['_idfa'] = i2
-    tkioreceive.data['context']['_ip'] = ip
-    tkioreceive.data['context']['_caid1'] = caid2
-    tkioreceive.data['context']['_caid2'] = ''
-    tkioreceive.send_request()
-    print(i2)
-    print(ip)
+    tkioreceiveandroid.data['context']['_deviceid'] = i
+    tkioreceiveandroid.data['context']['_imei'] = i
+    tkioreceiveandroid.data['context']['_oaid'] = oaid
+    tkioreceiveandroid.data['context']['_androidid'] = androidid
+    tkioreceiveandroid.data['context']['_mac'] = mac
+    tkioreceiveandroid.data['context']['_ip'] = ip
+    tkioreceiveandroid.send_request()
+    print(i)
 
 
-# 点击激活的idfa,idfa_MD5不相同,点击的caid1和激活的caid2相同,归因方式为caid
-def test_at10():
-    i = idfacode()
-    i2 = idfacode()
-    caid = code_nums1(32)
-    caid2 = code_nums1(32)
+# -----------------------------点击激活的imei/imei_MD5,oaid/oaid_MD5值不相同,androidid/androidid_MD5,mac,ip值相同,归因到androidid/androidid_MD5---------------------
+# 点击imei=111,oaid=222,androidid=333,mac=444,ip=1.1.1.1,muid=555激活imei=888,oaid=999,androidid=333,mac=444,ip=1.1.1.1
+def test_androidid1():
+    i = code_nums1(32)
+    oaid = code_nums1(15)
+    mac = code_nums1(32)
+    androidid = code_nums1(16)
     ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    clickios.parms['idfa_MD5'] = computeMD5upper(i)
-    clickios.parms['idfa'] = i
-    clickios.parms['ip'] = ip
-    clickios.parms['caid1'] = caid
-    clickios.parms['caid2'] = caid2
-    clickios.send_requestandroid('')
+    clickandroid.parms['imei'] = '111'
+    clickandroid.parms['imei_MD5'] = '222'
+    clickandroid.parms['oaid'] = ''
+    clickandroid.parms['oaid_MD5'] = ''
+    clickandroid.parms['androidid'] = androidid
+    clickandroid.parms['mac'] = mac
+    clickandroid.parms['muid'] = ''
+    clickandroid.parms['ip'] = ip
+    clickandroid.send_requestandroid('')
     time.sleep(5)
-    tkioreceive.data['context']['_deviceid'] = i2
-    tkioreceive.data['context']['_idfa'] = i2
-    tkioreceive.data['context']['_ip'] = ip
-    tkioreceive.data['context']['_caid1'] = caid
-    tkioreceive.data['context']['_caid2'] = ''
-    tkioreceive.send_request()
-    print(i2)
-    print(ip)
+    tkioreceiveandroid.data['context']['_deviceid'] = i
+    tkioreceiveandroid.data['context']['_imei'] = i
+    tkioreceiveandroid.data['context']['_oaid'] = oaid
+    tkioreceiveandroid.data['context']['_androidid'] = androidid
+    tkioreceiveandroid.data['context']['_mac'] = mac
+    tkioreceiveandroid.data['context']['_ip'] = ip
+    tkioreceiveandroid.send_request()
+    print(i)
 
 
-# 点击激活的idfa,idfa_MD5,不相同,点击的caid1为原值,激活的caid为md5加密值,无法用caid归因
-def test_at11():
-    i = idfacode()
-    i2 = idfacode()
-    caid = code_nums1(32)
-    caid2 = code_nums1(32)
+# 点击imei=111,oaid=222,androidid=‘’,mac=444,ip=1.1.1.1,muid=555,androidid_MD5=333激活imei=888,oaid=999,androidid=333,mac=444,ip=1.1.1.1
+def test_androidid2():
+    i = code_nums1(32)
+    oaid = code_nums1(15)
+    mac = code_nums1(32)
+    androidid = code_nums1(16)
     ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    clickios.parms['idfa_MD5'] = computeMD5upper(i)
-    clickios.parms['idfa'] = i
-    clickios.parms['ip'] = ip
-    clickios.parms['caid1'] = caid
-    clickios.parms['caid2'] = caid2
-    clickios.send_requestandroid('')
+    clickandroid.parms['imei'] = '111'
+    clickandroid.parms['imei_MD5'] = '222'
+    clickandroid.parms['oaid'] = ''
+    clickandroid.parms['oaid_MD5'] = ''
+    clickandroid.parms['androidid'] = ''
+    clickandroid.parms['androidid_MD5'] = computeMD5lower(androidid)
+    clickandroid.parms['mac'] = mac
+    clickandroid.parms['muid'] = ''
+    clickandroid.parms['ip'] = ip
+    clickandroid.send_requestandroid('')
     time.sleep(5)
-    tkioreceive.data['context']['_deviceid'] = i2
-    tkioreceive.data['context']['_idfa'] = i2
-    tkioreceive.data['context']['_ip'] = ip
-    tkioreceive.data['context']['_caid1'] = computeMD5upper(caid)
-    tkioreceive.data['context']['_caid2'] = ''
-    tkioreceive.send_request()
-    print(i2)
-    print(ip)
+    tkioreceiveandroid.data['context']['_deviceid'] = i
+    tkioreceiveandroid.data['context']['_imei'] = i
+    tkioreceiveandroid.data['context']['_oaid'] = oaid
+    tkioreceiveandroid.data['context']['_androidid'] = androidid
+    tkioreceiveandroid.data['context']['_mac'] = mac
+    tkioreceiveandroid.data['context']['_ip'] = ip
+    tkioreceiveandroid.send_request()
+    print(i)
 
 
-# 点击激活的idfa,idfa_MD5不相同,点击的caid1和激活的caid相同,归因方式为caid
-def test_at12():
-    i = idfacode()
-    i2 = idfacode()
-    caid = code_nums1(32)
-    caid2 = code_nums1(32)
+# --------------------------点击激活的imei/imei_MD5,oaid/oaid_MD5,androidid/androidid_MD5值不相同,mac\mac_MD5,ip,ipv6值相同,归因到mac\mac_MD5--------------------
+# 点击imei=111,oaid=222,androidid=‘’,mac=444,ip=1.1.1.1,muid=555,androidid_MD5=898激活imei=888,oaid=999,androidid=333,mac=444,ip=1.1.1.1
+def test_mac1():
+    i = code_nums1(32)
+    oaid = code_nums1(15)
+    mac = code_nums1(32)
+    androidid = code_nums1(16)
     ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    clickios.parms['idfa_MD5'] = computeMD5upper(i)
-    clickios.parms['idfa'] = i
-    clickios.parms['ip'] = ip
-    clickios.parms['caid1'] = caid
-    clickios.parms['caid2'] = caid2
-    clickios.send_requestandroid('')
+    clickandroid.parms['imei'] = '111'
+    clickandroid.parms['imei_MD5'] = '222'
+    clickandroid.parms['oaid'] = ''
+    clickandroid.parms['oaid_MD5'] = ''
+    clickandroid.parms['androidid'] = ''
+    clickandroid.parms['androidid_MD5'] = '343'
+    clickandroid.parms['mac'] = mac
+    clickandroid.parms['muid'] = ''
+    clickandroid.parms['ip'] = ip
+    clickandroid.send_requestandroid('')
     time.sleep(5)
-    tkioreceive.data['context']['_deviceid'] = i2
-    tkioreceive.data['context']['_idfa'] = i2
-    tkioreceive.data['context']['_ip'] = ip
-    tkioreceive.data['context']['_caid'] = caid
-    tkioreceive.data['context']['_caid2'] = ''
-    tkioreceive.send_request()
-    print(i2)
-    print(ip)
+    tkioreceiveandroid.data['context']['_deviceid'] = i
+    tkioreceiveandroid.data['context']['_imei'] = i
+    tkioreceiveandroid.data['context']['_oaid'] = oaid
+    tkioreceiveandroid.data['context']['_androidid'] = androidid
+    tkioreceiveandroid.data['context']['_mac'] = mac
+    tkioreceiveandroid.data['context']['_ip'] = ip
+    tkioreceiveandroid.send_request()
+    print(i)
 
 
-# 点击激活的idfa,idfa_MD5,不相同,点击的caid1为md5加密值,激活的caid为原值,归因方式为caid_MD5
-def test_at13():
-    i = idfacode()
-    i2 = idfacode()
-    caid = code_nums1(32)
-    caid2 = code_nums1(32)
+# 点击imei=111,oaid=222,androidid=‘’,mac=md5 444,ip=1.1.1.1,muid=555,androidid_MD5=898激活imei=888,oaid=999,androidid=333,mac=444,ip=1.1.1.1
+def test_mac2():
+    i = code_nums1(32)
+    i2 = code_nums1(32)
+    oaid = code_nums1(15)
+    mac = code_nums1(32)
+    androidid = code_nums1(16)
     ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    clickios.parms['idfa_MD5'] = computeMD5upper(i)
-    clickios.parms['idfa'] = i
-    clickios.parms['ip'] = ip
-    clickios.parms['caid1'] = computeMD5upper(caid)
-    clickios.parms['caid2'] = caid2
-    clickios.send_requestandroid('')
+    clickandroid.parms['imei'] = i2
+    clickandroid.parms['imei_MD5'] = '222'
+    clickandroid.parms['oaid'] = ''
+    clickandroid.parms['oaid_MD5'] = ''
+    clickandroid.parms['androidid'] = ''
+    clickandroid.parms['androidid_MD5'] = '343'
+    clickandroid.parms['mac'] = computeMD5lower(mac)
+    clickandroid.parms['muid'] = ''
+    clickandroid.parms['ip'] = ip
+    clickandroid.send_requestandroid('')
     time.sleep(5)
-    tkioreceive.data['context']['_deviceid'] = i2
-    tkioreceive.data['context']['_idfa'] = i2
-    tkioreceive.data['context']['_ip'] = ip
-    tkioreceive.data['context']['_caid'] = caid
-    tkioreceive.data['context']['_caid2'] = ''
-    tkioreceive.send_request()
-    print(i2)
-    print(ip)
-
+    tkioreceiveandroid.data['context']['_deviceid'] = i
+    tkioreceiveandroid.data['context']['_imei'] = i
+    tkioreceiveandroid.data['context']['_oaid'] = oaid
+    tkioreceiveandroid.data['context']['_androidid'] = androidid
+    tkioreceiveandroid.data['context']['_mac'] = mac
+    tkioreceiveandroid.data['context']['_ip'] = ip
+    tkioreceiveandroid.send_request()
+    print(i)
 
-# 点击激活的idfa,idfa_MD5,不相同,点击的caid2为原值,激活的caid2为md5加密值,无法用caid归因
-def test_at14():
-    i = idfacode()
-    i2 = idfacode()
-    caid = code_nums1(32)
-    caid2 = code_nums1(32)
-    ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    clickios.parms['idfa_MD5'] = computeMD5upper(i)
-    clickios.parms['idfa'] = i
-    clickios.parms['ip'] = ip
-    clickios.parms['caid1'] = ''
-    clickios.parms['caid2'] = caid2
-    clickios.send_requestandroid('')
-    time.sleep(5)
-    tkioreceive.data['context']['_deviceid'] = i2
-    tkioreceive.data['context']['_idfa'] = i2
-    tkioreceive.data['context']['_ip'] = ip
-    tkioreceive.data['context']['_caid'] = caid
-    tkioreceive.data['context']['_caid2'] = computeMD5upper(caid)
-    tkioreceive.send_request()
-    print(i2)
-    print(ip)
 
+# --------------------------点击激活的imei/imei_MD5,oaid/oaid_MD5,androidid/androidid_MD5,mac\mac_MD5值不相同,ip,ipv6值相同,归因到ip/ipv6--------------
 
-# 点击激活的idfa,idfa_MD5,不相同,点击的caid2为md5加密值,激活的caid为原值,归因方式为caid_MD5
-def test_at15():
-    i = idfacode()
-    i2 = idfacode()
-    caid = code_nums1(32)
-    caid2 = code_nums1(32)
+# 点击imei=111,oaid=222,androidid=‘’,mac=444,ip=1.1.1.1,ipv6=2.2.2.2,muid=555,androidid_MD5=898激活imei=888,oaid=999,androidid=333,mac=5444,ip=1.1.1.1,ipv6=2.2.2.2,
+def test_ip1():
+    i = code_nums1(32)
+    i2 = code_nums1(32)
+    oaid = code_nums1(15)
+    mac = code_nums1(32)
+    androidid = code_nums1(16)
     ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    clickios.parms['idfa_MD5'] = computeMD5upper(i)
-    clickios.parms['idfa'] = i
-    clickios.parms['ip'] = ip
-    clickios.parms['caid1'] = ''
-    clickios.parms['caid2'] = computeMD5upper(caid2)
-    clickios.send_requestandroid('')
-    time.sleep(5)
-    tkioreceive.data['context']['_deviceid'] = i2
-    tkioreceive.data['context']['_idfa'] = i2
-    tkioreceive.data['context']['_ip'] = ip
-    tkioreceive.data['context']['_caid'] = caid
-    tkioreceive.data['context']['_caid2'] = caid2
-    tkioreceive.send_request()
-    print(i2)
-    print(ip)
-
+    ip2 = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
 
-# 点击激活的idfa,idfa_MD5,caid不相同,点击的ip+ua与激活的相同,归因到ip+ua
-def test_at16():
-    i = idfacode()
-    i2 = idfacode()
-    caid = code_nums1(32)
-    caid2 = code_nums1(32)
-    ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    clickios.parms['idfa_MD5'] = computeMD5upper(i)
-    clickios.parms['idfa'] = i
-    clickios.parms[
-        'ua'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SP-engine/2.30.0 baiduboxapp/12.13.0.10 (Baidu; P2 13.6.1)'
-    clickios.parms['ip'] = ip
-    clickios.parms['caid1'] = ''
-    clickios.parms['caid2'] = caid
-    clickios.send_requestandroid('')
+    clickandroid.parms['imei'] = i2
+    clickandroid.parms['imei_MD5'] = '222'
+    clickandroid.parms['oaid'] = ''
+    clickandroid.parms['oaid_MD5'] = ''
+    clickandroid.parms['androidid'] = ''
+    clickandroid.parms['androidid_MD5'] = '343'
+    clickandroid.parms['mac'] = ''
+    clickandroid.parms['muid'] = ''
+    clickandroid.parms['ip'] = ip
+    clickandroid.parms['ipv6'] = ip2
+    clickandroid.send_requestandroid('')
     time.sleep(5)
-    tkioreceive.data['context']['_deviceid'] = i2
-    tkioreceive.data['context']['_idfa'] = i2
-    tkioreceive.data['context']['_ip'] = ip
-    tkioreceive.data['context']['_caid'] = ''
-    tkioreceive.data['context']['_caid2'] = ''
-    tkioreceive.data['context'][
-        'ua'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SP-engine/2.30.0 baiduboxapp/12.13.0.10 (Baidu; P2 13.6.1)'
-    tkioreceive.send_request()
-    print(i2)
-    print(ip)
-
+    tkioreceiveandroid.data['context']['_deviceid'] = i
+    tkioreceiveandroid.data['context']['_imei'] = i
+    tkioreceiveandroid.data['context']['_oaid'] = oaid
+    tkioreceiveandroid.data['context']['_androidid'] = androidid
+    tkioreceiveandroid.data['context']['_mac'] = mac
+    tkioreceiveandroid.data['context']['_ip'] = ip
+    tkioreceiveandroid.data['context']['_ipv6'] = ip2
+    tkioreceiveandroid.send_request()
+    print(i)
 
-# 点击激活的idfa,idfa_MD5,caid,ip+ua不相同,点击的ipv6+ua与激活的相同,归因到ipv6+ua
-def test_at17():
-    i = idfacode()
-    i2 = idfacode()
-    caid = code_nums1(32)
-    caid2 = code_nums1(32)
+# 点击imei=111,oaid=222,androidid=‘’,mac=444,ip=1.1.1.2,ipv6=2.2.2.2,muid=555,androidid_MD5=898激活imei=888,oaid=999,androidid=333,mac=5444,ip=1.1.1.1,ipv6=2.2.2.2,
+def test_ip2():
+    i = code_nums1(32)
+    i2 = code_nums1(32)
+    oaid = code_nums1(15)
+    mac = code_nums1(32)
+    androidid = code_nums1(16)
     ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
     ip2 = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
 
-    clickios.parms['idfa_MD5'] = computeMD5upper(i)
-    clickios.parms['idfa'] = i
-    clickios.parms[
-        'ua'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SP-engine/2.30.0 baiduboxapp/12.13.0.10 (Baidu; P2 13.6.1)'
-    clickios.parms['ip'] = ip
-    clickios.parms['caid1'] = ''
-    clickios.parms['caid2'] = caid
-    clickios.send_requestandroid('')
+    clickandroid.parms['imei'] = i2
+    clickandroid.parms['imei_MD5'] = '222'
+    clickandroid.parms['oaid'] = ''
+    clickandroid.parms['oaid_MD5'] = ''
+    clickandroid.parms['androidid'] = ''
+    clickandroid.parms['androidid_MD5'] = '343'
+    clickandroid.parms['mac'] = ''
+    clickandroid.parms['muid'] = ''
+    clickandroid.parms['ip'] = ip2
+    clickandroid.send_requestandroid('')
     time.sleep(5)
-    tkioreceive.data['context']['_deviceid'] = i2
-    tkioreceive.data['context']['_idfa'] = i2
-    tkioreceive.data['context']['_ip'] = ip2
-    tkioreceive.data['context']['_ipv6'] = ip
-    tkioreceive.data['context']['_caid'] = ''
-    tkioreceive.data['context']['_caid2'] = ''
-    tkioreceive.data['context'][
-        'ua'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SP-engine/2.30.0 baiduboxapp/12.13.0.10 (Baidu; P2 13.6.1)'
-    tkioreceive.send_request()
+    tkioreceiveandroid.data['context']['_deviceid'] = i
+    tkioreceiveandroid.data['context']['_imei'] = i
+    tkioreceiveandroid.data['context']['_oaid'] = oaid
+    tkioreceiveandroid.data['context']['_androidid'] = androidid
+    tkioreceiveandroid.data['context']['_mac'] = mac
+    tkioreceiveandroid.data['context']['_ip'] = ip
+    tkioreceiveandroid.data['context']['_ipv6'] = ip2
+    tkioreceiveandroid.send_request()
     print(i)
-    print(i2)
-    print(ip)
 
 
-# 点击激活的idfa,idfa_MD5,caid,ip+ua不相同,点击的ip与激活的相同,归因到ip
-def test_at18():
-    i = idfacode()
-    i2 = idfacode()
-    caid = code_nums1(32)
-    caid2 = code_nums1(32)
-    ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    ip2 = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
 
-    clickios.parms['idfa_MD5'] = computeMD5upper(i)
-    clickios.parms['idfa'] = i
-    clickios.parms[
-        'ua'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SP-engine/2.30.0 baiduboxapp/12.13.0.10 (Baidu; P2 13.6.1)'
-    clickios.parms['ip'] = ip
-    clickios.parms['caid1'] = ''
-    clickios.parms['caid2'] = caid
-    clickios.send_requestandroid('')
-    time.sleep(5)
-    tkioreceive.data['context']['_deviceid'] = i2
-    tkioreceive.data['context']['_idfa'] = i2
-    tkioreceive.data['context']['_ip'] = ip
-    tkioreceive.data['context']['_ipv6'] = ip2
-    tkioreceive.data['context']['_caid'] = ''
-    tkioreceive.data['context']['_caid2'] = ''
-    tkioreceive.data['context'][
-        'ua'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SP-engine/2.30.0 baiduboxapp/12.13.0.10 (Baidu; P2 13.6.1)'
-    tkioreceive.send_request()
-    print(i2)
-    print(ip)
 
 
-# 点击激活的idfa,idfa_MD5,caid,ip+ua,ip不相同,点击的ipv6与激活的相同,归因到ipv6
-def test_at19():
-    i = idfacode()
-    i2 = idfacode()
-    caid = code_nums1(32)
-    caid2 = code_nums1(32)
+
+# --------------------------开启自定义归因后,对选择的设备id以及ip验证-----------------------
+# 不选择imei,选择oaid,androidid,mac,ip
+# imei,oaid,androidid,mac,ip相同,归因到oaid
+
+def test_at1():
+    i = code_nums1(32)
+    oaid = code_nums1(15)
+    mac = code_nums1(32)
+    androidid = code_nums1(16)
     ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    ip2 = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    clickios.parms['idfa_MD5'] = computeMD5upper(i)
-    clickios.parms['idfa'] = i
-    clickios.parms[
-        'ua'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SP-engine/2.30.0 baiduboxapp/12.13.0.10 (Baidu; P2 13.6.1)'
-    clickios.parms['ip'] = ip2
-    clickios.parms['caid1'] = ''
-    clickios.parms['caid2'] = caid
-    clickios.send_requestandroid('')
+    clickandroid.parms['imei'] = i
+    clickandroid.parms['imei_MD5'] = computeMD5lower(i)
+    clickandroid.parms['oaid'] = oaid
+    clickandroid.parms['androidid'] = androidid
+    clickandroid.parms['mac'] = mac
+    clickandroid.parms['ip'] = ip
+    clickandroid.send_requestandroid('')
     time.sleep(5)
-    tkioreceive.data['context']['_deviceid'] = i2
-    tkioreceive.data['context']['_idfa'] = i2
-    tkioreceive.data['context']['_ip'] = ip
-    tkioreceive.data['context']['_ipv6'] = ip2
-    tkioreceive.data['context']['_caid'] = ''
-    tkioreceive.data['context']['_caid2'] = ''
-    tkioreceive.data['context'][
-        'ua'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SP-engine/2.30.0 baiduboxapp/12.13.0.10 (Baidu; P2 13.6.1)'
-    tkioreceive.send_request()
-    print(i2)
-    print(ip)
+    tkioreceiveandroid.data['context']['_deviceid'] = i
+    tkioreceiveandroid.data['context']['_imei'] = i
+    tkioreceiveandroid.data['context']['_oaid'] = oaid
+    tkioreceiveandroid.data['context']['_androidid'] = androidid
+    tkioreceiveandroid.data['context']['_mac'] = mac
+    tkioreceiveandroid.data['context']['_ip'] = ip
+    tkioreceiveandroid.send_request()
+    print(i)
 
 
-# 点击激活的idfa,idfa_MD5,caid,ip+ua,ip不相同,归因到自然量
-def test_at20():
-    i = idfacode()
-    i2 = idfacode()
-    caid = code_nums1(32)
-    caid2 = code_nums1(32)
+# 不选择imei,oaid,选择androidid,mac,ip
+# imei,oaid,androidid,mac,ip相同,归因到androidid
+def test_at2():
+    i = code_nums1(32)
+    oaid = code_nums1(15)
+    mac = code_nums1(32)
+    androidid = code_nums1(16)
     ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    ip2 = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    clickios.parms['idfa_MD5'] = computeMD5upper(i)
-    clickios.parms['idfa'] = i
-    clickios.parms[
-        'ua'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SP-engine/2.30.0 baiduboxapp/12.13.0.10 (Baidu; P2 13.6.1)'
-    clickios.parms['ip'] = ip2
-    clickios.parms['caid1'] = ''
-    clickios.parms['caid2'] = caid
-    clickios.send_requestandroid('')
+    clickandroid.parms['imei'] = i
+    clickandroid.parms['imei_MD5'] = computeMD5lower(i)
+    clickandroid.parms['oaid'] = oaid
+    clickandroid.parms['androidid'] = androidid
+    clickandroid.parms['mac'] = mac
+    clickandroid.parms['ip'] = ip
+    clickandroid.send_requestandroid('')
     time.sleep(5)
-    tkioreceive.data['context']['_deviceid'] = i2
-    tkioreceive.data['context']['_idfa'] = i2
-    tkioreceive.data['context']['_ip'] = ip
-    tkioreceive.data['context']['_ipv6'] = '3.3.3.3'
-    tkioreceive.data['context']['_caid'] = ''
-    tkioreceive.data['context']['_caid2'] = ''
-    tkioreceive.data['context'][
-        'ua'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SP-engine/2.30.0 baiduboxapp/12.13.0.10 (Baidu; P2 13.6.1)'
-    tkioreceive.send_request()
-    print(i2)
-    print(ip)
+    tkioreceiveandroid.data['context']['_deviceid'] = i
+    tkioreceiveandroid.data['context']['_imei'] = i
+    tkioreceiveandroid.data['context']['_oaid'] = oaid
+    tkioreceiveandroid.data['context']['_androidid'] = androidid
+    tkioreceiveandroid.data['context']['_mac'] = mac
+    tkioreceiveandroid.data['context']['_ip'] = ip
+    tkioreceiveandroid.send_request()
+    print(i)
+
 
 
-# 激活中idfa为原值大写,点击为原值小写,可归因上
-def test_at21():
-    i = idfacode_lower()
+# 不选择imei,oaid,androidid,选择mac,ip
+# imei,oaid,androidid,mac,ip相同,归因到mac
+def test_at3():
+    i = code_nums1(32)
+    oaid = code_nums1(15)
+    mac = code_nums1(32)
+    androidid = code_nums1(16)
     ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    clickios.parms['idfa'] = i
-    clickios.parms['ip'] = ip
-    clickios.send_requestandroid('')
+    clickandroid.parms['imei'] = i
+    clickandroid.parms['imei_MD5'] = computeMD5lower(i)
+    clickandroid.parms['oaid'] = oaid
+    clickandroid.parms['androidid'] = androidid
+    clickandroid.parms['mac'] = mac
+    clickandroid.parms['ip'] = ip
+    clickandroid.send_requestandroid('')
     time.sleep(5)
-    tkioreceive.data['context']['_deviceid'] = i.upper()
-    tkioreceive.data['context']['_idfa'] = i.upper()
-    tkioreceive.data['context']['_ip'] = ip
-    tkioreceive.send_request()
+    tkioreceiveandroid.data['context']['_deviceid'] = i
+    tkioreceiveandroid.data['context']['_imei'] = i
+    tkioreceiveandroid.data['context']['_oaid'] = oaid
+    tkioreceiveandroid.data['context']['_androidid'] = androidid
+    tkioreceiveandroid.data['context']['_mac'] = mac
+    tkioreceiveandroid.data['context']['_ip'] = ip
+    tkioreceiveandroid.send_request()
     print(i)
 
 
-# 激活中idfa为小写原值,点击为小写,可归因上
-def test_at22():
-    i = idfacode_lower()
+# 不选择imei,oaid,androidid,mac,选择ip
+# imei,oaid,androidid,mac,ip相同,归因到ip
+def test_at4():
+    i = code_nums1(32)
+    oaid = code_nums1(15)
+    mac = code_nums1(32)
+    androidid = code_nums1(16)
     ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    clickios.parms['idfa'] = i
-    clickios.parms['ip'] = ip
-    clickios.send_requestandroid('')
+    clickandroid.parms['imei'] = i
+    clickandroid.parms['imei_MD5'] = computeMD5lower(i)
+    clickandroid.parms['oaid'] = oaid
+    clickandroid.parms['androidid'] = androidid
+    clickandroid.parms['mac'] = mac
+    clickandroid.parms['ip'] = ip
+    clickandroid.send_requestandroid('')
     time.sleep(5)
-    tkioreceive.data['context']['_deviceid'] = i
-    tkioreceive.data['context']['_idfa'] = i
-    tkioreceive.data['context']['_ip'] = ip
-    tkioreceive.send_request()
+    tkioreceiveandroid.data['context']['_deviceid'] = i
+    tkioreceiveandroid.data['context']['_imei'] = i
+    tkioreceiveandroid.data['context']['_oaid'] = oaid
+    tkioreceiveandroid.data['context']['_androidid'] = androidid
+    tkioreceiveandroid.data['context']['_mac'] = mac
+    tkioreceiveandroid.data['context']['_ip'] = ip
+    tkioreceiveandroid.send_request()
     print(i)
 
 
-# 激活中idfa为小写原值,点击为大写,可归因上
-def test_at23():
-    i = idfacode_lower()
+
+# 展示归因验证
+# 开启【自定义归因】-选择mac归因后,展示归因可按照之前逻辑(imei)归因
+def test_at5():
+    i = code_nums1(32)
+    oaid = code_nums1(15)
+    mac = code_nums1(32)
+    androidid = code_nums1(16)
     ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    clickios.parms['idfa'] = i.upper()
-    clickios.parms['ip'] = ip
-    clickios.send_requestandroid('')
+    clickandroid.parms['imei'] = i
+    clickandroid.parms['imei_MD5'] = computeMD5lower(i)
+    clickandroid.parms['oaid'] = oaid
+    clickandroid.parms['androidid'] = androidid
+    clickandroid.parms['mac'] = mac
+    clickandroid.parms['ip'] = ip
+    clickandroid.send_requestandroid('&impression=true')
     time.sleep(5)
-    tkioreceive.data['context']['_deviceid'] = i
-    tkioreceive.data['context']['_idfa'] = i
-    tkioreceive.data['context']['_ip'] = ip
-    tkioreceive.send_request()
+    tkioreceiveandroid.data['context']['_deviceid'] = i
+    tkioreceiveandroid.data['context']['_imei'] = i
+    tkioreceiveandroid.data['context']['_oaid'] = oaid
+    tkioreceiveandroid.data['context']['_androidid'] = androidid
+    tkioreceiveandroid.data['context']['_mac'] = mac
+    tkioreceiveandroid.data['context']['_ip'] = ip
+    tkioreceiveandroid.send_request()
     print(i)
 
 
-# 激活中idfa为原值md5小写,可归因上
-# 1.点击idfa= AAA,idfa_MD5=MD5 AAA 2.激活idfa=MD5 AAA(小写)
-def test_at24():
-    i = idfacode()
+# 点击存储验证
+def test_click():
+    i = code_nums1(32)
+    oaid = code_nums1(15)
+    mac = code_nums1(32)
+    androidid = code_nums1(16)
+    muid = code_nums1(16)
     ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    clickios.parms['idfa'] = i
-    clickios.parms['idfa_MD5'] = computeMD5lower(i)
-    clickios.parms['ip'] = ip
-    clickios.send_requestandroid('')
-    time.sleep(5)
-    tkioreceive.data['context']['_deviceid'] = i
-    tkioreceive.data['context']['_idfa'] = computeMD5lower(i)
-    tkioreceive.data['context']['_ip'] = ip
-    tkioreceive.send_request()
+    clickandroid.parms['imei'] = i
+    clickandroid.parms['imei_MD5'] = computeMD5lower(i)
+    clickandroid.parms['oaid'] = oaid
+    clickandroid.parms['oaid_MD5'] = computeMD5lower(oaid)
+    clickandroid.parms['androidid'] = androidid
+    clickandroid.parms['androidid_MD5'] = computeMD5lower(androidid)
+    clickandroid.parms['mac'] = mac
+    clickandroid.parms['muid'] = muid
+    clickandroid.parms['ip'] = ip
+    clickandroid.send_requestandroid('')
     print(i)
+    print(oaid)
+    print(mac)
+    print(androidid)
+    print(muid)
+    print(ip)
+
 
 
-# 激活中idfa为原值md5大写,可归因上
-def test_at25():
-    i = idfacode()
+def test_hl():
+    i = code_nums1(32)
+    oaid = code_nums1(15)
+    mac = code_nums1(32)
+    androidid = code_nums1(16)
     ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    clickios.parms['idfa'] = i
-    clickios.parms['idfa_MD5'] = computeMD5lower(i)
-    clickios.parms['ip'] = ip
-    clickios.send_requestandroid('')
+    clickandroid.parms['imei'] = i
+    clickandroid.parms['imei_MD5'] = computeMD5lower(i)
+    clickandroid.parms['oaid'] = oaid
+    clickandroid.parms['androidid'] = androidid
+    clickandroid.parms['mac'] = mac
+    clickandroid.parms['ip'] = ip
+    clickandroid.send_requestandroid('')
     time.sleep(5)
-    tkioreceive.data['context']['_deviceid'] = i
-    tkioreceive.data['context']['_idfa'] = computeMD5upper(i)
-    tkioreceive.data['context']['_ip'] = ip
-    tkioreceive.send_request()
+    tkioreceiveandroid.data['context']['_deviceid'] = i
+    tkioreceiveandroid.data['context']['_imei'] = i
+    tkioreceiveandroid.data['context']['_oaid'] = oaid
+    tkioreceiveandroid.data['context']['_androidid'] = androidid
+    tkioreceiveandroid.data['context']['_mac'] = 'null'
+    tkioreceiveandroid.data['context']['_ip'] = ip
+    tkioreceiveandroid.send_request()
+    time.sleep(300)
+    clickandroid.parms['imei'] = i
+    clickandroid.parms['imei_MD5'] = computeMD5lower(i)
+    clickandroid.parms['oaid'] = oaid
+    clickandroid.parms['androidid'] = androidid
+    clickandroid.parms['mac'] = mac
+    clickandroid.parms['ip'] = ip
+    clickandroid.send_requestandroid('')
+    time.sleep(3)
+    tkioreceiveandroid.data['what'] = 'loggedin'
+    tkioreceiveandroid.data['context']['_deviceid'] = i
+    tkioreceiveandroid.data['context']['_imei'] = i
+    tkioreceiveandroid.data['context']['_oaid'] = oaid
+    tkioreceiveandroid.data['context']['_androidid'] = androidid
+    tkioreceiveandroid.data['context']['_mac'] = ''
+    tkioreceiveandroid.data['context']['_ip'] = ip
+    tkioreceiveandroid.data['context']['serverid'] = ip
+    tkioreceiveandroid.send_requestlogin()
     print(i)
+    print(ip)
+
 
 
-# --------------------------开启自定义归因后,对选择的设备id以及ip验证---------------涉及到配置,所以以下情况用同一条测试用例---------------
-# 自定义未选择idfa且点击激活的idfa相同,可归因上caid
-# 自定义未选择idfa,caid且点击激活的idfa,caid相同,可归因上ip+ua
-# 自定义未选择idfa,caid,ip+ua且点击激活的idfa,caid,ip+ua相同,可归因上ip
-# 自定义归因只选择ip,除ip外其他设备都相同,归因到自然量
-# 自定义归因只选择idfa,除idfa外其他设备都相同,归因到自然量
-# 自定义归因只选择caid,除caid外其他设备都相同,归因到自然量
-
-def test_at26():
-    i = idfacode()
-    i2 = idfacode()
-    caid = code_nums1(36)
-    caid2 = code_nums1(36)
-    ip1 = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
+# 开启了自定义归因,不按照lastclick归因,按照设备优先级归因
+def test_at6():
+    i = code_nums1(32)
+    i2 = code_nums1(32)
+    oaid = code_nums1(15)
+    mac = code_nums1(32)
+    androidid = code_nums1(16)
+    ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
     ip2 = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    clickios.parms['idfa'] = i
-    clickios.parms['ip'] = ip1
-    clickios.parms[
-        'ua'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SP-engine/2.30.0 baiduboxapp/12.13.0.10 (Baidu; P2 13.6.1)'
-    clickios.parms['caid1'] = caid
-    clickios.send_requestandroid('')
+    clickandroid.parms['imei'] = i
+    clickandroid.parms['imei_MD5'] = ''
+    clickandroid.parms['oaid'] = ''
+    clickandroid.parms['androidid'] = ''
+    clickandroid.parms['mac'] = ''
+    clickandroid.parms['ip'] = ip
+    clickandroid.send_requestandroid('')
+    time.sleep(3)
+    clickandroid.parms['imei'] = i2
+    clickandroid.parms['imei_MD5'] = ''
+    clickandroid.parms['oaid'] = ''
+    clickandroid.parms['androidid'] = ''
+    clickandroid.parms['mac'] = ''
+    clickandroid.parms['ip'] = ip2
+    clickandroid.send_requestandroid('')
     time.sleep(5)
-    tkioreceive.data['context']['_deviceid'] = i
-    tkioreceive.data['context']['_idfa'] = i
-    tkioreceive.data['context']['_ip'] = ip1
-    tkioreceive.data['context']['_caid'] = caid
-    tkioreceive.data['context'][
-        'ua'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SP-engine/2.30.0 baiduboxapp/12.13.0.10 (Baidu; P2 13.6.1)'
-    tkioreceive.send_request()
-    print(i)
-    print(i2)
-    print(ip1)
-
-# ----------------------归因窗口期逻辑验证---------------涉及到配置,所以以下情况用同一条测试用例---------------
-# 1.开启了自定义归因   2.选择了所有设备和ip  3.【设备ID归因回溯窗口期】为5分钟,【IP归因回溯窗口期】15分钟::1.点击激活中的idfa,ip相同2.发送点击,10分钟后发送一条激活    jointype为ip
-# 1.开启了自定义归因   2.选择了所有设备和ip  3.【设备ID归因回溯窗口期】为5分钟,【IP归因回溯窗口期】5分钟::1.点击激活中的idfa,ip相同2.发送点击,10分钟后发送一条激活     自然量
-# 1.该产品开启了【自定义归因】  2.选择了ip  3.【设备ID归因回溯窗口期】为15分钟,【IP归因回溯窗口期】5分钟::1.点击激活中的idfa,ip相同2.发送点击,10分钟后发送一条激活     自然量
-# 1.该产品开启了【自定义归因】  2.选择了ip  3.【设备ID归因回溯窗口期】为15分钟,【IP归因回溯窗口期】5分钟::1.点击激活中的idfa,ip相同2.发送点击,3分钟后发送一条激活      jointype为ip
-
-def test_at27():
-    i = idfacode()
-    i2 = idfacode()
-    caid = code_nums1(36)
-    caid2 = code_nums1(36)
-    ip1 = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    ip2 = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-    clickios.parms['idfa'] = i
-    clickios.parms['ip'] = ip1
-    clickios.parms[
-        'ua'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SP-engine/2.30.0 baiduboxapp/12.13.0.10 (Baidu; P2 13.6.1)'
-    clickios.parms['caid1'] = caid
-    clickios.send_requestandroid('')
-    time.sleep(60)
-    tkioreceive.data['context']['_deviceid'] = i
-    tkioreceive.data['context']['_idfa'] = i
-    tkioreceive.data['context']['_ip'] = ip1
-    tkioreceive.data['context']['_caid'] = caid
-    tkioreceive.data['context'][
-        'ua'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SP-engine/2.30.0 baiduboxapp/12.13.0.10 (Baidu; P2 13.6.1)'
-    tkioreceive.send_request()
+    tkioreceiveandroid.data['context']['_deviceid'] = i
+    tkioreceiveandroid.data['context']['_imei'] = i
+    tkioreceiveandroid.data['context']['_oaid'] = oaid
+    tkioreceiveandroid.data['context']['_androidid'] = androidid
+    tkioreceiveandroid.data['context']['_mac'] = mac
+    tkioreceiveandroid.data['context']['_ip'] = ip2
+    tkioreceiveandroid.send_request()
     print(i)
     print(i2)
-    print(ip1)
\ No newline at end of file
+    print(ip)
\ No newline at end of file
diff --git a/tkio/attributioncaseios.py b/tkio/attributioncaseios.py
index 51d54c3..60a58cb 100644
--- a/tkio/attributioncaseios.py
+++ b/tkio/attributioncaseios.py
@@ -75,7 +75,7 @@ def test_at1():
     clickios.parms['idfa'] = i
     clickios.parms['ip'] = ip1
     clickios.send_requestandroid('')
-    time.sleep(3)
+    time.sleep(10)
     clickios.parms['idfa'] = i2
     clickios.parms['ip'] = ip2
     clickios.send_requestandroid('')
@@ -165,7 +165,7 @@ def test_at5():
     caid = code_nums1(32)
     ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
     clickios.parms['idfa_MD5'] = computeMD5upper(i)
-    clickios.parms['idfa'] = i
+    clickios.parms['idfa'] = ''
     clickios.parms['ip'] = ip
     clickios.parms['caid1'] = caid
     clickios.send_requestandroid('')
@@ -452,7 +452,6 @@ def test_at17():
     caid2 = code_nums1(32)
     ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
     ip2 = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
-
     clickios.parms['idfa_MD5'] = computeMD5upper(i)
     clickios.parms['idfa'] = i
     clickios.parms[
@@ -471,7 +470,6 @@ def test_at17():
     tkioreceive.data['context'][
         'ua'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SP-engine/2.30.0 baiduboxapp/12.13.0.10 (Baidu; P2 13.6.1)'
     tkioreceive.send_request()
-    print(i)
     print(i2)
     print(ip)
 
@@ -707,4 +705,75 @@ def test_at27():
     tkioreceive.send_request()
     print(i)
     print(i2)
-    print(ip1)
\ No newline at end of file
+    print(ip1)
+
+
+
+
+# 特殊渠道CAID传值处理
+# Bilibili
+def test_at28():
+    i = idfacode()
+    i2 = idfacode()
+    ip1 = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
+    clickios.parms['idfa'] = i
+    clickios.parms['ip'] = ip1
+    clickios.parms[
+        'ua'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SP-engine/2.30.0 baiduboxapp/12.13.0.10 (Baidu; P2 13.6.1)'
+    clickios.parms['caid'] = '20201201_f249f306494646edfee0f939698e1fb8%2C20210101_f049f306494646edfee0f939698e1fb5'
+    clickios.send_requestandroid('')
+    time.sleep(5)
+    tkioreceive.data['context']['_deviceid'] = i
+    tkioreceive.data['context']['_idfa'] = i
+    tkioreceive.data['context']['_ip'] = ip1
+    tkioreceive.data['context']['_caid1'] = 'f249f306494646edfee0f939698e1fb8'
+    tkioreceive.data['context']['_caid2'] = 'f049f306494646edfee0f939698e1fb5'
+    tkioreceive.data['context'][
+        'ua'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SP-engine/2.30.0 baiduboxapp/12.13.0.10 (Baidu; P2 13.6.1)'
+    tkioreceive.send_request()
+    print(i)
+    print(i2)
+    print(ip1)
+
+
+# (新)广点通,cid:17797
+def test_at29():
+    i = idfacode()
+    ip1 = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
+    clickios.parms['idfa'] = i
+    clickios.parms['ip'] = ip1
+    clickios.parms['caid'] = '%5B%7B%22qaid%22%3A%2212345%22%2C%22hash_qaid%22%3A%22123456789012345%22%2C%22version%22%3A%221003%22%7D%2C%7B%22qaid%22%3A%2267890%22%2C%22hash_qaid%22%3A%226789523654780214556%22%2C%22version%22%3A%221006%22%7D%5D'
+    clickios.send_requestandroid('')
+    print('点击')
+    time.sleep(5)
+    tkioreceive.data['context']['_deviceid'] = i
+    tkioreceive.data['context']['_idfa'] = i
+    tkioreceive.data['context']['_ip'] = ip1
+    tkioreceive.data['context']['_caid1'] = '123456789012345'
+    tkioreceive.data['context']['_caid2'] = '6789523654780214556'
+    tkioreceive.data['context'][
+        'ua'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SP-engine/2.30.0 baiduboxapp/12.13.0.10 (Baidu; P2 13.6.1)'
+    tkioreceive.send_request()
+    print(i)
+
+
+
+# 点击存储
+def test_at30():
+    i = idfacode()
+    caid = code_nums1(15)
+    caid1 = code_nums1(36)
+    caid2 = code_nums1(36)
+    ip1 = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
+    clickios.parms['idfa'] = i
+    clickios.parms['ip'] = ip1
+    clickios.parms['caid'] = caid
+    clickios.parms['caid1'] = caid1
+    clickios.parms['caid2'] = caid2
+    clickios.send_requestandroid('')
+    print(i)
+    print(ip1)
+    print(caid)
+    print(caid1)
+    print(caid2)
+
diff --git a/tkio/clickandroid.py b/tkio/clickandroid.py
index 5f4b729..8a99ef5 100644
--- a/tkio/clickandroid.py
+++ b/tkio/clickandroid.py
@@ -17,12 +17,12 @@ ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
 
 
 parms = {
-    'click_time': str(round(time.time() * 1000)),
-    'idfa': '',
-    'idfa_MD5': '',
+    # 'click_time': str(round(time.time() * 1000)),
+    'imei': '',
+    'oaid': '',
     # 'idfv': 'IFV_64F5A794-A942-4209-81B0-D28FD01E9287',
     'ip': ip,
-    'ua': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SP-engine/2.30.0 baiduboxapp/12.13.0.10 (Baidu; P2 13.6.1)',
+    'ua': '',
     # ios
     # Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 SP-engine/2.30.0 baiduboxapp/12.13.0.10 (Baidu; P2 13.6.1)
     # android
@@ -32,8 +32,8 @@ parms = {
 
 
 def send_requestandroid(hc):
-    url1 = 'http://52.80.137.106:8083/tkio/3u63Uza?noredirect=true' + hc
-    # url1 = 'https://uri6.com/tkio/Q3um6na?noredirect=true' + hc
+    # url1 = 'http://52.80.137.106:8083/tkio/yM3y6fa?noredirect=true' + hc
+    url1 = 'http://uri6.com/tkio/q6VFJva?noredirect=true' + hc
     response = requests.get(url=url1, params=parms, timeout=10, verify=False)
     print(response.text)
     print(url1)
diff --git a/tkio/clickios.py b/tkio/clickios.py
index 5f4b729..230b169 100644
--- a/tkio/clickios.py
+++ b/tkio/clickios.py
@@ -17,7 +17,7 @@ ip = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
 
 
 parms = {
-    'click_time': str(round(time.time() * 1000)),
+    # 'click_time': str(round(time.time() * 1000)),
     'idfa': '',
     'idfa_MD5': '',
     # 'idfv': 'IFV_64F5A794-A942-4209-81B0-D28FD01E9287',
@@ -32,9 +32,10 @@ parms = {
 
 
 def send_requestandroid(hc):
-    url1 = 'http://52.80.137.106:8083/tkio/3u63Uza?noredirect=true' + hc
-    # url1 = 'https://uri6.com/tkio/Q3um6na?noredirect=true' + hc
+    # url1 = 'http://52.80.137.106:8083/tkio/JZzMnia?noredirect=true' + hc
+    url1 = 'http://uri6.com/tkio/YjeERja?noredirect=true' + hc
     response = requests.get(url=url1, params=parms, timeout=10, verify=False)
     print(response.text)
     print(url1)
     return response
+
diff --git a/tkio/tkioreceive.py b/tkio/tkioreceive.py
index 42de362..55ee9f2 100644
--- a/tkio/tkioreceive.py
+++ b/tkio/tkioreceive.py
@@ -8,12 +8,13 @@ import hashlib
 
 data = {
     "what": "install",
-    "appid": "7f43b32bad452c092096136c9be73d09",
+    "appid": "53acd3308411e0c4ab1f6444d7878aab",
     "context": {
         "_deviceid": "",
         "_idfa": "",
         "_idfv": "",
         "_ip": "",
+        'customAttrParams': 'ip+ua',
         "_manufacturer": "vivo",
         "_ryos": "ios",
         "_rydevicetype": "vivox9",
@@ -40,9 +41,9 @@ data_temp = json.dumps(data)
 def send_request():
     global data
     # 测试
-    url = "http://52.80.137.106:8080/receive/tkio/install"
+    # url = "http://52.80.137.106:8080/receive/tkio/install"
     # 线上
-    # url = "http://log.trackingio.com/receive/tkio/install"
+    url = "http://log.trackingio.com/receive/tkio/install"
     data['context']['install_time'] = int(round(time.time() * 1000))
     print(data)
     response = requests.request("POST", url, headers=headers, data=json.dumps(data))
diff --git a/tkio/tkioreceiveandroid.py b/tkio/tkioreceiveandroid.py
index 42de362..e055704 100644
--- a/tkio/tkioreceiveandroid.py
+++ b/tkio/tkioreceiveandroid.py
@@ -8,14 +8,14 @@ import hashlib
 
 data = {
     "what": "install",
-    "appid": "7f43b32bad452c092096136c9be73d09",
+    "appid": "8a390227254c03dbcaddbca009cd6e8b",
     "context": {
         "_deviceid": "",
-        "_idfa": "",
-        "_idfv": "",
+        "_imei": "",
+        "_oaid": "",
         "_ip": "",
         "_manufacturer": "vivo",
-        "_ryos": "ios",
+        "_ryos": "android",
         "_rydevicetype": "vivox9",
         "_networktype": "5g",
         "_resolution": "1344*750",
@@ -24,6 +24,7 @@ data = {
         "_model": "jixing",
         "_ryosversion": "13.6.1",
         "__model": "jixing"
+
     },
     "when": int(round(time.time() * 1000)),
     "ds": "2022-06-15",
@@ -37,12 +38,31 @@ headers = {
 data_temp = json.dumps(data)
 
 
+
 def send_request():
     global data
     # 测试
-    url = "http://52.80.137.106:8080/receive/tkio/install"
+    # url = "http://52.80.137.106:8080/receive/tkio/install"
+    # 线上
+    url = "http://log.trackingio.com/receive/tkio/install"
+    data['context']['install_time'] = int(round(time.time() * 1000))
+    print(data)
+    response = requests.request("POST", url, headers=headers, data=json.dumps(data))
+    print(response.text)
+    # 全局data
+    data = json.loads(data_temp)
+    response = json.loads(response.text)
+    s = str(response["status"])
+    response["status"] = s
+    return response
+
+
+def send_requestlogin():
+    global data
+    # 测试
+    # url = "http://52.80.137.106:8080/receive/tkio/loggedin"
     # 线上
-    # url = "http://log.trackingio.com/receive/tkio/install"
+    url = "http://log.trackingio.com/receive/tkio/loggedin"
     data['context']['install_time'] = int(round(time.time() * 1000))
     print(data)
     response = requests.request("POST", url, headers=headers, data=json.dumps(data))