billyyoyo преди 6 години
родител
ревизия
296a38ef63

+ 3 - 0
app/src/main/java/com/sheep/gamegroup/model/api/ApiService.java

@@ -1994,4 +1994,7 @@ public interface ApiService {
     @POST("app/advertising_v2/create/statistics")
     Observable<BaseMessage> statAdAction(@Body JSONObject json);
 
+    @POST("app/download_errlog/add")
+    Observable<BaseMessage> statGameDownloadError(@Query("game_id") String gameId, @Query("down_url") String downloadUrl, @Query("cdn_ip") String ip, @Query("client_md5") String clientMd5, @Query("server_md5") String serverMd5);
+
 }

+ 1 - 1
app/src/main/java/com/sheep/gamegroup/model/entity/Article.java

@@ -280,7 +280,7 @@ public class Article {
     }
 
     public Article convertFrom(SheepAd ad) {
-        type = -1;
+        type = -ad.getUser_type();
         title = ad.getName();
         pictures = ad.getAd_img();
         memo = ad;

+ 18 - 0
app/src/main/java/com/sheep/gamegroup/util/CommonUtil.java

@@ -126,6 +126,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers;
 import io.reactivex.schedulers.Schedulers;
 import io.reactivex.subjects.Subject;
 import okhttp3.Call;
+import retrofit2.http.Query;
 import rx.functions.Action1;
 import rx.functions.Action2;
 
@@ -2399,6 +2400,23 @@ public class CommonUtil {
                 });
     }
 
+    public void statGameDownloadError(String gameId, String downloadUrl, String ip, String clientMd5, String serverMd5){
+        SheepApp.getInstance().getNetComponent().getApiService().statGameDownloadError(gameId, downloadUrl, ip, clientMd5, serverMd5)
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
+                    @Override
+                    public void onNext(BaseMessage baseMessage) {
+
+                    }
+
+                    @Override
+                    public void onError(BaseMessage baseMessage) {
+
+                    }
+                });
+    }
+
     /**
      * 获取任务记录列表
      */

+ 0 - 31
app/src/main/java/com/sheep/gamegroup/util/ViewUtil.java

@@ -1768,34 +1768,6 @@ public class ViewUtil {
                     });
                 }
             }
