为 EgretNative 添加原生扩展
什么是 Egret Native 原生扩展
Egret Native 原生扩展是一些代码库,其中包含用 JavaScript API 包装的原生代码。您可以在 Egret Native 中使用原生扩展,以访问 Egret Native 不支持的平台功能。如:
- 第三方登录/支付/广告/分享/推送
- 为游戏添加开屏视频、定制输入法等功能
- 加密信息存储和数据发送
原生扩展架构
原生扩展由两部分组成:
- 您编写的 TypeScript 扩展类,对您的游戏提供API,内部调用引擎的 ExternalInterface JavaScript 接口
- 您编写的原生端( iOS / Android )代码,实现扩展功能,同样可以调用 Egret Native 的的ExternalInterface 接口
添加 Android 原生扩展
由 JavaScript 向 Android 发送消息
- 在安卓端注册接收消息的方法:
nativeAndroid.setExternalInterface("sendToNative", new INativePlayer.INativeInterface() {
@Override
public void callback(String message) {
String str = "Native get message: ";
str += message;
Log.d(TAG, str);
}
});
- 然后在 JavaScript 端发送消息:
egret.ExternalInterface.call("sendToNative", "message from JS");
由 Android 向 JavaScript 发送消息
- 在 JavaScript 端注册接收消息的方法:
egret.ExternalInterface.addCallback("sendToJS", function(msg) {
console.log(msg);
});
- 在 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);
}];
- 然后在 JavaScript 端发送消息:
egret.ExternalInterface.call("sendToNative", "message from JS");
由 iOS 向 JavaScript 发送消息
- 在 JavaScript 端注册接收消息的方法:
egret.ExternalInterface.addCallback("sendToJS", function(msg) {
console.log(msg);
});
- 在 iOS 端发送消息
[_native callExternalInterface:@"sendToJS" Value:@"message from OC"];
注意
- 需要先注册接收消息的方法,才能接收到另一端发送的消息。
- 在应用刚启动时,JavaScript 可能没有加载完,此时向 JavaScript 发送消息是不能接收到的。可以在游戏代码中先向原生端通知游戏已经启动,原生端收到消息后再向 JavaScript 端发送消息。