生成链接2.0版

master
yqy 1 year ago
parent 30242115da
commit a0ebd41abc

@ -5,6 +5,7 @@ import com.baiye.annotation.Log;
import com.baiye.http.CommonResponse; import com.baiye.http.CommonResponse;
import com.baiye.modules.agent.entity.ChannelCustom; import com.baiye.modules.agent.entity.ChannelCustom;
import com.baiye.modules.agent.entity.query.ChannelQuery; import com.baiye.modules.agent.entity.query.ChannelQuery;
import com.baiye.modules.agent.entity.vo.CreateLinkUrlVO;
import com.baiye.modules.agent.service.CustomManageService; import com.baiye.modules.agent.service.CustomManageService;
import com.baiye.valid.AddGroup; import com.baiye.valid.AddGroup;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -58,8 +59,13 @@ public class CustomManageController {
@GetMapping("/link") @GetMapping("/link")
@ApiOperation("生成链接") @ApiOperation("生成链接")
public CommonResponse<Object> addLink(@RequestParam("customId") Long customId, @RequestParam("type") Integer type) { @Log(value = "生成链接")
String linkUrl = customManageService.createLinkUrl(customId, type); public CommonResponse<Object> addLink(@RequestParam("customId") Long customId,
@RequestParam("type") Integer type,
@RequestParam(value = "vpoint", required = false) String vpoint,
@RequestParam(value = "version", required = false) Integer version,
@RequestParam(value = "akey", required = false) String akey) {
List<CreateLinkUrlVO> linkUrl = customManageService.createLinkUrl(customId, type, vpoint, akey, version);
return CommonResponse.createBySuccess(linkUrl); return CommonResponse.createBySuccess(linkUrl);
} }
@ -69,7 +75,13 @@ public class CustomManageController {
return CommonResponse.createBySuccess(customManageService.findUrlByCustomId(customId)); return CommonResponse.createBySuccess(customManageService.findUrlByCustomId(customId));
} }
@Log @GetMapping("/linkAKey")
@ApiOperation("查询aKey")
public CommonResponse<Map<String, Object>> findAKey(@RequestParam("customId") Long customId) {
return CommonResponse.createBySuccess(customManageService.findAKey(customId));
}
@Log("修改数量")
@Inner @Inner
@ApiOperation("修改数量") @ApiOperation("修改数量")
@GetMapping("/update/quantity") @GetMapping("/update/quantity")

@ -59,5 +59,9 @@ public class ChannelCustomTag extends BaseEntity implements Serializable {
@Column(name = "channel_id") @Column(name = "channel_id")
private Long channelId; private Long channelId;
@ApiModelProperty(value = "百度aKey")
@Column(name = "a_key")
private String aKey;
} }

@ -0,0 +1,22 @@
package com.baiye.modules.agent.entity.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author YQY
* @Date 2023/6/2
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CreateLinkUrlVO {
private String url;
private Integer type;
private String vpoInt;
}

@ -1,6 +1,5 @@
package com.baiye.modules.agent.repository; package com.baiye.modules.agent.repository;
import com.baiye.modules.agent.entity.ChannelCustom;
import com.baiye.modules.agent.entity.ChannelCustomTag; import com.baiye.modules.agent.entity.ChannelCustomTag;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
@ -17,9 +16,9 @@ import java.util.List;
public interface ChannelCustomTagRepository extends JpaRepository<ChannelCustomTag, Long>, JpaSpecificationExecutor<ChannelCustomTag> { public interface ChannelCustomTagRepository extends JpaRepository<ChannelCustomTag, Long>, JpaSpecificationExecutor<ChannelCustomTag> {
/** /**
* *
*
* @param customId * @param customId
* @return * @return
*/ */
@ -27,6 +26,7 @@ public interface ChannelCustomTagRepository extends JpaRepository<ChannelCustomT
/** /**
* *
*
* @param customId * @param customId
* @param type * @param type
* @return * @return
@ -34,7 +34,13 @@ public interface ChannelCustomTagRepository extends JpaRepository<ChannelCustomT
@Query("from ChannelCustomTag where channelId = ?1 and tagType = ?2") @Query("from ChannelCustomTag where channelId = ?1 and tagType = ?2")
ChannelCustomTag findByCustomIdAndType(Long customId, Integer type); ChannelCustomTag findByCustomIdAndType(Long customId, Integer type);
/**
*
*
* @param customId
* @param tagType 1. JL 2. BD 3. UC 4. GDT 5. KS 6. VIVO 7. JL2
* @return
*/
ChannelCustomTag findByChannelIdAndTagType(Long customId, Integer tagType);
} }

