Allow send message from Javascript to Native
npm install cordova-plugin-broadcasterCordova Plugin to allow message exchange between javascript and native (and viceversa).
 
Broadcaster plugin providing bridge for the following native technologies:
target OS | Native Technology
----|----
IOS | NotificationCenter
Android | LocalBroadcastManager
``javascript`
$ cordova create
$ cd
$ cordova platform add [ios|android]
$ cordova plugin add cordova-plugin-broadcaster
#### Javascript
`javascript
console.log( "register didShow received!" );
var listener = function( e ) {
//log: didShow received! userInfo: {"data":"test"}
console.log( "didShow received! userInfo: " + JSON.stringify(e) );
}
window.broadcaster.addEventListener( "didShow", listener);
`$3
#### Listen for global message
`javascript
if( cordova.platformId === "android" ) {
var listener = function( e ) {
//log: didShow received! userInfo: {"data":"test"}
console.log( "CONNECTIVITY_CHANGE: " + JSON.stringify(e) );
}
var isGlobal = true
window.broadcaster.addEventListener( 'android.net.conn.CONNECTIVITY_CHANGE', isGlobal, listener);
}
`
#### ANDROID
`Java
final Intent intent = new Intent("didShow");
final Bundle child = new Bundle();
child.putString( "name", "joker");
final Bundle b = new Bundle();
b.putString( "data", "test");
b.putBoolean( "valid", true );
b.putBundle( "child", child );
intent.putExtras( b);
LocalBroadcastManager.getInstance(this).sendBroadcastSync(intent);
`
#### IOS
##### Objective-C
`Objective-C
NSDictionary * payload = @{
@"data":@"test",
@"valid": [NSNumber numberWithBool:YES],
@"child": @{ @"name": @"joker" }
};
[[NSNotificationCenter defaultCenter] postNotificationName:@"TEST.EVENT"
object:nil
userInfo:payload];
`
##### Swift 5.x
`swift
let payload:[String:Any] = [
"data":"test",
"valid": true,
"child":[ "name": "joker" ]
]
let nc = NotificationCenter.default
nc.post(name:Notification.Name("didShow"), object: nil, userInfo: payload)
`
#### BROWSER
`javascript
let event = new CustomEvent("didShow", { detail: { data:"test"} } );
document.dispatchEvent( event )
`$3
#### Javascript
`javascript`
window.broadcaster.fireNativeEvent( "test.event", { item:'test data' }, function() {
console.log( "event fired!" );
} );
#### Send a message with "flags" and "category"
`javascript
if( cordova.platformId === "android" ) {
// send a message with "flags" and "category"
window.broadcaster.fireNativeEvent( "message", { extras:{ item:'test data' }, flags:0, category:'android.intent.category.INFO', packageName:'org.bsc'}, function() {
console.log( "event fired!" );
});
}
`
#### Send a global message
`javascript
if( cordova.platformId === "android" ) {
// send a global message
var isGlobal = true
window.broadcaster.fireNativeEvent( "GLOBAL_ACTION", isGlobal, { item:'test data' }, function() {
console.log( "event fired!" );
});
}
`
#### Send a global message with "flags" and "category"
`javascript
if( cordova.platformId === "android" ) {
// send a global message with "flags" and "category"
var isGlobal = true
window.broadcaster.fireNativeEvent( "GLOBAL_ACTION", isGlobal, { extras:{ item:'test data' }, flags:0, category:'android.intent.category.INFO', packageName:'org.bsc'}, function() {
console.log( "event fired!" );
});
}
`
#### ANDROID
`Java
final BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String data = intent.getExtras().getString("data");
Log.d("CDVBroadcaster",
String.format("Native event [%s] received with data [%s]", intent.getAction(), data));
}
};
LocalBroadcastManager.getInstance(this)
.registerReceiver(receiver, new IntentFilter("test.event"));
}
`
#### IOS
##### Objective-C
`Objective-C`
[[NSNotificationCenter defaultCenter] addObserverForName:@"test.event"
object:nil
queue:[NSOperationQueue mainQueue]
usingBlock:^(NSNotification *notification) {
NSLog(@"Handled 'test.event' [%@]", notification.userInfo[@"item"]);
}];
##### Swift 5.x
`swift`
let nc = NotificationCenter.default
nc.addObserver(forName:Notification.Name(rawValue:"test.event"),
object:nil, queue:nil) {
notification in
print( "\(notification.userInfo)")
}
#### BROWSER
`javascript
document.addEventListener( "test.event", ( ev:Event ) => {
console.log( "test event", ev.detail );
});
``