---
agentTools:
  projectIndex: https://docs.nvecta.com/llms.txt
---

# Click Redirection Bridge for In-App WebViews

When you show an **HTML-based in-app message** (banner, modal, survey) inside your app, it’s rendered in a **WebView**. The “click redirection bridge” is a tiny interface that lets the HTML page ask the native app to **open links**, either in the app’s webview, the device browser, or via deep links.

NotifyVisitors exposes this bridge so your HTML can call a simple method on click. No custom native plumbing required.

## What you can do with the bridge

* **Open a web page** (offer pages, T\&Cs, blog posts)
* **Open deep links / app screens** (product page, cart, profile)
* **Pass dynamic data or user tokens**
* **Track click events** through the SDK callbacks

> You’ll typically wire a button or link in your HTML to call the bridge method. The SDK handles the rest and logs the interaction.

## NotifyVisitors Android JS Bridge — Actions & Methods

[block:html]
{
  "html": "<div style=\"width:100%; overflow-x:auto;\">\n  <table aria-label=\"SDK Actions Reference Table\"\n         style=\"border-collapse:collapse; width:100%; font-family:Arial, Helvetica, sans-serif; font-size:15px; table-layout:fixed;\">\n    <colgroup>\n      <col style=\"width:30%;\">\n      <col style=\"width:30%;\">\n      <col style=\"width:40%;\">\n    </colgroup>\n    <thead>\n      <tr>\n        <th scope=\"col\" style=\"background:#f2f2f2; color:#222222; text-align:center; font-weight:700; border:1px solid #e0e0e0; padding:10px 12px;\">Action</th>\n        <th scope=\"col\" style=\"background:#f2f2f2; color:#222222; text-align:center; font-weight:700; border:1px solid #e0e0e0; padding:10px 12px;\">Method</th>\n        <th scope=\"col\" style=\"background:#f2f2f2; color:#222222; text-align:center; font-weight:700; border:1px solid #e0e0e0; padding:10px 12px;\">What It Does</th>\n      </tr>\n    </thead>\n    <tbody>\n      <tr style=\"background:#ffffff;\">\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222;\">Open a native screen (JSON)<br>(added since SDK v5.5.4)</td>\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222; word-break:break-word;\">NV.openInAppScreen(\"click_through_data_as_json_string\")</td>\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222;\">Opens a native screen using a stringified JSON payload (e.g., activity + extras).</td>\n      </tr>\n      <tr style=\"background:#f9f9f9;\">\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222;\">Open a deeplink (JSON)<br>(added since SDK v5.5.4)</td>\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222; word-break:break-word;\">NV.openDeeplink(\"click_through_data_json_string\")</td>\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222;\">Opens a deeplink URL using a stringified JSON payload (optionally with extras).</td>\n      </tr>\n      <tr style=\"background:#ffffff;\">\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222;\">Open a native/app screen (Activity) [deprecated]</td>\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222; word-break:break-word;\">NV.openInApp(\"full_activity_path_as_string\")</td>\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222;\">When an activity is launched using its explicit activity path, allowing the app to navigate directly to a specific Android Activity.</td>\n      </tr>\n      <tr style=\"background:#f9f9f9;\">\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222;\">Open a web page</td>\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222; word-break:break-word;\">NV.openWeb(\"web_url_as_string\")</td>\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222;\">Opens the given URL in the device's default browser (e.g., https://example.com).</td>\n      </tr>\n      <tr style=\"background:#ffffff;\">\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222;\">Launch a third-party app</td>\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222; word-break:break-word;\">NV.openThirdPartyApp(\"app_package_name_path_as_string\")</td>\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222;\">To open a third-party application by its package name or custom URI scheme, allowing seamless handoff to another app.</td>\n      </tr>\n      <tr style=\"background:#f9f9f9;\">\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222;\">Share text</td>\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222; word-break:break-word;\">NV.share(\"shareable_text_as_string\")</td>\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222;\">To share the specified text via the system share sheet, enabling users to send content through messaging or social apps.</td>\n      </tr>\n      <tr style=\"background:#ffffff;\">\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222;\">Start a call</td>\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222; word-break:break-word;\">NV.call(\"mobile_number_as_string\")</td>\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222;\">To initiate a phone call by opening the device dialer prefilled with the specified number.</td>\n      </tr>\n      <tr style=\"background:#f9f9f9;\">\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222;\">Copy to clipboard</td>\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222; word-break:break-word;\">NV.copyToClipboard(\"text_as_string\")</td>\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222;\">To copy the given text to the system clipboard, allowing the user to paste it elsewhere.</td>\n      </tr>\n      <tr style=\"background:#ffffff;\">\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222;\">Don&#8217;t show again</td>\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222; word-break:break-word;\">NV.stopShowAgain()</td>\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222;\">When a specific banner or survey is suppressed, allowing developers to prevent it from being displayed based on custom logic or user preferences.</td>\n      </tr>\n      <tr style=\"background:#f9f9f9;\">\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222;\">Track survey attempt</td>\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222; word-break:break-word;\">NV.surveyAttempt(\"click_through_data\")</td>\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222;\">When the user starts or attempts the survey, allowing developers to track engagement or trigger preliminary actions.</td>\n      </tr>\n      <tr style=\"background:#ffffff;\">\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222;\">Track survey submission</td>\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222; word-break:break-word;\">NV.surveySubmit(\"click_through_data\")</td>\n        <td style=\"border:1px solid #e0e0e0; padding:10px 12px; text-align:left; vertical-align:top; color:#222222;\">Once the survey form is validated and submitted, allowing developers to capture responses and execute any follow-up actions.</td>\n      </tr>\n    </tbody>\n  </table>\n</div>"
}
[/block]