@ -3,6 +3,7 @@ package com.baiye.modules.agent.service;
import com.baiye.http.CommonResponse; import com.baiye.http.CommonResponse;
import com.baiye.modules.agent.entity.ChannelCustom; import com.baiye.modules.agent.entity.ChannelCustom;
import com.baiye.modules.agent.entity.query.ChannelQuery; import com.baiye.modules.agent.entity.query.ChannelQuery;
import com.baiye.modules.agent.entity.vo.CreateLinkUrlVO;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import java.util.List; import java.util.List;
@ -57,7 +58,7 @@ public interface CustomManageService {
* @param type * @param type
* @return * @return
*/ */
String createLinkUrl(Long customId, Integer type); List<CreateLinkUrlVO> createLinkUrl(Long customId, Integer type, String vpoint, String akey, Integer version);
/** /**
* id * id
@ -67,6 +68,10 @@ public interface CustomManageService {
*/ */
List<Map<String, Object>> findUrlByCustomId(Long customId); List<Map<String, Object>> findUrlByCustomId(Long customId);
/**
* idAKey
*/
Map<String, Object> findAKey(Long customId);
/** /**
* id * id

@ -17,6 +17,7 @@ import com.baiye.modules.agent.entity.ChannelCustom;
import com.baiye.modules.agent.entity.ChannelCustomTag; import com.baiye.modules.agent.entity.ChannelCustomTag;
import com.baiye.modules.agent.entity.ChannelResourceAssign; import com.baiye.modules.agent.entity.ChannelResourceAssign;
import com.baiye.modules.agent.entity.query.ChannelQuery; import com.baiye.modules.agent.entity.query.ChannelQuery;
import com.baiye.modules.agent.entity.vo.CreateLinkUrlVO;
import com.baiye.modules.agent.entity.vo.CustomReportVo; import com.baiye.modules.agent.entity.vo.CustomReportVo;
import com.baiye.modules.agent.repository.ChannelCustomRepository; import com.baiye.modules.agent.repository.ChannelCustomRepository;
import com.baiye.modules.agent.repository.ChannelCustomTagRepository; import com.baiye.modules.agent.repository.ChannelCustomTagRepository;
@ -64,6 +65,9 @@ public class CustomManageServiceImpl implements CustomManageService {
private Long channelId; private Long channelId;
private final PasswordEncoder passwordEncoder; private final PasswordEncoder passwordEncoder;
private final Integer[] TAG_TYPE = {1, 2, 4, 5};
private final String VPOINT_URL = "&vpoint=";
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public CommonResponse<Object> addCustom(ChannelCustom channelCustom) { public CommonResponse<Object> addCustom(ChannelCustom channelCustom) {
@ -220,37 +224,100 @@ public class CustomManageServiceImpl implements CustomManageService {
return CommonResponse.createBySuccess(); return CommonResponse.createBySuccess();
} }
// @Override
// public String createLinkUrl(Long customId, Integer type) {
// ChannelCustomTag customTag = channelCustomTagRepository.findByCustomIdAndType(customId, type);
// // 已存在直接返回
// if (ObjectUtil.isNotNull(customTag)) {
// UrlLinkEnum linkEnum = UrlLinkEnum.find(type);
// if (ObjectUtil.isNotNull(linkEnum) && linkEnum.getUrl() != null) {
// return configurationUrl.concat(linkEnum.getUrl()).concat(customTag.getTagStr());
// }
// }
// ChannelCustom channelCustom = channelCustomRepository.findById(customId).orElseGet(ChannelCustom::new);
// if (StringUtils.isNotBlank(channelCustom.getChannelName())) {
// // 公司名字转小写 拼接平台
// String firstPinYin = FirstLetter.getFirstPinYin(channelCustom.getChannelName());
// UrlLinkEnum linkEnum = UrlLinkEnum.find(type);
// if (ObjectUtil.isNotNull(linkEnum) && linkEnum.getUrl() != null) {
// String tagUrl = linkEnum.name().toLowerCase().concat(StrPool.DASHED)
// .concat(firstPinYin.toLowerCase())
// .concat(StrPool.DASHED).concat(DateUtil.format(DateUtil.date(), "MMdd"))
// .concat(StrPool.DASHED).concat(RandomUtil.randomString
// (DefaultNumberConstants.FOUR_NUMBER));
// String fullLink = configurationUrl.concat(linkEnum.getUrl()).concat(tagUrl);
// ChannelCustomTag channelCustomTag = new ChannelCustomTag();
// channelCustomTag.setTagType(type);
// channelCustomTag.setTagStr(tagUrl);
// channelCustomTag.setChannelId(customId);
// channelCustomTagRepository.save(channelCustomTag);
// return fullLink;
// }
// }
// return CharSequenceUtil.EMPTY;
// }
@Override @Override
public String createLinkUrl(Long customId, Integer type) { public List<CreateLinkUrlVO> createLinkUrl(Long customId, Integer type, String vpoInt, String aKey, Integer version) {
if (Arrays.asList(TAG_TYPE).contains(type) && StringUtils.isBlank(vpoInt)) {
throw new BadRequestException("请选择链接检测方式");
}
List<CreateLinkUrlVO> returnList = new ArrayList<>();
List<String> vpoIntList = new ArrayList<>();
String tagUrl = "";
if (StringUtils.isNotBlank(vpoInt)) vpoIntList = Arrays.asList(vpoInt.split(","));
UrlLinkEnum linkEnum = UrlLinkEnum.find(type);
String url = linkEnum.getUrl();
//巨量v2版本处理,获取v2的url
if (type == DefaultNumberConstants.ONE_NUMBER && version != null && version == DefaultNumberConstants.TWO_NUMBER) {
url = UrlLinkEnum.find(DefaultNumberConstants.SEVEN_NUMBER).getUrl();
}
ChannelCustomTag customTag = channelCustomTagRepository.findByCustomIdAndType(customId, type); ChannelCustomTag customTag = channelCustomTagRepository.findByCustomIdAndType(customId, type);
// 已存在直接返回
if (ObjectUtil.isNotNull(customTag)) { if (ObjectUtil.isNotNull(customTag)) {
UrlLinkEnum linkEnum = UrlLinkEnum.find(type); tagUrl = customTag.getTagStr();
if (ObjectUtil.isNotNull(linkEnum) && linkEnum.getUrl() != null) { if (StringUtils.isNotBlank(customTag.getAKey())) aKey = customTag.getAKey();
return configurationUrl.concat(linkEnum.getUrl()).concat(customTag.getTagStr()); } else {
ChannelCustom channelCustom = channelCustomRepository.findById(customId).orElseGet(ChannelCustom::new);
if (StringUtils.isNotBlank(channelCustom.getChannelName())) {
// 公司名字转小写 拼接平台
String firstPinYin = FirstLetter.getFirstPinYin(channelCustom.getChannelName());
if (ObjectUtil.isNotNull(linkEnum) && linkEnum.getUrl() != null) {
tagUrl = linkEnum.name().toLowerCase().concat(StrPool.DASHED)
.concat(firstPinYin.toLowerCase())
.concat(StrPool.DASHED).concat(DateUtil.format(DateUtil.date(), "MMdd"))
.concat(StrPool.DASHED).concat(RandomUtil.randomString
(DefaultNumberConstants.FOUR_NUMBER));
ChannelCustomTag channelCustomTag = new ChannelCustomTag();
channelCustomTag.setTagType(type);
channelCustomTag.setTagStr(tagUrl);
channelCustomTag.setChannelId(customId);
if (StringUtils.isNotBlank(aKey)) channelCustomTag.setAKey(aKey);
channelCustomTagRepository.save(channelCustomTag);
}
} }
} }
ChannelCustom channelCustom = channelCustomRepository.findById(customId).orElseGet(ChannelCustom::new); //巨量v2版本处理tag,最后位置追加标识
if (StringUtils.isNotBlank(channelCustom.getChannelName())) { if (type == DefaultNumberConstants.ONE_NUMBER && version != null && version == DefaultNumberConstants.TWO_NUMBER) {
// 公司名字转小写 拼接平台 tagUrl = tagUrl.concat("-v2");
String firstPinYin = FirstLetter.getFirstPinYin(channelCustom.getChannelName()); }
UrlLinkEnum linkEnum = UrlLinkEnum.find(type); //生成链接
if (ObjectUtil.isNotNull(linkEnum) && linkEnum.getUrl() != null) { String fullLink = configurationUrl.concat(url).concat(tagUrl);
String tagUrl = linkEnum.name().toLowerCase().concat(StrPool.DASHED) if (Arrays.asList(TAG_TYPE).contains(type) && CollUtil.isNotEmpty(vpoIntList)) {
.concat(firstPinYin.toLowerCase()) for (String vpoIntStr : vpoIntList) {
.concat(StrPool.DASHED).concat(DateUtil.format(DateUtil.date(), "MMdd")) String newUrl = fullLink.concat(VPOINT_URL).concat(vpoIntStr);
.concat(StrPool.DASHED).concat(RandomUtil.randomString if (StringUtils.isNotBlank(aKey)) {
(DefaultNumberConstants.FOUR_NUMBER)); newUrl = newUrl.concat("&akey=").concat(aKey);
String fullLink = configurationUrl.concat(linkEnum.getUrl()).concat(tagUrl); }
ChannelCustomTag channelCustomTag = new ChannelCustomTag(); CreateLinkUrlVO createLinkUrlVO = new CreateLinkUrlVO(newUrl, type, vpoIntStr);
channelCustomTag.setTagType(type); returnList.add(createLinkUrlVO);
channelCustomTag.setTagStr(tagUrl);
channelCustomTag.setChannelId(customId);
channelCustomTagRepository.save(channelCustomTag);
return fullLink;
} }
} else {
CreateLinkUrlVO createLinkUrlVO = new CreateLinkUrlVO(fullLink, type, "");
returnList.add(createLinkUrlVO);
} }
return CharSequenceUtil.EMPTY; return returnList;
} }
@Override @Override
@ -272,6 +339,15 @@ public class CustomManageServiceImpl implements CustomManageService {
return list; return list;
} }
@Override
public Map<String, Object> findAKey(Long customId) {
Map<String, Object> map = new HashMap<>(1);
map.put("aKey", "");
ChannelCustomTag tag = channelCustomTagRepository.findByChannelIdAndTagType(customId, DefaultNumberConstants.TWO_NUMBER);
if (tag != null && StringUtils.isNotBlank(tag.getAKey())) map.put("aKey", tag.getAKey());
return map;
}
@Override @Override
public ChannelCustom findCustomByUserIdAndStatus(Long userId, Integer status) { public ChannelCustom findCustomByUserIdAndStatus(Long userId, Integer status) {
return channelCustomRepository.findByUserIdAndStatus(userId, status); return channelCustomRepository.findByUserIdAndStatus(userId, status);
@ -411,7 +487,8 @@ public class CustomManageServiceImpl implements CustomManageService {
} }
} }
private void disableChannelById(ChannelCustom custom, List<ChannelCustom> channelCustoms, List<Integer> num, List<Integer> bill) { private void disableChannelById(ChannelCustom
custom, List<ChannelCustom> channelCustoms, List<Integer> num, List<Integer> bill) {
num.add(custom.getSurplusNum()); num.add(custom.getSurplusNum());
bill.add(custom.getSurplusPhoneBill()); bill.add(custom.getSurplusPhoneBill());
custom.setStatus(3); custom.setStatus(3);
@ -430,4 +507,27 @@ public class CustomManageServiceImpl implements CustomManageService {
} }
} }
} }
// /**
// * 拼接参数 向returnList集合中add
// *
// * @param vpoIntList vpoint集合
// * @param aKey 百度需要的值
// * @param url 要拼接的路径
// */
// public List<Map<String, Object>> montageParameter(List<String> vpoIntList, String aKey, String url, Integer type) {
// List<Map<String, Object>> list = new ArrayList<>();
// for (String vpoIntStr : vpoIntList) {
// String newUrl = url.concat(VPOINT_URL).concat(vpoIntStr);
// if (StringUtils.isNotBlank(aKey)) {
// newUrl = newUrl.concat("&akey=").concat(aKey);
// }
// Map<String, Object> map = new HashMap<>();
// map.put("url", newUrl);
// map.put("type", type);
// map.put("vpoInt", vpoIntStr);
// list.add(map);
// }
// return list;
// }
} }

