微信H5活动文案链接域名防封及跳转系统详解
一直以来,我们都被新奇劲爆的H5不断冲击大脑,大脑一次又一次被刺激着,好的H5活动文案在微信中和朋友圈火了一把,看过之后却让我们久久不能忘怀,我们下意识引发了情感共鸣!那么问题来了,这个H5活动文案精心策划出来后,分享次数过多或者是被同行举报之后,全部被归零----被微信封杀了!那么该如何来对H5活动文案链接域名来做防封呢?
像这类场景,都是以文字 图片加二维码的形式展现在大众的眼前,那我们就从这几方面来着手。
这里重点需要说的是图片!!这个得有个度,很多大佬为了能引起眼求,用了过于暴露和过于性感的图片,这样容易被微信判定为H色,进而容易引起被封。
还有,二维码识别,很多防封都不能兼容苹果二维码的识别,不能做到长按来识别,而是需要保存二维码到相岫,再用扫一扫进行识别,这样繁琐的步骤,别说没有一点优势,还引起用户的反感,从而进行投诉,只要投诉次数一多,也是容易引起被封的。
那有人就会有疑问,我从各方面都有注意到,那为什么还是被微信封杀呢?那我这里跟你说,被封的因素太多了,其中可以去百度搜搜微信相关规则,所谓是防不胜防,我们要做的就是做好防封,将我们的损失降到最小,将推广做到利益最大化,那怎么来做防封呢?下面介绍几种跳转系统供大家参考:
1、现在很多朋友接触的防封策略都是用落地域名作为肉盾,一个入口配上多个落地域名,让落地域名进行轮换,假如落地A被封了,立马更换落地域名B,这里可以手动换,也可以写程序实现自动换,但是这种很费域名,尤其是带点敏感或者是灰色产业,那一天不准备百把个域名是做不下来的,完全就是用域名来推的,而且域名一天一个价,有的时候就是天价,很多老板直呼推不起。这种方式对于某些行业是解决不了根本的。
2、还有一种就是做跳转,细细分析,封只是说在微信环境中被封杀,假如说是自动跳转到手机外部浏览器是不是就可以解决这一问题了,但是这个也是有一定的限制,假如必须在微信环境中去实施后面部分的话,这个就没那么合适,而且目前为止,只能实现安卓自动跳转,由于苹果端 做了限制,还是需要手动去引导一步。
3、多级加密跳转防封,通过生成防封短链接,有效保护原始链接不被发现,应该说是目前最有技术含量的防封了,各种场景都适用,尤其QP,BC等,效果杠杠的。
完结,以上策略希望对大家有帮助,期待新的发现~有需要可以联系我,
最后分享代码供技术朋友参考下:
import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;import java.util.HashMap;import java.util.Map;import net.sf.json.JSONObject;public class Demo { public static final String DEF_CHATSET = "UTF-8"; public static final int DEF_CONN_TIMEOUT = 30000; public static final int DEF_READ_TIMEOUT = 30000; public static String userAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"; public static void mobileQuery(){ String result =null; String url ="http://api.monkeyapi.com";//请求接口地址 Map params = new HashMap();//请求参数 params.put("appkey" , "appkey");//您申请的APPKEY params.put("url" , "www.monkeyapi.com");//需要查询的网站 try { result = net(url, params, "GET"); JSONObject object = JSONObject.fromObject(result); if(object.getInt("error_code")==0){ System.out.println(object.get("result")); }else{ System.out.println(object.get("error_code")+":"+object.get("reason")); } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { } /** * * @param strUrl 请求地址 * @param params 请求参数 * @param method 请求方法 * @return 网络请求字符串 * @throws Exception */ public static String net(String strUrl, Map params,String method) throws Exception { HttpURLConnection conn = null; BufferedReader reader = null; String rs = null; try { StringBuffer sb = new StringBuffer(); if(method==null || method.equals("GET")){ strUrl = strUrl+"?"+urlencode(params); } URL url = new URL(strUrl); conn = (HttpURLConnection) url.openConnection(); if(method==null || method.equals("GET")){ conn.setRequestMethod("GET"); }else{ conn.setRequestMethod("POST"); conn.setDoOutput(true); } conn.setRequestProperty("User-agent", userAgent); conn.setUseCaches(false); conn.setConnectTimeout(DEF_CONN_TIMEOUT); conn.setReadTimeout(DEF_READ_TIMEOUT); conn.setInstanceFollowRedirects(false); conn.connect(); if (params!= null && method.equals("POST")) { try { DataOutputStream out = new DataOutputStream(conn.getOutputStream()); out.writeBytes(urlencode(params)); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } InputStream is = conn.getInputStream(); reader = new BufferedReader(new InputStreamReader(is, DEF_CHATSET)); String strRead = null; while ((strRead = reader.readLine()) != null) { sb.append(strRead); } rs = sb.toString(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { reader.close(); } if (conn != null) { conn.disconnect(); } } return rs; } //将map型转为请求参数型 public static String urlencode(Map data) { StringBuilder sb = new StringBuilder(); for (Map.Entry i : data.entrySet()) { try { sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue()+"","UTF-8")).append("&"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return sb.toString(); }}