跳到主要内容

为 EgretNative 添加原生扩展

什么是 Egret Native 原生扩展

Egret Native 原生扩展是一些代码库,其中包含用 JavaScript API 包装的原生代码。您可以在 Egret Native 中使用原生扩展,以访问 Egret Native 不支持的平台功能。如:

  • 第三方登录/支付/广告/分享/推送
  • 为游戏添加开屏视频、定制输入法等功能
  • 加密信息存储和数据发送

原生扩展架构

原生扩展由两部分组成:

  • 您编写的 TypeScript 扩展类,对您的游戏提供API,内部调用引擎的 ExternalInterface JavaScript 接口
  • 您编写的原生端( iOS / Android )代码,实现扩展功能,同样可以调用 Egret Native 的的ExternalInterface 接口

添加 Android 原生扩展

由 JavaScript 向 Android 发送消息

  1. 在安卓端注册接收消息的方法:
nativeAndroid.setExternalInterface("sendToNative",  new  INativePlayer.INativeInterface()  {

@Override

public void callback(String message) {

String str = "Native get message: ";

str += message;

Log.d(TAG, str);

}

});


  1. 然后在 JavaScript 端发送消息:
egret.ExternalInterface.call("sendToNative",  "message from JS");


由 Android 向 JavaScript 发送消息

  1. 在 JavaScript 端注册接收消息的方法:
egret.ExternalInterface.addCallback("sendToJS",  function(msg)  {

console.log(msg);

});


  1. 在 Android 端发送消息

nativeAndroid.callExternalInterface("sendToJS", "message from Java");


添加 iOS 原生扩展

由 JavaScript 向 iOS 发送消息


[_native setExternalInterface:@"sendToNative" Callback:^(NSString* message) {

NSString* str = @"Native get message: ";

str = [str stringByAppendingString:message];

NSLog(@"%@", str);

}];


  1. 然后在 JavaScript 端发送消息:
egret.ExternalInterface.call("sendToNative",  "message from JS");


由 iOS 向 JavaScript 发送消息

  1. 在 JavaScript 端注册接收消息的方法:
egret.ExternalInterface.addCallback("sendToJS",  function(msg)  {

console.log(msg);

});


  1. 在 iOS 端发送消息

[_native callExternalInterface:@"sendToJS" Value:@"message from OC"];


注意

  • 需要先注册接收消息的方法,才能接收到另一端发送的消息。
  • 在应用刚启动时,JavaScript 可能没有加载完,此时向 JavaScript 发送消息是不能接收到的。可以在游戏代码中先向原生端通知游戏已经启动,原生端收到消息后再向 JavaScript 端发送消息。