## JS Methods for Actions

Integrate these methods with your HTML template to perform navigation, launch apps, share content, or track survey actions.

### 1. Navigate to a native screen (with JSON payload) \[**Added since v5.5.4)**]

```javascript
const payload = {
    actionUrl: "com.example.app.ui.DetailsActivity",
    callToAction: “1”,
    parameters: {
      nav_screen_attr1: "val1",
      nav_screen_attr2: 100,
      nav_screen_attr3: 123.11,
      nav_screen_attr4: true
    }
};
NV.openInAppScreen(JSON.stringify(payload));
```

For example

```html
<div style="padding: 20px; text-align: center;"><span style="font-size: 25px; display: block;">Refer &amp; Earn<br /><b style="margin-top: 7px;">$10 Credit</b></span> <span style="font-size: 16px; margin-top: 15px; margin-bottom: 7px; padding: 0px; display: block; font-weight: bold;">Hello John,</span>
<p style="font-size: 18px; font-family: arial; line-height: 22px; margin: 0px;">thanks for completing your first booking. Refer your friends &amp; earn $10 credit on your next.</p>
<!-- Bottom-center button --> <button onclick="handleNavClick(); return false;" style="position: absolute; background-color: #fc882c; color: #fff; border: none; border-radius: 20px; padding: 8px 20px; font-family: Arial, sans-serif; font-weight: bold; cursor: pointer;"> Notify Me </button></div>
<script>// <![CDATA[
const payload = {
    actionUrl: "com.example.app.ui.DetailsActivity",
    callToAction: “1”,
    parameters: {
      nav_screen_attr1: "val1",
      nav_screen_attr2: 100,
      nav_screen_attr3: 123.11,
      nav_screen_attr4: true
    }
  };

  function handleNavClick() {
    NV.openInAppScreen(JSON.stringify(payload));
  }
// ]]></script>
```

### 2. Open a deeplink (with JSON payload) \[**Added since v5.5.4)**]

```javascript
const payload = {
    actionUrl: "myapp://product/details?sku=SKU-123",
    callToAction: “1”,
    parameters: {
      nav_screen_attr1: "val1",
      nav_screen_attr2: 100,
      nav_screen_attr3: 123.11,
      nav_screen_attr4: true
    }
};
NV.openDeeplink(JSON.stringify(payload));
```

For example

