Template:iOS NielsenAppSDKJSHandler
From Engineering Client Portal
Using the NielsenAppSDKJSHandler
There could be a scenario in which a browser page, that is already tagged with the Nielsen BSDK, needs to be loaded via a webview. In this situation it is recommended to use the NielsenAppSDKJSHandler which will allow communication between the AppSDK and the BSDK.
This feature is supported in versions 7.2 and above.
Implementation
- Make sure you have the latest NielsenAppApi.framework from Nielsen containing the NielsenAppSDKJSHandler class.
- Add NielsenAppSDKJSHandler instance as web view message handler object conforming to WKScriptMessageHandler protocol with name: "NielsenSDKMsg".
Objective-C:
self.jsAppSDK = [[NielsenAppSDKJSHandler alloc] init];
[self.webView.configuration.userContentController addScriptMessageHandler:self.jsAppSDK name:@"NielsenSDKMsg"];
Swift:
self.jsAppSDK=NielsenAppSDKJSHandler(apiType: "ggPM")
if let jsAppSDK = self.jsAppSDK{
self.webView?.configuration.userContentController.add(jsAppSDK, name: "NielsenSDKMsg")
This will enable listening to BSDK api calls within the APPSDK. Please make sure your Technical Account Manager is aware that you wish to implement this method so a configuration file can be modified on the Nielsen servers; however, there are no changes required to the Browser page.
Example:
The below is an example of opening a webview with the NielsenApp[SDKJSHandler using Swift 5.0
let jsFunctionNativeMessage = "NielsenSDKMsg"
var jsAppSDK: NielsenAppSDKJSHandler?
override func loadView() {
webView = WKWebView()
webView.navigationDelegate = self
view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "https://nielsen.com/index.htm")!
self.jsAppSDK=NielsenAppSDKJSHandler(apiType: "ggPM")
if let jsAppSDK = self.jsAppSDK{
self.webView?.configuration.userContentController.add(jsAppSDK, name: "NielsenSDKMsg")
webView.load(URLRequest(url: url))
webView.allowsBackForwardNavigationGestures = true
}
}
deinit {
if let webView = self.webView {
webView.configuration.userContentController.removeScriptMessageHandler(forName: jsFunctionNativeMessage)
}
self.jsAppSDK = nil
if let webView = self.webView {
webView.removeFromSuperview()
}
self.webView = nil
}
}
Please note: The page you load into the webview cannot have mixed protocol content. For example, if your page is https:// you cannot have any images on the page as http:// or you will encounter errors.