package cn.bidaround.ytcore.util; import java.io.File; import java.net.HttpURLConnection; import java.net.URL; import android.content.Context; import android.text.TextUtils; import cn.bidaround.ytcore.YtCore; import cn.bidaround.ytcore.data.KeyInfo; import cn.bidaround.ytcore.data.ShareData; import cn.bidaround.ytcore.data.YtPlatform; /** * ShareData数据检测 * * <h1>检测项目</h1> * <li>除纯文字分享外,其他平台检测图片路径、url,本地图片是否存在,是否可正常打开,网络图片路径是否可正常访问 * <li>文字分享检测文字、图片分享检测图片设置、音乐分享检测音乐的URL是否有效、视频分享检测视频URL是否有效 * <li>qq、微信、易信分享检测target url(必须设置) * <hr> * <li>检测过程中存在问题将以<b><font color=red>YouTui</font></b>为tag,警告或者错误的方式提示在LogCat * <hr> * * <li>检测分享平台是否可以接受该分享类型 * @author youtui */ public class CheckShareData { private static final String TAG = "YouTui"; public static void check(final ShareData shareData){ if(!YtCore.getInstance().isCheckConfig()) return; YtLog.w("YouTui", "):>开始友推数据检测..."); new Thread(new Runnable() { @Override public void run() { if(checkShareData(shareData) && checkShareDataIsAppShare(shareData)){ boolean result = true; // 除纯文字分享外,其他分享都要设置图片 boolean checkImage = true; if(shareData.getShareType() == ShareData.SHARETYPE_TEXT){ checkImage = false; if(!checkShareDataText(shareData)) result = false; } else if(shareData.getShareType() == ShareData.SHARETYPE_IMAGEANDTEXT){ if(!checkShareDataText(shareData)) result = false; } else if(shareData.getShareType() == ShareData.SHARETYPE_MUSIC){ if(!checkShareDataMusic(shareData)) result = false; } else if(shareData.getShareType() == ShareData.SHARETYPE_VIDEO){ if(!checkShareDataVideo(shareData)) result = false; } if(checkImage && !checkShareDataImage(shareData)) result = false; //qq、qq空间、微信、微信好友、微信收藏、易信、易信朋友圈分享时,必须指定target url if(TextUtils.isEmpty(shareData.getTargetUrl())) YtLog.e(TAG, "code:1020;Find the target url is null, can't share to template(Wechat、WechatCircle、" + "WechatFavorite、QQ、QQZone、Yixin、YixinCircle、QRCode)"); else if(!checkUrl(shareData.getTargetUrl())) YtLog.e(TAG, "code:1021;The target url is invalid"); if(result) YtLog.i(TAG, "Check ShareData not found error"); } } }).start(); } private static boolean checkFile(String path){ File file = new File(path); return file.exists() && file.canRead(); } private static boolean checkShareDataIsAppShare(ShareData mShareData){ if(mShareData.isAppShare()){ YtLog.e(TAG, "code:1009;Check error because the sharedata object isAppShare"); return false; } return true; } private static boolean checkShareData(ShareData mShareData){ if(mShareData == null){ YtLog.e(TAG, "code:1010;The sharedata object is null"); return false; } return true; } private static boolean checkShareDataVideo(ShareData mShareData){ if(TextUtils.isEmpty(mShareData.getVideoUrl())){ YtLog.e(TAG, "code:1011;ShareData the 'videoUrl' value is null, please call ShareData.setVideoUrl(String)"); return false; } if(!checkUrl(mShareData.getVideoUrl())){ YtLog.w(TAG, "code:1012;The video url is invalid"); return false; } return true; } private static boolean checkShareDataMusic(ShareData mShareData){ if(TextUtils.isEmpty(mShareData.getMusicUrl())){ YtLog.e(TAG, "code:1013;ShareData the 'musicUrl' value is null, please call ShareData.setMusicUrl(String)"); return false; } if(!checkUrl(mShareData.getMusicUrl())){ YtLog.w(TAG, "code:1014;The music url is invalid"); return false; } return true; } private static boolean checkShareDataText(ShareData mShareData){ if(TextUtils.isEmpty(mShareData.getText())){ YtLog.e(TAG, "code:1015;ShareData the 'text' value is null, please call ShareData.setText(String)"); return false; } return true; } private static boolean checkShareDataImage(ShareData mShareData){ if(TextUtils.isEmpty(mShareData.getImagePath()) && TextUtils.isEmpty(mShareData.getImageUrl())){ YtLog.e(TAG, "code:1016;The 'imagePath/imageUrl' value is null," + " please call ShareData.setImagePath(String) or ShareData.setImageUrl(String)"); } else if(!TextUtils.isEmpty(mShareData.getImagePath())){ if(!checkFile(mShareData.getImagePath())) YtLog.e(TAG, "code:1018;The image path("+mShareData.getImagePath()+") is not exist or can not read"); else return true; } else if(!TextUtils.isEmpty(mShareData.getImageUrl())){ if(!checkUrl(mShareData.getImageUrl())){ YtLog.w(TAG, "code:1019;The image url("+mShareData.getImageUrl()+") is invalid"); } else return true; } return false; } private static boolean checkUrl(String url){ try { HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection(); return conn.getResponseCode() == 200 ; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 判断该分享平台是否支持该分享的类型 * @param platform * @param shareType ShareData.getShareType() * @return */ public static void checkYtPlatForm(Context context, YtPlatform platform , int shareType){ // QQ分享平台不支持视频分享 if(platform == YtPlatform.PLATFORM_QQ && shareType == ShareData.SHARETYPE_VIDEO){ showLog("QQ", "video"); } // QQ空间分享平台不支持视频、音乐分享 else if(platform == YtPlatform.PLATFORM_QZONE && (shareType == ShareData.SHARETYPE_VIDEO || shareType == ShareData.SHARETYPE_MUSIC)){ showLog("QZone", "video and music"); } // 新浪微博分享平台不支持的平台 else if(platform == YtPlatform.PLATFORM_SINAWEIBO ){ // 页面分享不支持纯图片、视频、音乐分享 if("true".equals(KeyInfo.getKeyValue(context, YtPlatform.PLATFORM_SINAWEIBO, "IsWebShare"))){ if(shareType == ShareData.SHARETYPE_VIDEO || shareType == ShareData.SHARETYPE_MUSIC || shareType == ShareData.SHARETYPE_IMAGE){ showLog("SinaWB", "pure image、video and music"); } } // 客户端分享不支持纯图片 else{ if(shareType == ShareData.SHARETYPE_IMAGE) showLog("SinaWB", "pure image"); } } // 腾讯微博分享平台只支持纯文字、图文分享 else if(platform == YtPlatform.PLATFORM_TENCENTWEIBO && shareType != ShareData.SHARETYPE_TEXT && shareType != ShareData.SHARETYPE_IMAGEANDTEXT){ showLog("TencentWeibo", "pure image、video and music"); } // 人人网分享平台只支持纯文字、图文分享 else if(platform == YtPlatform.PLATFORM_RENREN && shareType != ShareData.SHARETYPE_TEXT && shareType != ShareData.SHARETYPE_IMAGEANDTEXT){ showLog("Renren", "pure image、video and music"); } } private static void showLog(String platform , String type){ YtLog.e(TAG, "code:1024; The Platform of " + platform + " do not support sharing type of "+type); } }