hasAdBlocker static method

FutureEither<bool> hasAdBlocker()

Implementation

static FutureEither<bool> hasAdBlocker() async {
  var preferences = await SharedPreferences.getInstance();
  // last check was less than 24 hours ago
  if (preferences.containsKey('ana.adBlockerCheck') &&
      preferences.getInt('ana.adBlockerCheck')! > DateTime.now().millisecondsSinceEpoch - 86400000) {
    return right(preferences.getBool('ana.adBlocker')!);
  }

  final List<String> adServers = [
    "pagead2.googlesyndication.com",
    "googleads.g.doubleclick.net",
    "googleads4.g.doubleclick.net",
    "googleads.g.doubleclick.net",
    "graph.facebook.com",
  ];
  var counter = 0;

  for (var adServer in adServers) {
    var uri = Uri.https(adServer, '');
    try {
      var response = await HttpClient().getUrl(uri);
      var responseBytes = await response.done;
      response.close();
      if (responseBytes.statusCode == 200) {
        counter++;
      }
    } on HandshakeException catch (e) {
      preferences.setBool('ana.adBlocker', counter == adServers.length);
      preferences.setInt('ana.adBlockerCheck', DateTime.now().millisecondsSinceEpoch);
      return right(true);
    }
  }
  preferences.setBool('ana.adBlocker', counter == adServers.length);
  preferences.setInt('ana.adBlockerCheck', DateTime.now().millisecondsSinceEpoch);
  if (counter == adServers.length) {
    return right(false);
  } else {
    return right(true);
  }
}