30.jsbridge

Overview

The custom platform page embedded in DJI Pilot 2 is actually using Web H5 page, and the page content needs to be designed by developers themselves. Then the data and information of the page are communicated with DJI Pilot 2 through JSBridge, the specificJSBridge interfaces that can be communicated are as follows.

Interface Name

JS interface

Description

window.djiBridge.platformSetWorkspaceId(String uuid)

Set workspace Id

uuid: the identifier of the workspace Identifier, the id must be uuid grid format. Example: e3dea0f5-37f2- 4d79-ae58- 490af3228069

window.djiBridge.platformSetInformation(String platformName, String workspaceName, String desc)

Set platform name

platformName: platform name workspaceName: the name displayed on the Pilot cloud portal workspaceDesc: the description displayed on the Pilot cloud portal

window.djiBridge.platformGetRemoteControllerSN() : String

Get the sn of the remote control

Return to the sn of the remote control

window.djiBridge.platformGetAircraftSN() : String

Get the sn of the aircraft

Return to the sn of the aircraft

window.djiBridge.platformStopSelf()

Close and exit the platform

window.djiBridge.apiSetToken(String token)

Set token

The API module needs to be loaded before it can be used.

window.djiBridge.apiGetToken()

Get token

window.djiBridge.onBackClick()

Return key callback

When you click the return key in the upper left corner of the webView page, the interface callback will be triggered. If the return value is true, PILOT will not be processed. if it is false or this function is not implemented, PILOT will exit the WebView page, and the effect will be the same as the return key of the remote control entity. Note: The remote controller back button cannot trigger this callback.

window.djiBridge.onStopPlatform()

Exit cloud platform callback

Before clicking to exit the cloud platform, the js method will be called, and then the APP will continue to perform the action of exiting the platform

window.djiBridge.platformSetLogEncryptKey(String key)

Set the log encryption key

Set the public key of the pilot log.

window.djiBridge.platformClearLogEncryptKey()

Clear the log encryption key

Clear the log encryption key.

window.djiBridge.platformGetLogPath()

Obtain the log path

Obtain the path for saving pilot logs.

window.open('scheme://host...', arg);

Launch the third-party App

Using Scheme format

window.djiBridge.platformGetVersion()

Get version

Rreturn modelVersion and appVersion

window.djiBridge.platformIsVerified()

Check if the interface is authenticated

Check whether the certificate has been authenticated before initiating js communication, if there is no authentication case, the communication will fail.

window.djiBridge.platformVerifyLicense(String appId,String appKey,String license)

Verify license

The appId and appKey and license need to be requested on the developer website. Note: Authentication is required before the JSBridge-related interfaces can be called.

window.djiBridge.platformLoadComponent(String name, String param)

Load Function Module

name: function module param: a json character. See below for details of the function modules: Cloud Module Live Stream Module API Module WS Module Map Module TSA Module Media Module Mission Module

window.djiBridge.platformUnloadComponent(String name)

Remove function module

-

window.djiBridge.platformIsComponentLoaded(String name)

Determine if the module is

-

window.djiBridge.platformIsAppInstalled(String pkgName)

Check if the APP is installed

pkgName: App package name

Structure of the Response

All of the interfaces used by JSBridge for setup have return structures with the following structure template.

// Note: The JSBridge interface return value is of type string and needs to be converted by the JSON.parse(res) method.
{  
    code: 0, // 0: success, other: fail
    message: error message,
    data: { // Data in normal conditions. Type: boolean, String, Int, Object
    }
}

Cloud Module

  • name: thing

  • param:

    {
    	host: url,						// mqtt address, example: tcp://xx.xx.xx.xx:xxx
    	connectCallback: js_callback,	// js interface for connection status callbacks
    	username: xxxxx,
    	password: xxxx
    }

    Note: Because there is a difference between mqtt connection based on tcp or WebSocket, so the mqtt url address in DJI Pilot 2 needs to use tcp:// or ws://.

  • Current js interface of the module.

    1. Get the status of the connection: window.djiBridge.thingGetConnectState() : Boolean

    2. Start the connection: window.djiBridge.thingConnect(String userName, String passwd, String callback)

    3. Close the connection: window.djiBridge.thingDisconnect()

    4. Set the callback function: window.djiBridge.thingSetConnectCallback(String callback)

    5. Return the set parameters: window.djiBridge.thingGetConfigs(): String

