import 'package:flutter/services.dart';
import 'dart:convert';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:adpopcornssp_flutter/adpopcornssp_flutter.dart';
class AdPopcornInAppWebViewBridgeHandler {
InAppWebViewController? _webViewController;
AdPopcornInAppWebViewBridgeHandler();
void setWebViewController(InAppWebViewController controller) {
_webViewController = controller;
}
String returnMessageFormat(String eventName, Map<String, dynamic> eventData) {
final messageMap = {
"EventName": eventName,
"Data": jsonEncode(eventData),
};
return jsonEncode(messageMap);
}
String publishEvent(String functionName, String data) {
final jsonStringLiteral = jsonEncode(data);
return """
(function() {
try {
const event = new CustomEvent("$functionName", {
detail: { data: $jsonStringLiteral }
});
window.dispatchEvent(event);
} catch(e) {
console.error('Error dispatching event:', e);
}
})();
""";
}
void _handleNativeEvent(String data) {
if (_webViewController != null) {
_webViewController!.evaluateJavascript(
source: publishEvent("NativeEvent", data),
);
}
}
void registerJavaScriptHandlers(InAppWebViewController controller) {
_webViewController = controller;
controller.addJavaScriptHandler(
handlerName: 'init',
callback: (args) {
String appKey = args[0] as String;
AdPopcornSSP.init(appKey);
AdPopcornSSP.onInitializeListener = () {
_handleNativeEvent(returnMessageFormat("AdPopcornSSPSDKDidInitialize", {}));
};
return null;
},
);
controller.addJavaScriptHandler(
handlerName: 'setUserId',
callback: (args) {
String userId = args[0] as String;
AdPopcornSSP.setUserId(userId);
return null;
},
);
controller.addJavaScriptHandler(
handlerName: 'loadInterstitial',
callback: (args) {
String appKey = args[0] as String;
String placementId = args[1] as String;
AdPopcornSSP.loadInterstitial(appKey, placementId);
AdPopcornSSP.interstitialAdLoadSuccessListener = (placementId) {
final dataJson = {
"placementId": placementId
};
print('[AdPopcornSSP] interstitialAdLoadSuccessListener called: $placementId');
_handleNativeEvent(returnMessageFormat("APSSPInterstitialAdLoadSuccess", dataJson));
};
AdPopcornSSP.interstitialAdLoadFailListener = (placementId, errorCode) {
final dataJson = {
"placementId": placementId,
"errorCode": errorCode
};
_handleNativeEvent(returnMessageFormat("APSSPInterstitialAdLoadFail", dataJson));
};
print('[AdPopcornSSP] loadInterstitial called: $placementId');
return null;
},
);
controller.addJavaScriptHandler(
handlerName: 'showInterstitial',
callback: (args) {
String appKey = args[0] as String;
String placementId = args[1] as String;
AdPopcornSSP.showInterstitial(appKey, placementId);
AdPopcornSSP.interstitialAdShowSuccessListener = (placementId) {
final dataJson = {
"placementId": placementId
};
_handleNativeEvent(returnMessageFormat("APSSPInterstitialAdShowSuccess", dataJson));
};
AdPopcornSSP.interstitialAdShowFailListener = (placementId) {
final dataJson = {
"placementId": placementId
};
_handleNativeEvent(returnMessageFormat("APSSPInterstitialAdShowFail", dataJson));
};
AdPopcornSSP.interstitialAdClickedListener = (placementId) {
final dataJson = {
"placementId": placementId
};
_handleNativeEvent(returnMessageFormat("APSSPInterstitialAdClicked", dataJson));
};
AdPopcornSSP.interstitialAdClosedListener = (placementId) {
final dataJson = {
"placementId": placementId
};
_handleNativeEvent(returnMessageFormat("APSSPInterstitialAdClosed", dataJson));
};
return null;
},
);
controller.addJavaScriptHandler(
handlerName: 'loadInterstitialVideo',
callback: (args) {
String appKey = args[0] as String;
String placementId = args[1] as String;
AdPopcornSSP.loadInterstitialVideo(appKey, placementId);
AdPopcornSSP.interstitialVideoAdLoadSuccessListener = (placementId) {
final dataJson = {
"placementId": placementId
};
_handleNativeEvent(returnMessageFormat("APSSPInterstitialVideoAdLoadSuccess", dataJson));
};
AdPopcornSSP.interstitialVideoAdLoadFailListener = (placementId, errorCode) {
final dataJson = {
"placementId": placementId,
"errorCode": errorCode
};
_handleNativeEvent(returnMessageFormat("APSSPInterstitialVideoAdLoadFail", dataJson));
};
return null;
},
);
controller.addJavaScriptHandler(
handlerName: 'showInterstitialVideo',
callback: (args) {
String appKey = args[0] as String;
String placementId = args[1] as String;
AdPopcornSSP.showInterstitialVideo(appKey, placementId);
AdPopcornSSP.interstitialVideoAdShowSuccessListener = (placementId) {
final dataJson = {
"placementId": placementId
};
_handleNativeEvent(returnMessageFormat("APSSPInterstitialVideoAdShowSuccess", dataJson));
};
AdPopcornSSP.interstitialVideoAdShowFailListener = (placementId) {
final dataJson = {
"placementId": placementId
};
_handleNativeEvent(returnMessageFormat("APSSPInterstitialVideoAdShowFail", dataJson));
};
AdPopcornSSP.interstitialVideoAdClosedListener = (placementId) {
final dataJson = {
"placementId": placementId
};
_handleNativeEvent(returnMessageFormat("APSSPInterstitialVideoAdClosed", dataJson));
};
return null;
},
);
controller.addJavaScriptHandler(
handlerName: 'loadRewardVideo',
callback: (args) {
String appKey = args[0] as String;
String placementId = args[1] as String;
AdPopcornSSP.loadRewardVideo(appKey, placementId);
AdPopcornSSP.rewardVideoAdLoadSuccessListener = (placementId) {
final dataJson = {
"placementId": placementId
};
_handleNativeEvent(returnMessageFormat("APSSPRewardVideoAdLoadSuccess", dataJson));
};
AdPopcornSSP.rewardVideoAdLoadFailListener = (placementId, errorCode) {
final dataJson = {
"placementId": placementId,
"errorCode": errorCode
};
_handleNativeEvent(returnMessageFormat("APSSPRewardVideoAdLoadFail", dataJson));
};
return null;
},
);
controller.addJavaScriptHandler(
handlerName: 'showRewardVideo',
callback: (args) {
String appKey = args[0] as String;
String placementId = args[1] as String;
AdPopcornSSP.showRewardVideo(appKey, placementId);
AdPopcornSSP.rewardVideoAdShowSuccessListener = (placementId) {
final dataJson = {
"placementId": placementId
};
_handleNativeEvent(returnMessageFormat("APSSPRewardVideoAdShowSuccess", dataJson));
};
AdPopcornSSP.rewardVideoAdShowFailListener = (placementId) {
final dataJson = {
"placementId": placementId
};
_handleNativeEvent(returnMessageFormat("APSSPRewardVideoAdShowFail", dataJson));
};
AdPopcornSSP.rewardVideoAdClosedListener = (placementId) {
final dataJson = {
"placementId": placementId
};
_handleNativeEvent(returnMessageFormat("APSSPRewardVideoAdClosed", dataJson));
};
AdPopcornSSP.rewardVideoAdCompletedListener = (placementId, adNetworkNo, completed) {
final dataJson = {
"placementId": placementId,
"adNetworkNo": adNetworkNo,
"completed": completed
};
_handleNativeEvent(returnMessageFormat("APSSPRewardVideoAdPlayCompleted", dataJson));
};
AdPopcornSSP.rewardPlusCompletedListener = (result, resultCode, reward) {
final dataJson = {
"placementId": placementId
};
_handleNativeEvent(returnMessageFormat("APSSPRewardPlusCompleted", dataJson));
};
return null;
},
);
controller.addJavaScriptHandler(
handlerName: 'loadVideoMix',
callback: (args) {
String appKey = args[0] as String;
String placementId = args[1] as String;
AdPopcornSSP.loadVideoMix(appKey, placementId);
AdPopcornSSP.videoMixAdLoadSuccessListener = (placementId) {
final dataJson = {
"placementId": placementId
};
_handleNativeEvent(returnMessageFormat("APSSPVideoMixAdLoadSuccess", dataJson));
};
AdPopcornSSP.videoMixAdLoadFailListener = (placementId, errorCode) {
final dataJson = {
"placementId": placementId,
"errorCode": errorCode
};
_handleNativeEvent(returnMessageFormat("APSSPVideoMixAdLoadFail", dataJson));
};
return null;
},
);
controller.addJavaScriptHandler(
handlerName: 'showVideoMix',
callback: (args) {
String appKey = args[0] as String;
String placementId = args[1] as String;
AdPopcornSSP.showVideoMix(appKey, placementId);
AdPopcornSSP.videoMixAdShowSuccessListener = (placementId) {
final dataJson = {
"placementId": placementId
};
_handleNativeEvent(returnMessageFormat("APSSPVideoMixAdShowSuccess", dataJson));
};
AdPopcornSSP.videoMixAdShowFailListener = (placementId) {
final dataJson = {
"placementId": placementId
};
_handleNativeEvent(returnMessageFormat("APSSPVideoMixAdShowFail", dataJson));
};
AdPopcornSSP.videoMixAdClosedListener = (placementId, campaignType) {
final dataJson = {
"placementId": placementId,
"campaignType": campaignType
};
_handleNativeEvent(returnMessageFormat("APSSPVideoMixAdClosed", dataJson));
};
AdPopcornSSP.videoMixAdCompletedListener = (placementId) {
final dataJson = {
"placementId": placementId
};
_handleNativeEvent(returnMessageFormat("APSSPVideoMixAdPlayCompleted", dataJson));
};
AdPopcornSSP.videoMixAdClickedListener = (placementId) {
final dataJson = {
"placementId": placementId
};
_handleNativeEvent(returnMessageFormat("APSSPVideoMixAdClicked", dataJson));
};
return null;
},
);
}
}