TalkJS has been designed from the ground to work well in mobile web browsers and inside mobile apps (using a Webview).

TalkJS is responsive, so if your app is as well, the most of it should just work great out of the box. This page lists some ways you can improve the user experience on mobile.

Fixing the viewport

For more native-like user experiences on mobile devices, we recommend fixing the width and height of the viewport, so that the chat fills the screen perfectly. Additionally, you probably want to disable zoom so that touch interactions become as fast as in native apps (most mobile browsers add a 300ms tap delay unless you disable zoom).

The code below accomplishes both these steps.

<meta name="viewport" 
      content="width=device-width, height=device-height, initial-scale=1.0, user-scalable=no"/>

Note: On iOS 10+, Safari will not actually disable zoom with this setting, but it will still support immediate touch interactions.

Mobile push notifications

If you embed TalkJS into a native app using Webviews, you can use our support for mobile push notifications as described here.

Cordova, PhoneGap and Ionic

TalkJS has been designed to work well inside Cordova-based apps, and you ought to be able to follow the usual web-based integration steps.

However, you need to add a few little settings to make everything work smoothly:

1. Whitelist TalkJS

On some platforms, you need to whitelist the TalkJS URIs to be able to load TalkJS.

  1. Install cordova-plugin-whitelist, and scroll down to the section about Content Security Policies.
  2. Add a Content Security Policy which allows access to https://*.talkjs.com.
  3. We depend on Google Cloud for the file sharing feature. If you use file sharing, also add https://firebasestorage.googleapis.com

By default, Cordova will open all links inside your app, which includes external links that your users may share amongst each other. If you don't want that, install cordova-plugin-inappbrowser. Don't worry about the plugin's confusing name, it includes a feature to avoid using an in-app browser :-)

TalkJS will automatically detect the presence of this plugin and ensure that external links are opened in the device's system browser.

React Native

You can integrate TalkJS within your React Native application by embedding it inside a WebView component. Your user list storage can remain in component the state or any other state management solution compatible with React Native. Please check out our detailed TalkJS React Native tutorial, or view our TalkJS React Native examples for reference.

Limitations

As a web-oriented solution, TalkJS has some limitations when used within a React Native WebView. You cannot send attachments in chat, for instance, because file uploads are not currently supported in React Native. Additionally, you will need a workaround to handle external links and attachments.

If you try to open a link or attachment from a chatbox in a default WebView, it will open in the same window and you won't be able to go back. We recommend implementing a workaround using the onNavigationStateChange callback. Once this callback is triggered you can open it in an external browser using React Native's Linking module.

  //HTML file with TalkJS snippet and "talkjs-container" div
  const uri = require('../assets/talkjs.html');

  <WebView
      ref={(ref) => { this.webview = ref; }}
      source={uri}
      //TalkJS initialization code
      injectedJavaScript={this.javascriptToInject(userToChat)}
      onNavigationStateChange={(event) => {
        //If this is not first time URL loading
        if (event.url !== uri) {
          //stop current browser window
          this.webview.stopLoading();
          //Open link in external window
          Linking.openURL(event.url);
        }
      }}
      />

You can find an example of an app that integrates TalkJS in our talkjs-examples repo.