```html
<div style="padding: 20px; text-align: center;"><span style="font-size: 25px; display: block;">Refer &amp; Earn<br /><b style="margin-top: 7px;">$10 Credit</b></span> <span style="font-size: 16px; margin-top: 15px; margin-bottom: 7px; padding: 0px; display: block; font-weight: bold;">Hello John,</span>
<p style="font-size: 18px; font-family: arial; line-height: 22px; margin: 0px;">thanks for completing your first booking. Refer your friends &amp; earn $10 credit on your next.</p>
<!-- Bottom-center button --> <button onclick="handleNavClick(); return false;" style="position: absolute; background-color: #fc882c; color: #fff; border: none; border-radius: 20px; padding: 8px 20px; font-family: Arial, sans-serif; font-weight: bold; cursor: pointer;"> Notify Me </button></div>
<script>// <![CDATA[
const payload = {
    actionUrl: "myapp://product/details?sku=SKU-123",
    callToAction: “1”,
    parameters: {
      nav_screen_attr1: "val1",
      nav_screen_attr2: 100,
      nav_screen_attr3: 123.11,
      nav_screen_attr4: true
    }
  };

  function handleNavClick() {
    NV.openDeeplink(JSON.stringify(payload));
  }
// ]]></script>
```

> **NOTE:** When using **Option 1** or **Option 2**, make sure to pass the data in the required payload format, as these options expect a well-defined structure for the function call. Further details are mentioned-below:

```json
{
  "actionUrl": "<string>",          // Destination URL or deep-link
  "callToAction": "<string>",    // Unique action identifier
  "parameters": {
     "<key>": "<value>"    // Any additional key–value pairs
  }
}
```

**actionUrl** → is a string (activity path or deep-link).

**callToAction** → You can pass an action value (e.g., 1, 2, 3, or any unique number) to identify which element was clicked.

For example, if a banner contains three buttons, assigning a different action value to each button lets you determine exactly which one the user selected.

**parameters** → is an object containing extra key–value data you want to send.

### 3. Navigate to a native screen (by class path) \[deprecated]

```javascript
// Open a specific Activity by full classpath 
NV.openInApp("com.example.app.ui.MainActivity");
```

For example

```html
<div style="padding: 20px; text-align: center;"><span style="font-size: 25px; display: block;">Refer &amp; Earn<br /><b style="margin-top: 7px;">$10 Credit</b></span> <span style="font-size: 16px; margin-top: 15px; margin-bottom: 7px; padding: 0px; display: block; font-weight: bold;">Hello John,</span>
<p style="font-size: 18px; font-family: arial; line-height: 22px; margin: 0px;">thanks for completing your first booking. Refer your friends &amp; earn $10 credit on your next.</p>
<button onclick="NV.openInApp('com.example.app.ui.MainActivity'); return false;" style="position: absolute; background-color: #fc882c; color: #fff; border: none; border-radius: 20px; padding: 8px 20px; font-family: Arial, sans-serif; font-weight: bold; cursor: pointer;"> Notify Me </button></div>
```

### 4. Open a web URL

```javascript
NV.openWeb(“https://www.example.com/offers”)
```

For example

```html
<div style="padding: 20px; text-align: center;"><span style="font-size: 25px; display: block;">Refer &amp; Earn<br /><b style="margin-top: 7px;">$10 Credit</b></span> <span style="font-size: 16px; margin-top: 15px; margin-bottom: 7px; padding: 0px; display: block; font-weight: bold;">Hello John,</span>
<p style="font-size: 18px; font-family: arial; line-height: 22px; margin: 0px;">thanks for completing your first booking. Refer your friends &amp; earn $10 credit on your next.</p>
<button onclick="NV.openWeb('https://www.example.com/offers'); return false;" style="position: absolute; background-color: #fc882c; color: #fff; border: none; border-radius: 20px; padding: 8px 20px; font-family: Arial, sans-serif; font-weight: bold; cursor: pointer;"> Notify Me </button></div>
```

### 5. Launch a third-party app

```javascript
// Package/Activity path format (varies by app) 
// Examples: 
// "com.maps.app" — package only 
// "com.maps.app/.HomeActivity" — package + activity 
NV.openThirdPartyApp("com.maps.app/.HomeActivity");
```

For example

