iOS SDK 15.6.7,
Android SDK 15.5.3,
Hello Screen Dynamic States,
Bluedot Cordova plugin 4.0.1,
Bluedot Xamarin Android wrapper 15.5.2,
Bluedot Xamarin iOS wrapper 15.6.6,
Bluedot React Native wrapper 2.3.0,
Responsys & Bluedot SDK Integration
Add the following repositories and dependencies to your application’s build.gradle
file:
dependencies { implementation fileTree(dir: 'libs', include: ['PushIOManager.aar']) // Responsys PushIOManager implementation 'com.gitlab.bluedotio.android:point_sdk_android:15.3.4' //Bluedot Point SDK implementation 'com.google.firebase:firebase-core:16.0.8' implementation 'com.google.firebase:firebase-messaging:17.6.0' ... } apply plugin: 'com.google.gms.google-services'
The following code example demonstrates registering your app with Responsys SDK & also listen to Blue Dot Point SDK’s InitializationResultListener:
Starting the Bluedot SDK
1. We need to ask the user to give permission to use the location services. To do that, create a RequestPermissionActivity.kt and then add the below code.
public class RequestPermissionActivity extends AppCompatActivity { final int PERMISSION_REQUEST_CODE = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //Request permission required for location ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSION_REQUEST_CODE); } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode) { case PERMISSION_REQUEST_CODE: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { ((MainApplication)getApplication()).initPointSDK(); } else { //Permissions denied } break; } finish(); } }
2. The ServiceManager
is the entry-point for an app to start using the Bluedot Point SDK. The app must get an instance of the ServiceManager class and invoke initialize
method by providing the Project Id in order to initialize and start the Bluedot engine. The Project Id can be retrieved from the Bluedot Point Access account. It is important to pass a reference to InitializationResultListener
so the app can receive initialization callbacks from the SDK.
Initializing the Bluedot SDK and requesting for Location permission from the user and setting a foreground notification.
public class MainApplication extends Application implements InitializationResultListener { ServiceManager mServiceManager; private final String projectId = ""; //Project ID// for the App @Override public void onCreate() { super.onCreate(); //Registering App with Responsys SDK PushIOManager.getInstance(getApplicationContext()).registerApp(); //Set this you need InApp Push feature from Responsys PushIOManager.getInstance(this).setInAppFetchEnabled(true); // initialize Bluedot point sdk initPointSDK(); } public void initPointSDK() { int checkPermissionCoarse = ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_COARSE_LOCATION); int checkPermissionFine = ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION); if(checkPermissionCoarse == PackageManager.PERMISSION_GRANTED && checkPermissionFine == PackageManager.PERMISSION_GRANTED) { mServiceManager = ServiceManager.getInstance(this); if(!mServiceManager.isBlueDotPointServiceRunning()) { mServiceManager.initialize(projectId, this); } } else { requestPermissions(); } } private void requestPermissions() { Intent intent = new Intent(getApplicationContext(), RequestPermissionActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); }
The following mandatory callbacks of the InitializationResultListener
interface must be implemented.
User should registerUserID on PushIOManager with any customer user-specific ID, by default we are using Bluedot Point SDK InstallRef (It is a unique identifier assigned to a device during installation) in onInitializationFinished() callback.
@Override public void onInitializationFinished(@Nullable BDError bdError) { if (bdError != null){ Toast.makeText(getApplicationContext(), "Bluedot Initialization Error " + bdError.getReason(), Toast.LENGTH_LONG).show(); return; } PushIOManager.getInstance(getApplicationContext()).registerUserId(mServiceManager.getInstallRef()); }
3. Next, we create a class, BluedotGeoTriggerReceiver.kt, which will receive Bluedot GeoTrigger events. Inside the callbacks ZoneInfo and FenceInfo details are populated in PIOGeoRegion and corresponding PushIOManager onGeoRegionEntered() / onGeoRegionExited() are called.
public class BluedotGeoTriggerReceiver extends GeoTriggeringEventReceiver { private final String TAG = "BluedotApp"; @Override public void onZoneInfoUpdate(@NotNull List<ZoneInfo> list, @NotNull Context context) { Log.i(TAG, "Zones updated at: " + new Date().toString() + " ZoneInfos count: " + list.size()); } @Override public void onZoneEntryEvent(@NotNull ZoneEntryEvent zoneEntryEvent, @NotNull Context context) { Log.i(TAG, "Zones entered at: " + new Date().toString() + " Zone name:" + zoneEntryEvent.toString()); //Building GeoRegion with Fence details PIOGeoRegion geoRegion= new PIOGeoRegion(); geoRegion.setGeofenceId(zoneEntryEvent.getFenceInfo().getId()); geoRegion.setGeofenceName(zoneEntryEvent.getFenceInfo().getName()); geoRegion.setZoneId(zoneEntryEvent.getZoneInfo().getZoneId()); geoRegion.setZoneName(zoneEntryEvent.getZoneInfo().getZoneName()); geoRegion.setSource("Bluedot SDK"); //Reporting Checkin to Responsys PushIOManager.getInstance(context).onGeoRegionEntered(geoRegion, (s, pioRegionEventType, e) -> { Log.i(TAG,"onGeoRegionEntered pioRegionEventType"+pioRegionEventType); if(e != null) { Log.i(TAG, "onGeoRegionEntered PIORegionException" + e.getErrorMessage() + "###" + e.getErrorDescription()); } }); } @Override public void onZoneExitEvent(@NotNull ZoneExitEvent zoneExitEvent, @NotNull Context context) { Log.i(TAG, "Zones exited at: " + new Date().toString() + " Zone name:" + zoneExitEvent.toString()); //Building GeoRegion with Fence details PIOGeoRegion geoRegion= new PIOGeoRegion(); geoRegion.setGeofenceId(zoneExitEvent.getFenceInfo().getId()); geoRegion.setGeofenceName(zoneExitEvent.getFenceInfo().getName()); geoRegion.setDwellTime(zoneExitEvent.getDwellTime()); geoRegion.setZoneId(zoneExitEvent.getZoneInfo().getZoneId()); geoRegion.setZoneName(zoneExitEvent.getZoneInfo().getZoneName()); geoRegion.setSource("Bluedot SDK"); //Reporting Checkout to Responsys PushIOManager.getInstance(context).onGeoRegionExited(geoRegion, (s, pioRegionEventType, e) -> Log.i(TAG,"onGeoRegionExited "+s)); } }
4. Finally, start Geo-triggering as per the Bluedot Geo-triggering Android documentation.
For further information on the classes and methods discussed within this documentation, please refer to the Android SDK documentation.
A sample project which demonstrates the integration of the Responsys SDK and Bluedot Point SDK is available on GitHub.