Skip to content

Commit a95368e

Browse files
authored
Merge pull request #46 from ashemah/master
Send events through NativeEventEmitter rather than the bridge on iOS.
2 parents 41caf9c + 5b0c2f1 commit a95368e

8 files changed

Lines changed: 64 additions & 249 deletions

File tree

ReactNativeBeaconsManager.podspec

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
Pod::Spec.new do |s|
2+
s.name = "ReactNativeBeaconsManager"
3+
s.version = "1.0.8"
4+
s.summary = "React-Native library for detecting beacons (iOS and Android)"
5+
s.homepage = "https://github.com/MacKentoch/react-native-beacons-manager#readme"
6+
s.license = { :type => "MIT" }
7+
s.authors = { "" => "" }
8+
s.platform = :ios, "8.0"
9+
s.source = { :path => "." }
10+
s.source_files = "ios", "ios/**/*.{h,m}"
11+
end

examples/samples/ranging.ios.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11

2+
import { NativeEventEmitter } from 'react-native'
23
import Beacons from 'react-native-beacons-manager';
34
import moment from 'moment';
45

@@ -8,6 +9,10 @@ class beaconRangingOnly extends Component {
89
constructor(props) {
910
super(props);
1011

12+
this.beaconsEmitter = new NativeEventEmitter(Beacons);
13+
this.beaconsDidRangeEvent = null;
14+
this.authStateDidRangeEvent = null;
15+
1116
this.state = {
1217
// region information
1318
uuid: '7b44b47b-52a1-5381-90c2-f09b6838c5d4',
@@ -24,7 +29,7 @@ class beaconRangingOnly extends Component {
2429
//
2530

2631
// OPTIONAL: listen to authorization change
27-
DeviceEventEmitter.addListener(
32+
this.authStateDidRangeEvent = this.beaconsEmitter.addListener(
2833
'authorizationStatusDidChange',
2934
(info) => console.log('authorizationStatusDidChange: ', info)
3035
);
@@ -47,7 +52,7 @@ class beaconRangingOnly extends Component {
4752
//
4853

4954
// Ranging: Listen for beacon changes
50-
DeviceEventEmitter.addListener(
55+
this.beaconsDidRangeEvent = this.beaconsEmitter.addListener(
5156
'beaconsDidRange',
5257
(data) => {
5358
// console.log('beaconsDidRange data: ', data);
@@ -62,7 +67,8 @@ class beaconRangingOnly extends Component {
6267
// stop ranging beacons:
6368
Beacons.stopRangingBeaconsInRegion(region);
6469
// remove beacons event we registered at componentDidMount
65-
DeviceEventEmitter.removeListener('beaconsDidRange');
70+
this.beaconsDidRangeEvent.remove();
71+
this.authStateDidRangeEvent.remove();
6672
}
6773

6874
render() {

ios/RNiBeacon/RNiBeacon/RNiBeacon.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77
//
88

99
#import <Foundation/Foundation.h>
10+
1011
#import <React/RCTBridgeModule.h>
12+
#import <React/RCTEventEmitter.h>
1113

12-
@interface RNiBeacon : NSObject <RCTBridgeModule>
14+
@interface RNiBeacon : RCTEventEmitter <RCTBridgeModule>
1315

1416
@end

ios/RNiBeacon/RNiBeacon/RNiBeacon.m

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ @implementation RNiBeacon
2525

2626
RCT_EXPORT_MODULE()
2727

28-
@synthesize bridge = _bridge;
29-
3028
#pragma mark Initialization
3129

3230
- (instancetype)init
@@ -42,6 +40,17 @@ - (instancetype)init
4240
return self;
4341
}
4442

43+
- (NSArray<NSString *> *)supportedEvents
44+
{
45+
return @[
46+
@"authorizationStatusDidChange",
47+
@"beaconsDidRange",
48+
@"regionDidEnter",
49+
@"regionDidExit",
50+
@"didDetermineState"
51+
];
52+
}
53+
4554
#pragma mark
4655

4756
-(CLBeaconRegion *) createBeaconRegion: (NSString *) identifier
@@ -207,8 +216,8 @@ -(NSString *)nameForAuthorizationStatus:(CLAuthorizationStatus)authorizationStat
207216

208217
-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
209218
{
210-
NSString *statusName = [self nameForAuthorizationStatus:status];
211-
[self.bridge.eventDispatcher sendDeviceEventWithName:@"authorizationStatusDidChange" body:statusName];
219+
NSString *statusName = [self nameForAuthorizationStatus:status];
220+
[self sendEventWithName:@"authorizationStatusDidChange" body:statusName];
212221
}
213222

214223
-(void)locationManager:(CLLocationManager *)manager rangingBeaconsDidFailForRegion:(CLBeaconRegion *)region withError:(NSError *)error
@@ -224,6 +233,25 @@ -(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)
224233
NSLog(@"Location manager failed: %@", error);
225234
}
226235

236+
-(NSString *)stringForState:(CLRegionState)state {
237+
switch (state) {
238+
case CLRegionStateInside: return @"inside";
239+
case CLRegionStateOutside: return @"outside";
240+
case CLRegionStateUnknown: return @"unknown";
241+
default: return @"unknown";
242+
}
243+
}
244+
245+
- (void) locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region
246+
{
247+
NSDictionary *event = @{
248+
@"state": [self stringForState:state],
249+
@"identifier": region.identifier,
250+
};
251+
252+
[self sendEventWithName:@"didDetermineState" body:event];
253+
}
254+
227255
-(void) locationManager:(CLLocationManager *)manager didRangeBeacons:
228256
(NSArray *)beacons inRegion:(CLBeaconRegion *)region
229257
{
@@ -252,7 +280,7 @@ -(void) locationManager:(CLLocationManager *)manager didRangeBeacons:
252280
@"beacons": beaconArray
253281
};
254282

255-
[self.bridge.eventDispatcher sendDeviceEventWithName:@"beaconsDidRange" body:event];
283+
[self sendEventWithName:@"beaconsDidRange" body:event];
256284
}
257285

258286
-(void)locationManager:(CLLocationManager *)manager
@@ -262,7 +290,7 @@ -(void)locationManager:(CLLocationManager *)manager
262290
@"uuid": [region.proximityUUID UUIDString],
263291
};
264292

265-
[self.bridge.eventDispatcher sendDeviceEventWithName:@"regionDidEnter" body:event];
293+
[self sendEventWithName:@"regionDidEnter" body:event];
266294
}
267295

268296
-(void)locationManager:(CLLocationManager *)manager
@@ -272,7 +300,7 @@ -(void)locationManager:(CLLocationManager *)manager
272300
@"uuid": [region.proximityUUID UUIDString],
273301
};
274302

275-
[self.bridge.eventDispatcher sendDeviceEventWithName:@"regionDidExit" body:event];
303+
[self sendEventWithName:@"regionDidExit" body:event];
276304
}
277305

278306

lib/module.android.js

Lines changed: 0 additions & 231 deletions
This file was deleted.

0 commit comments

Comments
 (0)