Live Streaming Module

  • name: liveshare

  • param:

    {
    	videoPublishType: video-on-demand, // Live streaming method. Server on demand. Manually. Mixed.
        statusCallback: js_callback,
    }
  • JS interface of the module.

    1. Set live mode: window.liveshare.setVideoPublishType(String type)

    parameters:

    • video-on-demand: server on-demand, depends on the thing module, see the on-demand command of the device thing model Live streaming service.

    • video-by-manual: Manual. After configuring the parameters of the live streaming type, you can modify the live streaming parameters on the Airlink page and stop the live streaming.

    • video-demand-aux-manual: Support server on demand, and modify live parameters, stop live on the Airlink page.

    • Obtain parameter: window.djiBridge.liveshareGetConfig(): String

      {
          type: Int, //Type 0: Unknow, 1: Agora, 2: RTMP, 3: RTSP, 4: GB28181
          params: {
          }
      }
    • Manual in App side: window.djiBridge.liveshareSetConfig(type: Int, params: String)

      parameters:

      //type:1   agora
      {
          uid: xxxxx,
          token: xxxxx,
          channelId: xxxxx
      }
      //type:2   RTMP
      {
          url: xxxxxx.xxxxx.xxxxxx.xxx
      }
      //type:3   RTSP
      {
          userName: xxx,
          password: xxx,
          port: xxxx
      }
      //type:4  GB28181
      {
          serverIp: xxx,     
          serverPort: xxx,    
          serverId: xxxx,
          agentId: xxxx,   
          password: xxx,    
          agentPort: xxx,     
          agentChannel: xxx, 
      }
    • Live status monitoring: window.djiBridge.liveshareSetStatusCallback(jsCallback)

      {
          type:Int, 
          status: Int,
          fps: Int,
          videoBitRate: Int, 
          rtt:Int, 
          quality:Int,
          jitter:Int,
          dropRate:Int,
      }
    • Get live status: window.djiBridge.liveshareGetStatus()

    • Manually enable live streaming in App side: window.djiBridge.liveshareStartLive()

    • Manually disable live streaming in App side: window.djiBridge.liveshareStopLive()

API Module

Function modules that is realized by the HTTPS are map module, wayline management module and TSA module. They depend on API module. When the API module is reloaded, these functions should also be reloaded.

  • name: api

  • param:

    {
    		host: url,		// {URI-scheme}://{Endpoint}
    		token: token	// The header will carry the X-Auth-Token.
    }
  • JS interface

    1. Get the token: window.djiBridge.apiGetToken()

    2. Reset the token: window.djiBridge.apiSetToken(String token)

    3. Get the host: window.djiBridge.apiGetHost()

WS Module

Example: wss://xxx.xxxx.xxx:8883?x-auth-token=msikdixkFksikflaol

  • name: ws

  • param:

    {
    		host: url, // wss://xxx.xxxx.xxx:8883
    		token: token, //Tokens will be encoded and spliced into x-Auth-token.
    		connectCallback: js_callback 
    }
  • JS interface

    1. Get connection status: window.djiBridge.wsGetConnectState()

    2. Reconnect: window.djiBridge.wsConnect(String host, String token, String callback)

    3. Disconnect: window.djiBridge.wsDisconnect()

    4. Send message: window.djiBridge.wsSend(String msg) // Refer to the WS interface description for message format.

Map Module

  • name: map

  • param:

    {
    	userName:name,  // The name of the creator when the map element is created.
    	elementPreName:newName   // Prefix of map element name.
    }

Note: Before loading the map module, you need to load the cloud module and the ws module.

  • JS interface

  1. Set username: window.djiBridge.mapSetUserName()

  2. Set prefix: window.djiBridge.mapSetElementPreName()

TSA Module

  • name: tsa

  • param:

    {}

    Note: Before loading the TSA module, you need to load the cloud module and the ws module. The parameter also needs to be passed with empty curly braces.

Media Module

  • name: media

  • param:

    {
    		autoUploadPhoto: boolean, // required: false
    		autoUploadPhotoType: int, // 0: original. 1: thumbnail. required: false
    		autoUploadVideo: boolean // required: false
    }

    Note: Before loading the media module, you need to load the cloud module. Meanwhile, the internal logic of the media module depends on the workspace parameters, which need to be configured first.

  • JS interface

    1. Set the status of automatically uploading photos: window.djiBridge.mediaSetAutoUploadPhoto(boolean auto)

    2. Get the status of automatically uploaded photos: window.djiBridge.mediaGetAutoUploadPhoto() : boolean

    3. Set the type of automatically uploading photos: window.djiBridge.mediaSetUploadPhotoType(int type)

    4. Get the type of automatically uploading photos: window.djiBridge.mediaGetUploadPhotoType()

    5. Set the status of automatically uploading videos: window.djiBridge.mediaSetAutoUploadVideo(boolean auto)

    6. Get the status of automatically uploading: window.djiBridge.mediaGetAutoUploadVideo() : boolean

    7. Set the remote control that downloads automatically in the background: window.djiBridge.mediaSetDownloadOwner(int rc) 0: mine, 1: other

    8. Get the remote control that downloads automatically in the background: window.djiBridge.mediaGetDownloadOwner(): int 0: mime, 1: another.

Mission Module

  • name: mission

  • param:

    {}

    Note: Before loading the mission module, you need to load the cloud module and the ws module. The parameter also needs to be passed with empty curly braces.

Last updated