-//            RxjavaCountDownTimer timer = null;
-//            if (advertising.getShow_time() > 0) {
-//                ad_skip.setVisibility(View.VISIBLE);
-//                dialog.setCancelable(false);
-//                timer = RxjavaCountDownTimer.getInstance(BuildConfig.DEBUG ? 1 : advertising.getShow_time())
-//                        .setOnTickListener(new RxjavaCountDownTimer.OnTickListener() {
-//                            @Override
-//                            public void onFinish() {
-//                                dialog.setCancelable(true);
-//                                dialog_close.setVisibility(View.VISIBLE);
-//                                ad_skip.setEnabled(true);
-//                                ad_skip.setVisibility(View.GONE);
-//                            }
-//
-//                            @Override
-//                            public void onTicker(long time) {
-//                                dialog.setCancelable(false);
-//                                dialog_close.setVisibility(View.GONE);
-//                                ad_skip.setEnabled(false);
-//                                ad_skip.setText(activity.getString(R.string.tip_skip, time));
-//                            }
-//                        }).start();
-//            } else {
-//                ad_skip.setVisibility(View.GONE);
-//            }
-//
-//            final RxjavaCountDownTimer finalTimer = timer;
-
             dialog_close.setOnClickListener(new View.OnClickListener() {
                 @Override
                 public void onClick(View v) {
@@ -1814,9 +1786,6 @@ public class ViewUtil {
             dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
                 @Override
                 public void onDismiss(DialogInterface dialogInterface) {
-//                    if (finalTimer != null) {
-//                        finalTimer.clear();
-//                    }
                     ACache aCache = ACache.get(SheepApp.getInstance());
                     aCache.put(advertising.getAd_img(), String.format(Locale.CHINA, "%d;%d", dialog_center_ll.getWidth(), dialog_center_ll.getHeight()));
                     Jump2View.getInstance().tryShowYfShopAskDialog(activity);

+ 9 - 2
app/src/main/java/com/sheep/gamegroup/view/activity/ActMain.java

@@ -46,6 +46,7 @@ import com.sheep.gamegroup.util.DataUtil;
 import com.sheep.gamegroup.util.DownloadUtil;
 import com.sheep.gamegroup.util.Jump2View;
 import com.sheep.gamegroup.util.ListUtil;
+import com.sheep.gamegroup.util.LogUtil;
 import com.sheep.gamegroup.util.MainTab;
 import com.sheep.gamegroup.util.SysAppUtil;
 import com.sheep.gamegroup.util.TestUtil;
@@ -67,7 +68,12 @@ import org.greenrobot.eventbus.EventBus;
 import org.greenrobot.eventbus.Subscribe;
 
 import java.io.File;
+import java.io.InputStream;
 import java.lang.ref.WeakReference;
+import java.lang.reflect.Field;
+import java.net.InetSocketAddress;
+import java.net.URL;
+import java.net.URLConnection;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
@@ -77,6 +83,7 @@ import butterknife.BindView;
 import io.reactivex.Observable;
 import io.reactivex.android.schedulers.AndroidSchedulers;
 import io.reactivex.schedulers.Schedulers;
+import okhttp3.Route;
 import rx.functions.Action1;
 
 import static android.content.Intent.ACTION_PACKAGE_ADDED;
@@ -352,9 +359,9 @@ public class ActMain extends BaseActYmPermissionCheck {
         mLastBackTime = System.currentTimeMillis();
     }
 
-    private void exit(boolean backToHome){
+    private void exit(boolean backToHome) {
         releaseInputMethodRefView();
-        if(backToHome) {
+        if (backToHome) {
             Intent intent = new Intent();
             intent.setAction(Intent.ACTION_MAIN);// "android.intent.action.MAIN"
             intent.addCategory(Intent.CATEGORY_HOME); //"android.intent.category.HOME"

+ 8 - 0
app/src/main/java/com/sheep/gamegroup/view/activity/SplashAct.java

@@ -39,6 +39,9 @@ import com.sheep.jiuyan.samllsheep.R;
 import com.sheep.jiuyan.samllsheep.SheepApp;
 import com.sheep.jiuyan.samllsheep.utils.SpUtils;
 
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -64,6 +67,8 @@ public class SplashAct extends BaseActivity {
     TextView splash_skip;
     @BindView(R.id.splash_video_view)
     VideoView splash_video_view;
+    @BindView(R.id.ad_flag)
+    View ad_flag;
     private boolean goLink;//跳转到了广告对应的页面
 
     private RxjavaCountDownTimer timer;
@@ -177,6 +182,9 @@ public class SplashAct extends BaseActivity {
                 splash_video_view.requestFocus();
             }
         }
+        if (ad.getUser_type() == 2) {
+            ViewUtil.setVisibility(ad_flag, true);
+        }
 
         mHandler.removeMessages(0);
         if (ad.getShow_time() > 0) {

+ 3 - 2
app/src/main/java/com/sheep/gamegroup/view/fragment/FgtFindChild.java

@@ -355,7 +355,7 @@ public class FgtFindChild extends BaseListFragment5<Article> {
             if (FgtFindChild.this.type == -1) {
                 return R.layout.find_item_game_news;
             } else {
-                if (type == -1) {
+                if (type == -1 || type == -2) {
                     return R.layout.find_item_ad;
                 } else if (type == 2 && newsConverter != null) {
                     return R.layout.find_item_news;
@@ -451,7 +451,8 @@ public class FgtFindChild extends BaseListFragment5<Article> {
             View rootConvertView = holder.itemView;
             TextView find_item_name = (TextView) rootConvertView.findViewById(R.id.find_item_name);
             ImageView find_item_iv = (ImageView) rootConvertView.findViewById(R.id.find_item_iv);
-
+            View find_item_placement = rootConvertView.findViewById(R.id.find_item_placement);
+            ViewUtil.setVisibility(find_item_placement, item.getType() == -2);
             ViewUtil.setText(find_item_name, item.getTitle());
             ViewUtil.setImage(find_item_iv, item.getPictures());
             item.removeNullTag();

+ 3 - 1
app/src/main/java/com/sheep/gamegroup/view/fragment/FgtSmallSheep.java

@@ -866,7 +866,7 @@ public class FgtSmallSheep extends BaseFragment implements SmallSheepContract.Vi
             });
         }
         pagePresenter.homeList();//首页list
-        if(goodsRecommendsBarHelper!=null){
+        if (goodsRecommendsBarHelper != null) {
             goodsRecommendsBarHelper.refresh();
         }
 
@@ -929,6 +929,8 @@ public class FgtSmallSheep extends BaseFragment implements SmallSheepContract.Vi
             @Override
             public void convert(ViewHolder holder, final SheepAd item) {
                 ImageView imageView = holder.getView(R.id.image);
+                View adFlagView = holder.getView(R.id.ad_flag);
+                ViewUtil.setVisibility(adFlagView, item.getUser_type() == 2);
                 GlideImageLoader.setImage(imageView, item.getAd_img());
                 imageView.setOnClickListener(view -> AdHelper.goAdLink(getActivity(), item));
             }

+ 62 - 0
app/src/main/java/com/sheep/jiuyan/samllsheep/service/DownloadService.java

@@ -40,9 +40,11 @@ import com.sheep.gamegroup.greendao.DDProviderHelper;
 import com.sheep.gamegroup.greendao.download.DownLoadInfo;
 import com.sheep.gamegroup.model.entity.Applications;
 import com.sheep.gamegroup.model.entity.TaskEty;
+import com.sheep.gamegroup.util.CommonUtil;
 import com.sheep.gamegroup.util.DownloadUtil;
 import com.sheep.gamegroup.util.FileUtil;
 import com.sheep.gamegroup.util.LogUtil;
+import com.sheep.gamegroup.util.Md5Util;
 import com.sheep.gamegroup.util.StringUtils;
 import com.sheep.gamegroup.util.TestUtil;
 import com.sheep.gamegroup.view.activity.NotificationsUtils;
@@ -53,12 +55,19 @@ import com.sheep.jiuyan.samllsheep.utils.G;
 import org.greenrobot.eventbus.EventBus;
 
 import java.io.File;
+import java.io.InputStream;
+import java.lang.reflect.Field;
+import java.net.InetSocketAddress;
+import java.net.URL;
+import java.net.URLConnection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import okhttp3.Route;
+
 import static com.sheep.jiuyan.samllsheep.utils.ClassFileHelper.DIR;
 
 /**
@@ -206,6 +215,7 @@ public class DownloadService extends Service {
                                 }
                                 ApkUtils.installApk(getApplicationContext(), task.getFile().getAbsolutePath());
                                 DownloadNotification.progress(task.getUrl(), -1l);
+                                checkMd(downLoadInfo, task);
                             }
                             break;
                         case PRE_ALLOCATE_FAILED://预先分配失败
@@ -265,6 +275,58 @@ public class DownloadService extends Service {
         }
     };
 
+    private void checkMd(DownLoadInfo info, DownloadTask task) {
+        new Thread(() -> {
+            try {
+                String clientMd5 = Md5Util.getFileMD5(task.getFile());
+                String serverMd5 = task.getRedirectLocation().substring(task.getRedirectLocation().lastIndexOf("_") + 1, task.getRedirectLocation().lastIndexOf("."));
+                LogUtil.logE(clientMd5 + "   =   " + serverMd5);
+                if (serverMd5.length() != 32) {
+                    return;
+                }
+//                if (!clientMd5.equals(serverMd5)) {
+                    CommonUtil.getInstance().statGameDownloadError(
+                            info.getMGameID() + "",
+                            task.getRedirectLocation(),
+                            getCdbIp(task.getRedirectLocation()),
+                            clientMd5,
+                            serverMd5);
+//                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            } catch (OutOfMemoryError e) {
+                e.printStackTrace();
+            }
+        }).start();
+    }
+
+    private String getCdbIp(String url) {
+        try {
+            URLConnection conn = new URL(url).openConnection();
+            InputStream in = conn.getInputStream();
+            try {
+                Field delegateField = conn.getClass().getDeclaredField("delegate");
+                delegateField.setAccessible(true);
+                Object delegate = delegateField.get(conn);
+                Field routeField = delegate.getClass().getDeclaredField("route");
+                routeField.setAccessible(true);
+                Object route = routeField.get(delegate);
+                Field inetField = route.getClass().getDeclaredField("inetSocketAddress");
+                inetField.setAccessible(true);
+                InetSocketAddress address = (InetSocketAddress) inetField.get(route);
+                String ip = address.getAddress().getHostAddress();
+                in.close();
+                return ip;
+            } catch (Exception e) {
+                e.printStackTrace();
+                return "";
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            return "";
+        }
+    }
+
     @Nullable
     @Override
     public IBinder onBind(Intent intent) {

+ 12 - 0
app/src/main/res/layout/item_image_full_home_list.xml

@@ -9,4 +9,16 @@
         android:layout_height="wrap_content"
         android:adjustViewBounds="true"
         android:scaleType="fitXY" />
+    <TextView
+        android:id="@+id/ad_flag"
+        android:visibility="gone"
+        android:text="广告"
+        android:textSize="10sp"
+        android:textColor="@color/white"
+        android:layout_alignParentRight="true"
+        android:layout_margin="12dp"
+        android:background="#50000000"
+        android:gravity="center"
+        android:layout_width="30dp"
+        android:layout_height="16dp" />
 </RelativeLayout>

+ 12 - 0
app/src/main/res/layout/splash_activity.xml

@@ -32,4 +32,16 @@
         android:background="@drawable/shape_ash_solid_rectangle_small_tra30"
         android:visibility="gone" />
 
+    <TextView
+        android:id="@+id/ad_flag"
+        android:visibility="gone"
+        android:text="广告"
+        android:textSize="12sp"
+        android:textColor="@color/white"
+        android:layout_margin="12dp"
+        android:background="#50000000"
+        android:gravity="center"
+        android:layout_width="36dp"
+        android:layout_height="20dp" />
+
 </FrameLayout>