@ -144,4 +144,9 @@ public interface OrganizeService {
* *
*/ */
void convert(OrganizeConvertDTO organizeConvertDTO); void convert(OrganizeConvertDTO organizeConvertDTO);
/**
* ID
*/
Map<Long, String> findOrganizeName(Set<Long> userIds);
} }

@ -16,12 +16,12 @@ public enum UrlLinkEnum {
/** /**
* *
*/ */
JL(1, "/api/jl/monitor?aid=__AID__&cid=__CID__&ctype=__CTYPE__&csite=__CSITE__&imei=__IMEI__&idfa=__IDFA__&oaid=__OAID__&os=__OS__&mac=__MAC__&mac1=__MAC1__&ip=__IP__&geo=__GEO__&TIMESTAMP=__TS__&callback_url=__CALLBACK_URL__&model=__MODEL__&caid1=__CAID1__&tag="), JL(1, "/api/jl/new/monitor/v1?aid=__AID__&aid_name=__AID_NAME__&cid=__CID__&cid_name=__CID_NAME__&campaign_id=__CAMPAIGN_ID__&campaign_name=__CAMPAIGN_NAME__&ctype=__CTYPE__&csite=__CSITE__&convert_id=__CONVERT_ID__&request_id=__REQUEST_ID__&track_id=__TRACK_ID__&os=__OS__&ua=__UA__&geo=__GEO__&ts=__TS__&model=__MODEL__&imei=__IMEI__&idfa=__IDFA__&idfa_md5=__IDFA_MD5__&oaid=__OAID__&oaid_md5=__OAID_MD5__&mac=__MAC__&callback_param=__CALLBACK_PARAM__&callback_url=__CALLBACK_URL__&advertiser_id=__ADVERTISER_ID__&tag="),
/** /**
* BD * BD
*/ */
BD(2, "/api/bd/monitor?userid=__USER_ID__&aid=__IDEA_ID__&pid=__PLAN_ID__&uid=__UNIT_ID__&callback_url=__CALLBACK_URL__&click_id=__CLICK_ID__&idfa=__IDFA__&imei_md5=__IMEI__&oaid=__OAID__&mac=__MAC__&ip=__IP__&os=__OS__&ts=__TS__&device_info=__DEVICE_INFO__&tag="), BD(2, "/api/bd/new/monitor?userId=__USER_ID__&aid=__IDEA_ID__&pid=__PLAN_ID__&uid=__UNIT_ID__&callbackUrl=__CALLBACK_URL__&extInfo=__EXT_INFO__&clickId=__CLICK_ID__&idfa=__IDFA__&imei=__IMEI__&oaidMD5=__OAID_MD5__&oaid=__OAID__&mac=__MAC__&ip=__IP__&ua=__UA__&osType=__OS_TYPE__&ts=__TS__&interactionsType=__INTERACTIONS_TYPE__&tag="),
/** /**
* UC * UC
@ -31,17 +31,22 @@ public enum UrlLinkEnum {
/** /**
* 广 * 广
*/ */
GDT(4, "/api/gdt/monitor?click_id=__CLICK_ID__&click_time=__CLICK_TIME__&campaign_id=_CAMPAIGN_ID__&adgroup_id=__ADGROUP_ID__&ad_id=__AD_ID__&muid=__MUID__&hash_android_id=__HASH_ANDROID_ID__&oaid=__OAID__&hash_oaid=__HASH_OAID__&ip=__IP__&user_agent=__USER_AGENT__&account_id=__ACCOUNT_ID__&promoted_object_type=__PROMOTED_OBJECT_TYPE__&device_os_type=__DEVICE_OS_TYPE__&callback=__CALLBACK__&qz_gdt=__QZ_GDT__&model=__MODEL__&tag="), GDT(4, "/api/gdt/new/monitor?account_id=__ACCOUNT_ID__&click_id=__CLICK_ID__&click_time=__CLICK_TIME__&device_os_type=__DEVICE_OS_TYPE__&muid=__MUID__&hash_oaid=__HASH_OAID__&hash_mac=__HASH_MAC__&campaign_id=__CAMPAIGN_ID__&adgroup_id=__ADGROUP_ID__&ad_id=__AD_ID__&promoted_object_id=__PROMOTED_OBJECT_ID__&ip=__IP__&user_agent=__USER_AGENT__&callback=__CALLBACK__&promoted_object_type=__PROMOTED_OBJECT_TYPE__&tag="),
/** /**
* *
*/ */
KS(5, "/api/ks/monitor?&accountid=__ACCOUNTID__&aid=__AID__&cid=__CID__&did=__DID__&dname=__DNAME__&imeiMD5=__IMEI2__&oaid=__OAID__&mac=__MAC2__&androidid=__ANDROIDID2__&os=__OS__&ts=__TS__&ip=__IP__&ua=__UA__&csite=__CSITE__&model=__MODEL__&ac_creative=__AC_CREATIVE__&idfa=__IDFA2__&tag="), KS(5, "/api/ks/new/monitor?accountid=__ACCOUNTID__&aid=__AID__&cid=__CID__&did=__DID__&dname=__DNAME__&photoid=__PHOTOID__&oaid=__OAID2__&imei=__IMEI2__&imeiHash=__IMEI3__&idfa=__IDFA2__&idfaHash=__IDFA3__&macBak=__MAC2__&mac=__MAC3__&ts=__TS__&ua=__UA__&os=__OS__&model=__MODEL__&callback=__CALLBACK__&ip=__IP__&csite=__CSITE__&ac_creative=__AC_CREATIVE__&win_for_id=__WINFOID__tag="),
/** /**
* vivo * vivo
*/ */
VIVO(6, "/api/vivo/monitor?os=__OS__&imei=__IMEI__&ip=__IP__&oaid=__OAID__&oaidPlain=__OAIDPLAIN__&ua=__UA__&androidId=__ANDROIDID__&location=__LOCATION__&requestId=__REQUESTID__&requestTime=__REQUESTTIME__&advertiserId=__ADVERTISERID__&adName=__ADNAME__&creativeId=__CREATIVEID__&osVersion=__OSVERSION__&model=__MODEL__&lang=__LANG__&resolution=__RESOLUTION__&netType=__NETTYPE__&ts=__TS__&tag="); VIVO(6, "/api/vivo/monitor?os=__OS__&imei=__IMEI__&ip=__IP__&oaid=__OAID__&oaidPlain=__OAIDPLAIN__&ua=__UA__&androidId=__ANDROIDID__&location=__LOCATION__&requestId=__REQUESTID__&requestTime=__REQUESTTIME__&advertiserId=__ADVERTISERID__&adName=__ADNAME__&creativeId=__CREATIVEID__&osVersion=__OSVERSION__&model=__MODEL__&lang=__LANG__&resolution=__RESOLUTION__&netType=__NETTYPE__&ts=__TS__&tag="),
/**
* v2
*/
JL2(7, "/api/jl/new/monitor/v2?promotion_id=__PROMOTION_ID__&project_id=__PROJECT_ID__&promotion_name=__PROMOTION_NAME__&project_name=__PROJECT_NAME__&mid1=__MID1__&mid2=__MID2__&mid3=__MID3__&mid4=__MID4__&mid5=__MID5__&mid6=__MID6__&csite=__CSITE__&convert_id=__CONVERT_ID__&request_id=__REQUEST_ID__&track_id=__TRACK_ID__&os=__OS__&ua=__UA__&geo=__GEO__&ts=__TS__&model=__MODEL__&imei=__IMEI__&idfa=__IDFA__&idfa_md5=__IDFA_MD5__&oaid=__OAID__&oaid_md5=__OAID_MD5__&mac=__MAC__&callback_param=__CALLBACK_PARAM__&callback_url=__CALLBACK_URL__&advertiser_id=__ADVERTISER_ID__&tag=");
private final int type; private final int type;

Loading…
Cancel
Save