```html
<div style="padding: 20px; text-align: center;"><span style="font-size: 25px; display: block;">Refer &amp; Earn<br /><b style="margin-top: 7px;">$10 Credit</b></span> <span style="font-size: 16px; margin-top: 15px; margin-bottom: 7px; padding: 0px; display: block; font-weight: bold;">Hello John,</span>
<p style="font-size: 18px; font-family: arial; line-height: 22px; margin: 0px;">thanks for completing your first booking. Refer your friends &amp; earn $10 credit on your next.</p>
<button onclick="NV.openThirdPartyApp('com.maps.app/.HomeActivity'); return false;" style="position: absolute; background-color: #fc882c; color: #fff; border: none; border-radius: 20px; padding: 8px 20px; font-family: Arial, sans-serif; font-weight: bold; cursor: pointer;"> Notify Me </button></div>
```

### 6. Share text via system share sheet

```javascript
NV.share("Hey! Check out the offers at https://www.example.com/deals");
```

For example

```html
<div style="padding: 20px; text-align: center;"><span style="font-size: 25px; display: block;">Refer &amp; Earn<br /><b style="margin-top: 7px;">$10 Credit</b></span> <span style="font-size: 16px; margin-top: 15px; margin-bottom: 7px; padding: 0px; display: block; font-weight: bold;">Hello John,</span>
<p style="font-size: 18px; font-family: arial; line-height: 22px; margin: 0px;">thanks for completing your first booking. Refer your friends &amp; earn $10 credit on your next.</p>
<button onclick="NV.share('Hey! Check out the offers at https://www.example.com/deals'); return false;" style="position: absolute; background-color: #fc882c; color: #fff; border: none; border-radius: 20px; padding: 8px 20px; font-family: Arial, sans-serif; font-weight: bold; cursor: pointer;"> Notify Me </button></div>
```

### 7. Start a call (opens dialer)

```javascript
NV.call("1800123456");
```

For example

```html
<div style="padding: 20px; text-align: center;"><span style="font-size: 25px; display: block;">Refer &amp; Earn<br /><b style="margin-top: 7px;">$10 Credit</b></span> <span style="font-size: 16px; margin-top: 15px; margin-bottom: 7px; padding: 0px; display: block; font-weight: bold;">Hello John,</span>
<p style="font-size: 18px; font-family: arial; line-height: 22px; margin: 0px;">thanks for completing your first booking. Refer your friends &amp; earn $10 credit on your next.</p>
<button onclick="NV.call('1800123456'); return false;" style="position: absolute; background-color: #fc882c; color: #fff; border: none; border-radius: 20px; padding: 8px 20px; font-family: Arial, sans-serif; font-weight: bold; cursor: pointer;"> Notify Me </button></div>
```

### 8. Copy text to clipboard (e.g., coupon codes)

```javascript
NV.copyToClipboard("SAVE100");
```

For example

```html
<div style="padding: 20px; text-align: center;"><span style="font-size: 25px; display: block;">Refer &amp; Earn<br /><b style="margin-top: 7px;">$10 Credit</b></span> <span style="font-size: 16px; margin-top: 15px; margin-bottom: 7px; padding: 0px; display: block; font-weight: bold;">Hello John,</span>
<p style="font-size: 18px; font-family: arial; line-height: 22px; margin: 0px;">thanks for completing your first booking. Refer your friends &amp; earn $10 credit on your next.</p>
<button onclick="NV.copyToClipboard('SAVE100'); return false;" style="position: absolute; background-color: #fc882c; color: #fff; border: none; border-radius: 20px; padding: 8px 20px; font-family: Arial, sans-serif; font-weight: bold; cursor: pointer;"> Notify Me </button></div>
```

### 9. Stop showing this in-app again

```javascript
NV.stopShowAgain();
```

For example

