library qm_tj; import 'dart:convert'; import 'src/db.dart'; import 'src/http.dart'; import 'package:crypto/crypto.dart' as crypto; class QMTJ { static DB _db; static String _appStartUpId; static Future<bool> ready; static bool isDebug = false; static void debug() { isDebug = true; } static init() { _appStartUpId = _md5(_getDateNow().toString()); ready = new Future<bool>(() async { _db = new DB(); await _db.init(); List<Map> list = await _db.db.query("page_tj"); print("+++++++++++++++++++++++++++++${list.length}"); List<String> ids = [list[0]['id'],list[1]['id'],list[2]['id']]; List<Map> list2 = await _db.db .rawQuery("select * FROM page_tj where id in(\"${ids.join('","')}\")")"); print("++++++++++++$ids+++++++++++++++++${list2.length}+++++${"select * FROM page_tj where id in(\"${ids.join('","')}\")"}"); return true; }); } /// APP 启动 static void appStart({int source, Map<String, dynamic> extras}) async { int type = 1; int disappearTime = 0; int appearTime = _getDateNow(); String id = _appStartUpId; Map<String, dynamic> map = { "id": id, "type": type, "source": source, "disappear_time": disappearTime, "appear_time": appearTime, "extras": json.encode(extras), }; await ready; log("appStart", map); await _db.db.insert("app_tj", map); } /// APP 可见 static void appAppear({int source, Map<String, dynamic> extras}) async { // APP进入前台,重新生成启动id _appStartUpId = _md5(_getDateNow().toString()); int type = 2; int disappearTime = 0; int appearTime = _getDateNow(); String id = _appStartUpId; Map<String, dynamic> map = { "id": id, "type": type, "source": source, "disappear_time": disappearTime, "appear_time": appearTime, "extras": json.encode(extras), }; await ready; log("appAppear", map); await _db.db.insert("app_tj", map); } /// APP 不可见 static void appDisappear() async { int disappearTime = _getDateNow(); Map<String, dynamic> map = { "id": _appStartUpId, "disappear_time": disappearTime, }; await ready; log("appDisappear", map); _db.db.update("app_tj", {"disappear_time": disappearTime}, where: "id = ? and disappear_time = 0", whereArgs: [_appStartUpId]); } /// PAGE 可见 static void pageAppear( {int source, String pageId, String lastPageId, Map<String, dynamic> extras}) async { String extrasStr = json.encode(extras); String id = _md5("${pageId}_${lastPageId}_$extrasStr"); int disappearTime = 0; int appearTime = _getDateNow(); Map<String, dynamic> map = { "id": id, "source": source, "page_id": pageId, "last_page_id": lastPageId, "appear_time": appearTime, "disappear_time": disappearTime, "extras": extrasStr, }; await ready; log("pageAppear", map); await _db.db.insert("page_tj", map); } /// PAGE 不可见 static void pageDisappear( {String pageId, String lastPageId, Map<String, dynamic> extras}) async { String extrasStr = json.encode(extras); String id = _md5("${pageId}_${lastPageId}_$extrasStr"); int disappearTime = _getDateNow(); Map<String, dynamic> map = { "id": id, "page_id": pageId, "last_page_id": lastPageId, "disappear_time": disappearTime, "extras": extrasStr, }; await ready; log("pageDisappear", map); await _db.db.update( "page_tj", { "disappear_time": disappearTime, }, where: "id = ? and disappear_time = 0", whereArgs: [id]); } /// 点击 /// [pageId] 页面id /// [clickId] 点击id /// [extras] 点击参数 static void tap( {int source, String pageId, String clickId, Map<String, dynamic> extras}) async { int clickTime = _getDateNow(); String extrasStr = json.encode(extras); String id = _md5("${pageId}_${clickId}_${extrasStr}_${clickTime}"); Map<String, dynamic> map = { "id": id, "source": source, "page_id": pageId, "click_id": clickId, "click_time": clickTime, "extras": extrasStr, }; await ready; log("tap", map); await _db.db.insert("tap_tj", map); } /// 曝光 /// [pageId] 页面id /// [exposureId] 曝光id /// [extras] 曝光参数 static void exposure( {int source, String pageId, String exposureId, Map<String, dynamic> extras}) async { int exposureTime = _getDateNow(); String extrasStr = json.encode(extras); String id = _md5("${pageId}_${exposureId}_${extrasStr}_${exposureTime}"); Map<String, dynamic> map = { "id": id, "source": source, "page_id": pageId, "exposure_id": exposureId, "exposure_time": exposureTime, "extras": extrasStr, }; await ready; log("exposure", map); await _db.db.insert("exposure_tj", map); } /// 获取当前时间戳,单位:秒 static int _getDateNow() { int now = (DateTime.now().millisecondsSinceEpoch / 1000).floor(); return now; } // md5编码 static String _md5(String data) { var bytes = utf8.encode(data); var digest = crypto.md5.convert(bytes); return digest.toString(); } static void log(String type, Map<String, dynamic> map) { if (!isDebug) { return; } print("$type=======================s===========================$type"); print(map); print("$type=======================e===========================$type"); } }