# Install from npm
npm install react-native-nearbee --save
# Link to your app
react-native link
Add your API key and Orgnization ID to the AndroidManifest.xml
as follows
<application>
…
…
<meta-data
android:name="co.nearbee.api_key"
android:value="MY_DEV_TOKEN" />
<meta-data
android:name="co.nearbee.organization_id"
android:value="123" />
…
…
</application>
Add this to your project level build.gradle
allprojects {
repositories {
…
maven {
url "https://dl.bintray.com/mobstac/maven"
}
…
}
}
Add your API key and Orgnization ID to the Info.plist
as follows
<key>co.nearbee.api_key</key>
<string>MY_DEV_TOKEN<string>
<key>co.nearbee.organization_id</key>
<string>123</string>
Add the NSLocationAlwaysUsageDescription, NSLocationAlwaysAndWhenInUsageDescription, NSBluetoothPeripheralUsageDescription to Info.plist
<key>NSLocationAlwaysUsageDescription</key>
<string>To scan for beacons and show the offers around you</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>To scan for beacons and show the offers around you</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>To scan for beacons and show the offers around you</string>
To recieve notifications in the background, you must first enable the Location Updates
and Uses Bluetooth LE accessories
Background Modes in the Capabilities tab of your app target
- If you are using Pods you need to run the
pod install
.
- In XCode, in the project navigator, right click
Libraries
➜Add Files to [your project's name]
- Go to
node_modules
➜react-native-nearbee
and addRNNearbee.xcodeproj
- In XCode, in the project navigator, select your project. Add
libRNNearbee.a
to your project'sBuild Phases
➜Link Binary With Libraries
- Run your project (
Cmd+R
)
import {NativeModules} from 'react-native';
const NearBee = NativeModules.NearBee;
NearBee.initialize();
If set to true
the NearBee sdk will send beacon notifications in the background, when the app is not running.
NearBee.enableBackgroundNotifications(true);
To display a UI with list of beacons, the following needs to be done:
import {NativeEventEmitter} from 'react-native';
const eventEmitter = new NativeEventEmitter(NearBee);
// Beacon notification event
eventEmitter.addListener('nearBeeNotifications', this.onBeaconsFound);
// Error event
eventEmitter.addListener('nearBeeError', this.onError);
This will start the scan and start sending update events
NearBee.startScanning();
To extract the notification beacon data from the listener-
onBeaconsFound = (event) => {
let json = JSON.parse(event.nearBeeNotifications);
// Get the first beacon notification
let notification1 = json.nearBeeNotifications[0];
// Extract notification data
let title = notification1.title;
let description = notification1.description;
let icon = notification1.icon;
let url = notification1.url;
let bannerType = notification1.bannerType;
let bannerImageUrl = notification1.bannerImageUrl;
let eddystoneUID = notification1.eddystoneUID;
};
When there is no need to update the UI (like when the app goes to background), scanning should be stopped as it is a battery intensive process.
NearBee.stopScanning();
This will clear the cached server responses and will force NearBee to fetch fresh data from the server.
NearBee.clearNotificationCache();
This will start scanning for geofence notifications
NearBee.startGeoFenceMonitoring();
implementation 'co.nearbee:nearbeesdk:0.1.10'
package com.your_app_package;
import android.content.Context;
import android.content.Intent;
import co.nearbee.NotificationManager;
import co.nearbee.models.BeaconAttachment;
import co.nearbee.models.NearBeacon;
public class MyNotificationManager extends NotificationManager {
public MyNotificationManager(Context context) {
super(context);
}
@Override
public Intent getAppIntent(Context context) {
// This intent is for handling grouped notification click
return new Intent(context, MainActivity.class);
}
@Override
public Intent getBeaconIntent(Context context, NearBeacon nearBeacon) {
// This intent is for handling individual notification click
// Pass the intent of the activity that you want to be opened on click
if (nearBeacon.getBusiness() != null) {
BeaconAttachment attachment = nearBeacon.getBestAvailableAttachment(context);
if (attachment != null) {
final Intent intent = new Intent(context, MainActivity.class);
// pass the url from the beacon, so that it can be opened from your activity
intent.putExtra("url", attachment.getUrl());
return intent;
}
}
return null;
}
}
<meta-data
android:name="co.nearbee.notification_util"
android:value=".MyNotificationManager" />
public class MainActivity extends ReactActivity {
@Override
protected String getMainComponentName() {
return "your_app";
}
// Use this to get the data passed from intent
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getIntent().getStringExtra("url") != null) {
String url = getIntent().getStringExtra("url");
// Do something with the url here
Util.startChromeTabs(this, url, true);
}
}
}
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler
{
BOOL isNearBeeNotificaiton = [RNNearBee checkAndProcessNearbyNotification:response.notification];
// If the notification is not from NearBee you need to handle it.
if (!isNearBeeNotificaiton) {
// You should handle the notification
}
completionHandler();
}