```html
<div style="padding: 20px; text-align: center;"><span style="font-size: 25px; display: block;">Refer &amp; Earn<br /><b style="margin-top: 7px;">$10 Credit</b></span> <span style="font-size: 16px; margin-top: 15px; margin-bottom: 7px; padding: 0px; display: block; font-weight: bold;">Hello John,</span>
<p style="font-size: 18px; font-family: arial; line-height: 22px; margin: 0px;">thanks for completing your first booking. Refer your friends &amp; earn $10 credit on your next.</p>
<!-- Bottom-center button --> <button onclick="NV.stopShowAgain(); return false;" style="position: absolute; background-color: #fc882c; color: #fff; border: none; border-radius: 20px; padding: 8px 20px; font-family: Arial, sans-serif; font-weight: bold; cursor: pointer;"> Notify Me </button></div>
```

### 10. Track a survey attempt

```javascript
// e.g., user selected an option but hasn't submitted
const payload = {
    "nid":"5126",
    name: "Ram",
    tokens: {
      userID: "ram678"
    }
};
NV.surveyAttempt(JSON.stringify(payload));
```

For example

```html
<div style="padding: 20px; text-align: center;"><span style="font-size: 25px; display: block;">Refer &amp; Earn<br /><b style="margin-top: 7px;">$10 Credit</b></span> <span style="font-size: 16px; margin-top: 15px; margin-bottom: 7px; padding: 0px; display: block; font-weight: bold;">Hello John,</span>
<p style="font-size: 18px; font-family: arial; line-height: 22px; margin: 0px;">thanks for completing your first booking. Refer your friends &amp; earn $10 credit on your next.</p>
<button onclick="handleNavClick(); return false;" style="position: absolute; background-color: #fc882c; color: #fff; border: none; border-radius: 20px; padding: 8px 20px; font-family: Arial, sans-serif; font-weight: bold; cursor: pointer;"> Notify Me </button></div>
<script>// <![CDATA[
const payload = {
    "nid":"5126",
    name: "Ram",
    tokens: {
      userID: "ram678"
    }
  };

  function handleNavClick() {
    NV.surveyAttempt(JSON.stringify(payload));
  }
// ]]></script>
```

### 11. Track a survey submission

```javascript
// e.g., user submitted rating 9 with a comment
const payload = {
    nid:"5126",
    name: "Ram",
    rate: 9,
    tokens: {
      userID: "ram678"
    }
};
NV.surveySubmit(JSON.stringify(payload));
```

For example

```html
<div style="padding: 20px; text-align: center;"><span style="font-size: 25px; display: block;">Refer &amp; Earn<br /><b style="margin-top: 7px;">$10 Credit</b></span> <span style="font-size: 16px; margin-top: 15px; margin-bottom: 7px; padding: 0px; display: block; font-weight: bold;">Hello John,</span>
<p style="font-size: 18px; font-family: arial; line-height: 22px; margin: 0px;">thanks for completing your first booking. Refer your friends &amp; earn $10 credit on your next.</p>
<button onclick="handleNavClick(); return false;" style="position: absolute; background-color: #fc882c; color: #fff; border: none; border-radius: 20px; padding: 8px 20px; font-family: Arial, sans-serif; font-weight: bold; cursor: pointer;"> Notify Me </button></div>
<script>// <![CDATA[
const payload = {
    nid:"5126",
    name: "Ram",
    rate: 9,
    tokens: {
      userID: "ram678"
    }
  };

  function handleNavClick() {
    NV.surveySubmit(JSON.stringify(payload));
  }
// ]]></script>
```

### **Callback option**

**Whenever openInAppScreen & openDeeplink functions are triggered, a callback is invoked with the data associated with the specific function or click.**

**You can use this callback in your app to process any action or perform additional tasks.**

```java
NotifyVisitorsApi.getInstance(context).notificationClickCallback(new OnNotificationClicksHandler() {
   @Override
   public void onClick(JSONObject response) {
       //do your task here
   }
});
```

**Output Format for the above Callback**

**JSONObject**

```json
{
   "notifyvisitors_cta":{
      "type":"banner",
      "source":"nv",
      "actionURL":"com.example.app.ui.DetailsActivity",
      "target":0,
      "callToAction":"1",
      "parameters":{
         "nav_screen_attr1":"val1",
         "nav_screen_attr2":100,
         "nav_screen_attr3":123.11,
         "nav_screen_attr4":true
      }
   }
}
```