vibes-react-native 1.1.5 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -392
- package/android/.gradle/6.8/fileChanges/last-build.bin +0 -0
- package/android/.gradle/6.8/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/6.8/gc.properties +0 -0
- package/android/.gradle/checksums/checksums.lock +0 -0
- package/android/.gradle/configuration-cache/gc.properties +0 -0
- package/android/.gradle/nb-cache/trust/0FE3017D1D91C06BBB23B2D967E1CF942770CADF1DE28563D6C5A7D96E872CFD +1 -0
- package/android/.gradle/vcs-1/gc.properties +0 -0
- package/android/build.gradle +51 -0
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
- package/android/gradlew +185 -0
- package/android/gradlew.bat +89 -0
- package/android/src/main/AndroidManifest.xml +30 -0
- package/android/src/main/java/com/vibes/push/rn/plugin/PushEvtEmitter.java +65 -0
- package/android/src/main/java/com/vibes/push/rn/plugin/VibesAppHelper.java +186 -0
- package/android/src/main/java/com/vibes/push/rn/plugin/VibesModule.java +490 -0
- package/android/src/main/java/com/vibes/push/rn/plugin/VibesPackage.java +28 -0
- package/android/src/main/java/com/vibes/push/rn/plugin/notifications/Fms.java +132 -0
- package/android/src/main/java/com/vibes/push/rn/plugin/notifications/PayloadWrapper.java +23 -0
- package/android/src/main/java/com/vibes/push/rn/plugin/notifications/VibesPushReceiver.java +62 -0
- package/ios/Configuration.swift +68 -0
- package/ios/Notifications.swift +72 -0
- package/ios/Vibes-Bridging-Header.h +2 -0
- package/ios/Vibes.m +56 -0
- package/ios/Vibes.swift +378 -0
- package/ios/Vibes.xcodeproj/project.pbxproj +293 -0
- package/ios/Vibes.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/ios/Vibes.xcodeproj/project.xcworkspace/xcuserdata/ed.lafoy.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/Vibes.xcodeproj/xcuserdata/ed.lafoy.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
- package/ios/VibesClient.swift +35 -0
- package/ios/VibesPluginLogger.swift +160 -0
- package/lib/commonjs/index.js +163 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/module/index.js +143 -0
- package/lib/module/index.js.map +1 -0
- package/package.json +10 -11
- package/src/index.tsx +182 -0
- /package/{ib → lib}/typescript/index.d.ts +0 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
package com.vibes.push.rn.plugin.notifications;
|
|
2
|
+
|
|
3
|
+
import android.content.Context;
|
|
4
|
+
import android.os.Handler;
|
|
5
|
+
import android.os.Looper;
|
|
6
|
+
import android.util.Log;
|
|
7
|
+
|
|
8
|
+
import com.facebook.react.ReactApplication;
|
|
9
|
+
import com.facebook.react.ReactInstanceManager;
|
|
10
|
+
import com.facebook.react.bridge.ReactContext;
|
|
11
|
+
import com.vibes.push.rn.plugin.VibesModule;
|
|
12
|
+
import com.vibes.push.rn.plugin.PushEvtEmitter;
|
|
13
|
+
import com.vibes.vibes.PushPayloadParser;
|
|
14
|
+
import com.vibes.vibes.Vibes;
|
|
15
|
+
import com.vibes.vibes.VibesReceiver;
|
|
16
|
+
|
|
17
|
+
import static com.vibes.push.rn.plugin.VibesModule.TAG;
|
|
18
|
+
|
|
19
|
+
public class VibesPushReceiver extends VibesReceiver {
|
|
20
|
+
|
|
21
|
+
@Override
|
|
22
|
+
protected void onPushOpened(Context context, PushPayloadParser pushModel) {
|
|
23
|
+
super.onPushOpened(context, pushModel);
|
|
24
|
+
Log.d(TAG, "Push message tapped. Emitting event");
|
|
25
|
+
emitPayload(context, pushModel);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
public static void emitPayload(Context context, PushPayloadParser pushModel) {
|
|
29
|
+
// We need to run this on the main thread, as the React code assumes that is
|
|
30
|
+
// true.
|
|
31
|
+
// Namely, DevServerHelper constructs a Handler() without a Looper, which
|
|
32
|
+
// triggers:
|
|
33
|
+
// "Can't create handler inside thread that has not called Looper.prepare()"
|
|
34
|
+
Handler handler = new Handler(Looper.getMainLooper());
|
|
35
|
+
handler.post(new Runnable() {
|
|
36
|
+
public void run() {
|
|
37
|
+
// Construct and load our normal React JS code bundle
|
|
38
|
+
final ReactInstanceManager mReactInstanceManager = ((ReactApplication) context.getApplicationContext())
|
|
39
|
+
.getReactNativeHost().getReactInstanceManager();
|
|
40
|
+
ReactContext context = mReactInstanceManager.getCurrentReactContext();
|
|
41
|
+
// If it's constructed, send a notification
|
|
42
|
+
if (context != null) {
|
|
43
|
+
PushEvtEmitter pushEmitter = new PushEvtEmitter(context);
|
|
44
|
+
pushEmitter.notifyPushOpened(pushModel);
|
|
45
|
+
} else {
|
|
46
|
+
// Otherwise wait for construction, then send the notification
|
|
47
|
+
mReactInstanceManager.addReactInstanceEventListener(new ReactInstanceManager.ReactInstanceEventListener() {
|
|
48
|
+
public void onReactContextInitialized(ReactContext context) {
|
|
49
|
+
PushEvtEmitter pushEmitter = new PushEvtEmitter(context);
|
|
50
|
+
pushEmitter.notifyPushOpened(pushModel);
|
|
51
|
+
mReactInstanceManager.removeReactInstanceEventListener(this);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
if (!mReactInstanceManager.hasStartedCreatingInitialContext()) {
|
|
55
|
+
// Construct it in the background
|
|
56
|
+
mReactInstanceManager.createReactContextInBackground();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Configuration.swift
|
|
3
|
+
// Vibes
|
|
4
|
+
//
|
|
5
|
+
// Created by DHwty on 22/04/2022.
|
|
6
|
+
// Copyright © 2022 Facebook. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
import Foundation
|
|
10
|
+
|
|
11
|
+
/// Keys found in <Configuration>.plist file i.e in UAT.plist and Production.plist
|
|
12
|
+
///
|
|
13
|
+
/// - appBuildNumber: The app build number
|
|
14
|
+
/// - appVersionNumber: The app version number
|
|
15
|
+
/// - vibesAppURL: Vibes app url
|
|
16
|
+
/// - vibesAppId: Vibes app id
|
|
17
|
+
/// - vibesAppEnv: Vibes app env: UAT or PROD
|
|
18
|
+
/// - logseneToken: Logsene token
|
|
19
|
+
public enum ConfigKey {
|
|
20
|
+
case appBuildNumber
|
|
21
|
+
case appVersionNumber
|
|
22
|
+
case vibesApiURL
|
|
23
|
+
case vibesAppId
|
|
24
|
+
case vibesAppEnv
|
|
25
|
+
case logseneToken
|
|
26
|
+
|
|
27
|
+
/// Actual string vakue for this enum as used in plist file
|
|
28
|
+
///
|
|
29
|
+
/// - Returns: The string value
|
|
30
|
+
func value() -> String {
|
|
31
|
+
switch self {
|
|
32
|
+
case .appBuildNumber:
|
|
33
|
+
return "CFBundleShortVersionString"
|
|
34
|
+
case .appVersionNumber:
|
|
35
|
+
return "CFBundleVersion"
|
|
36
|
+
case .vibesApiURL:
|
|
37
|
+
return "VibesApiURL"
|
|
38
|
+
case .vibesAppEnv:
|
|
39
|
+
return "VibesAppEnv"
|
|
40
|
+
case .vibesAppId:
|
|
41
|
+
return "VibesAppId"
|
|
42
|
+
case .logseneToken:
|
|
43
|
+
return "LogseneToken"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/// This struct will load the plist file for current build
|
|
49
|
+
public struct Configuration {
|
|
50
|
+
|
|
51
|
+
fileprivate static var infoDict: [String: Any] {
|
|
52
|
+
get {
|
|
53
|
+
if let dict = Bundle.main.infoDictionary {
|
|
54
|
+
return dict
|
|
55
|
+
} else {
|
|
56
|
+
fatalError("Plist file not found")
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/// Get the config value of a certain config key from current configuration
|
|
62
|
+
///
|
|
63
|
+
/// - Parameter key: The key to get value for
|
|
64
|
+
/// - Returns: The value or nil if not found
|
|
65
|
+
public static func configValue(_ key: ConfigKey) -> String? {
|
|
66
|
+
return infoDict[key.value()] as? String
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Notifications.swift
|
|
3
|
+
// Vibes
|
|
4
|
+
//
|
|
5
|
+
// Created by DHwty on 22/04/2022.
|
|
6
|
+
// Copyright © 2022 Facebook. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
import Foundation
|
|
10
|
+
import UserNotifications
|
|
11
|
+
|
|
12
|
+
@objc(Notifications)
|
|
13
|
+
@available(iOS 10.0, *)
|
|
14
|
+
class Notifications: NSObject {
|
|
15
|
+
let current = UNUserNotificationCenter.current()
|
|
16
|
+
|
|
17
|
+
@objc
|
|
18
|
+
static func requiresMainQueueSetup() -> Bool {
|
|
19
|
+
return true
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@objc(isPushEnabled:reject:)
|
|
23
|
+
func isPushEnabled(resolve: @escaping RCTPromiseResolveBlock,
|
|
24
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) -> Void{
|
|
25
|
+
current.getNotificationSettings { (settings) in
|
|
26
|
+
if settings.authorizationStatus == .notDetermined {
|
|
27
|
+
resolve("Notifications not determined")
|
|
28
|
+
} else if settings.authorizationStatus == .denied {
|
|
29
|
+
resolve("Notifications denied")
|
|
30
|
+
} else if settings.authorizationStatus == .authorized {
|
|
31
|
+
resolve(true)
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@objc(getDeviceId:reject:)
|
|
37
|
+
func getDeviceId(resolve: @escaping RCTPromiseResolveBlock,
|
|
38
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) -> Void{
|
|
39
|
+
let deviceID = getDeviceId()
|
|
40
|
+
resolve(deviceID)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
private func getDeviceId (_ tries: Int = 0) -> String? {
|
|
44
|
+
if let deviceID = UserDefaults.standard.vibesDeviceId {
|
|
45
|
+
return deviceID
|
|
46
|
+
} else {
|
|
47
|
+
if tries == 5 {
|
|
48
|
+
print("Error: Unable to get a string after 25secs delay")
|
|
49
|
+
return nil
|
|
50
|
+
}
|
|
51
|
+
sleep(5)
|
|
52
|
+
return getDeviceId(tries + 1)
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@objc(getEnvironment:reject:)
|
|
57
|
+
func getEnvironment(resolve: @escaping RCTPromiseResolveBlock,
|
|
58
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) -> Void{
|
|
59
|
+
let env = Configuration.configValue(.vibesAppEnv)
|
|
60
|
+
resolve(env)
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// MARK: - UserDefaults helpers
|
|
65
|
+
extension UserDefaults {
|
|
66
|
+
|
|
67
|
+
/// The vibes device id, if stored in this UserDefaults, else nil
|
|
68
|
+
public var vibesDeviceId: String? {
|
|
69
|
+
return self.string(forKey: "vibesDeviceId")
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
}
|
package/ios/Vibes.m
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#import <React/RCTBridgeModule.h>
|
|
2
|
+
|
|
3
|
+
@interface RCT_EXTERN_MODULE(Vibes, NSObject)
|
|
4
|
+
|
|
5
|
+
RCT_EXTERN_METHOD(registerDevice: (RCTPromiseResolveBlock *)resolve
|
|
6
|
+
rejecter:(RCTPromiseRejectBlock *)reject)
|
|
7
|
+
|
|
8
|
+
RCT_EXTERN_METHOD(unregisterDevice: (RCTPromiseResolveBlock *)resolve
|
|
9
|
+
rejecter:(RCTPromiseRejectBlock *)reject)
|
|
10
|
+
|
|
11
|
+
RCT_EXTERN_METHOD(registerPush: (RCTPromiseResolveBlock *)resolve
|
|
12
|
+
rejecter:(RCTPromiseRejectBlock *)reject)
|
|
13
|
+
|
|
14
|
+
RCT_EXTERN_METHOD(unregisterPush: (RCTPromiseResolveBlock *)resolve
|
|
15
|
+
rejecter:(RCTPromiseRejectBlock *)reject)
|
|
16
|
+
|
|
17
|
+
RCT_EXTERN_METHOD(getVibesDeviceInfo: (RCTPromiseResolveBlock *)resolve
|
|
18
|
+
rejecter:(RCTPromiseRejectBlock *)reject)
|
|
19
|
+
|
|
20
|
+
RCT_EXTERN_METHOD(associatePerson: (NSString *) externalPersonId
|
|
21
|
+
resolver:(RCTPromiseResolveBlock *)resolve
|
|
22
|
+
rejecter:(RCTPromiseRejectBlock *)reject)
|
|
23
|
+
|
|
24
|
+
RCT_EXTERN_METHOD(updateDevice: (BOOL ) updateCredentials
|
|
25
|
+
lat:(nonnull NSNumber *)lat
|
|
26
|
+
lon:(nonnull NSNumber *)lon
|
|
27
|
+
resolver:(RCTPromiseResolveBlock *)resolve
|
|
28
|
+
rejecter:(RCTPromiseRejectBlock *)reject)
|
|
29
|
+
|
|
30
|
+
RCT_EXTERN_METHOD(getPerson: (RCTPromiseResolveBlock *)resolve
|
|
31
|
+
rejecter:(RCTPromiseRejectBlock *)reject)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
RCT_EXTERN_METHOD(fetchInboxMessages: (RCTPromiseResolveBlock *)resolve
|
|
35
|
+
rejecter:(RCTPromiseRejectBlock *)reject)
|
|
36
|
+
|
|
37
|
+
RCT_EXTERN_METHOD(fetchInboxMessage: (NSString *) messageUID
|
|
38
|
+
resolve:(RCTPromiseResolveBlock *)resolve
|
|
39
|
+
reject:(RCTPromiseRejectBlock *)reject)
|
|
40
|
+
|
|
41
|
+
RCT_EXTERN_METHOD(markInboxMessageAsRead: (NSString *) messageUID
|
|
42
|
+
resolve:(RCTPromiseResolveBlock *)resolve
|
|
43
|
+
reject:(RCTPromiseRejectBlock *)reject)
|
|
44
|
+
|
|
45
|
+
RCT_EXTERN_METHOD(expireInboxMessage: (NSString *) messageUID
|
|
46
|
+
resolve:(RCTPromiseResolveBlock *)resolve
|
|
47
|
+
reject:(RCTPromiseRejectBlock *)reject)
|
|
48
|
+
|
|
49
|
+
RCT_EXTERN_METHOD(onInboxMessageOpen: (NSDictionary *) message
|
|
50
|
+
resolve:(RCTPromiseResolveBlock *)resolve
|
|
51
|
+
reject:(RCTPromiseRejectBlock *)reject)
|
|
52
|
+
|
|
53
|
+
RCT_EXTERN_METHOD(onInboxMessagesFetched: (RCTPromiseResolveBlock *)resolve
|
|
54
|
+
reject:(RCTPromiseRejectBlock *)reject)
|
|
55
|
+
@end
|
|
56
|
+
|
package/ios/Vibes.swift
ADDED
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
import UserNotifications
|
|
3
|
+
import VibesPush
|
|
4
|
+
|
|
5
|
+
@objc(Vibes)
|
|
6
|
+
class Vibes: NSObject, RCTBridgeModule, VibesPush.VibesAPIDelegate {
|
|
7
|
+
static func moduleName() -> String! {
|
|
8
|
+
return "Vibes"
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
public typealias JSONDictionary = [String: Any]
|
|
12
|
+
|
|
13
|
+
let userDefaults = UserDefaults.standard
|
|
14
|
+
|
|
15
|
+
var vibes: VibesPush.Vibes
|
|
16
|
+
var registerDeviceResolver: RCTPromiseResolveBlock?
|
|
17
|
+
var registerDeviceRejecter: RCTPromiseRejectBlock?
|
|
18
|
+
var unregisterDeviceResolver: RCTPromiseResolveBlock?
|
|
19
|
+
var unregisterDeviceRejecter: RCTPromiseRejectBlock?
|
|
20
|
+
|
|
21
|
+
var registerPushResolver: RCTPromiseResolveBlock?
|
|
22
|
+
var registerPushRejecter: RCTPromiseRejectBlock?
|
|
23
|
+
var unregisterPushResolver: RCTPromiseResolveBlock?
|
|
24
|
+
var unregisterPushRejecter: RCTPromiseRejectBlock?
|
|
25
|
+
var associatePersonResolver: RCTPromiseResolveBlock?
|
|
26
|
+
var associatePersonRejecter: RCTPromiseRejectBlock?
|
|
27
|
+
var updateDeviceResolver: RCTPromiseResolveBlock?
|
|
28
|
+
var updateDeviceRejecter: RCTPromiseRejectBlock?
|
|
29
|
+
|
|
30
|
+
static func requiresMainQueueSetup() -> Bool {
|
|
31
|
+
return true
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
override init() {
|
|
35
|
+
vibes = VibesClient.standard.vibes
|
|
36
|
+
super.init()
|
|
37
|
+
|
|
38
|
+
vibes.delegate = self
|
|
39
|
+
vibes.registerDevice()
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// MARK: - Register device
|
|
43
|
+
|
|
44
|
+
@objc
|
|
45
|
+
/// Register Device
|
|
46
|
+
/// - Parameters:
|
|
47
|
+
/// - resolve: promise resolver
|
|
48
|
+
/// - reject: promise rejecter
|
|
49
|
+
func registerDevice(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
50
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
51
|
+
registerDeviceResolver = resolve
|
|
52
|
+
registerDeviceRejecter = reject
|
|
53
|
+
if vibes.isDeviceRegistered(),
|
|
54
|
+
let registerDeviceResolver = registerDeviceResolver,
|
|
55
|
+
let deviceId = userDefaults.object(forKey: "vibesDeviceId") {
|
|
56
|
+
registerDeviceResolver(["device_id": deviceId])
|
|
57
|
+
return
|
|
58
|
+
}
|
|
59
|
+
vibes.registerDevice()
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
@objc
|
|
63
|
+
/// Un-register Device
|
|
64
|
+
/// - Parameters:
|
|
65
|
+
/// - resolve: promise resolver
|
|
66
|
+
/// - reject: promise rejecter
|
|
67
|
+
func unregisterDevice(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
68
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
69
|
+
unregisterDeviceResolver = resolve
|
|
70
|
+
unregisterDeviceRejecter = reject
|
|
71
|
+
vibes.unregisterDevice()
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
@objc
|
|
75
|
+
/// Register Push
|
|
76
|
+
/// - Parameters:
|
|
77
|
+
/// - resolve: promise resolver
|
|
78
|
+
/// - reject: promise rejecter
|
|
79
|
+
func registerPush(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
80
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
81
|
+
registerPushResolver = resolve
|
|
82
|
+
registerPushRejecter = reject
|
|
83
|
+
if vibes.isDeviceRegistered() {
|
|
84
|
+
vibes.registerPush()
|
|
85
|
+
} else {
|
|
86
|
+
if let registerPushRejecter = registerPushRejecter {
|
|
87
|
+
registerPushRejecter("REGISTER_PUSH_ERROR", "Device Not Registered: \(VibesError.noCredentials)", VibesError.noCredentials)
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
@objc
|
|
93
|
+
/// Un-register Push
|
|
94
|
+
/// - Parameters:
|
|
95
|
+
/// - resolve: promise resolver
|
|
96
|
+
/// - reject: promise rejecter
|
|
97
|
+
func unregisterPush(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
98
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
99
|
+
unregisterPushResolver = resolve
|
|
100
|
+
unregisterPushRejecter = reject
|
|
101
|
+
if vibes.isDevicePushRegistered() {
|
|
102
|
+
vibes.unregisterPush()
|
|
103
|
+
} else {
|
|
104
|
+
if let unregisterPushRejecter = unregisterPushRejecter {
|
|
105
|
+
unregisterPushRejecter("UNREGISTER_PUSH_ERROR", "Push Not Registered: \(VibesError.noPushToken)", VibesError.noPushToken)
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
@objc
|
|
111
|
+
/// Associate device to person
|
|
112
|
+
/// - Parameters:
|
|
113
|
+
/// - externalPersonId: External person ID
|
|
114
|
+
/// - resolve: promise resolver
|
|
115
|
+
/// - reject: promise rejecter
|
|
116
|
+
func associatePerson(_ externalPersonId: String, resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
117
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
118
|
+
associatePersonResolver = resolve
|
|
119
|
+
associatePersonRejecter = reject
|
|
120
|
+
vibes.associatePerson(externalPersonId: externalPersonId)
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
@objc
|
|
124
|
+
/// Update device
|
|
125
|
+
/// - Parameters:
|
|
126
|
+
/// - updateCredentials: a boolean indicating if it's a token update or device info update. Specify false if not certain
|
|
127
|
+
/// - lat: Latitude
|
|
128
|
+
/// - lon: Longitude
|
|
129
|
+
/// - resolve: promise resolver
|
|
130
|
+
/// - reject: promise rejecter
|
|
131
|
+
func updateDevice(_ updateCredentials: Bool, lat: NSNumber, lon: NSNumber, resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
132
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
133
|
+
updateDeviceResolver = resolve
|
|
134
|
+
updateDeviceRejecter = reject
|
|
135
|
+
vibes.updateDevice(lat: lat, long: lon, updateCredentials: updateCredentials)
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
@objc
|
|
139
|
+
/// Get Vibes Device Info
|
|
140
|
+
/// - Parameters:
|
|
141
|
+
/// - resolve: promise resolver
|
|
142
|
+
/// - reject: promise rejector
|
|
143
|
+
func getVibesDeviceInfo(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
144
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
145
|
+
if let deviceId = userDefaults.object(forKey: "vibesDeviceId") {
|
|
146
|
+
if let pushToken = vibes.pushToken {
|
|
147
|
+
resolve(["device_id": deviceId, "push_token": pushToken])
|
|
148
|
+
return
|
|
149
|
+
}
|
|
150
|
+
resolve(["device_id": deviceId])
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
@objc
|
|
155
|
+
/// Get Person Info
|
|
156
|
+
/// - Parameters:
|
|
157
|
+
/// - resolve: promise resolver
|
|
158
|
+
/// - reject: promise rejector
|
|
159
|
+
func getPerson(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
160
|
+
rejecter reject: @escaping RCTPromiseRejectBlock ) -> Void {
|
|
161
|
+
vibes.getPerson { person, error in
|
|
162
|
+
if let error = error {
|
|
163
|
+
reject("GET_PERSON_ERROR", error.localizedDescription, error)
|
|
164
|
+
} else {
|
|
165
|
+
resolve(["external_person_id": person?.externalPersonId, "person_key": person?.personKey])
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
@objc
|
|
171
|
+
/// Fetch Inbox Messages
|
|
172
|
+
///
|
|
173
|
+
/// - Parameters:
|
|
174
|
+
/// - resolve: promise resolver
|
|
175
|
+
/// - reject: promise rejector
|
|
176
|
+
func fetchInboxMessages(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
177
|
+
rejecter reject: @escaping RCTPromiseRejectBlock ) -> Void {
|
|
178
|
+
vibes.fetchInboxMessages({ messages, error in
|
|
179
|
+
if let error = error {
|
|
180
|
+
reject("FETCH_INBOX_MESSAGES_ERROR", error.localizedDescription, error)
|
|
181
|
+
} else {
|
|
182
|
+
var msgs: [JSONDictionary] = []
|
|
183
|
+
for msg in messages {
|
|
184
|
+
msgs.append(msg.encodeJSON())
|
|
185
|
+
}
|
|
186
|
+
resolve(msgs)
|
|
187
|
+
}
|
|
188
|
+
})
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
@objc
|
|
192
|
+
/// Fetch single Inbox Message
|
|
193
|
+
///
|
|
194
|
+
/// - Parameters:
|
|
195
|
+
/// - messageUid: The Message ID
|
|
196
|
+
/// - resolve: promise resolver
|
|
197
|
+
/// - reject: promise rejector
|
|
198
|
+
func fetchInboxMessage(_ messageUid: String,
|
|
199
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
200
|
+
reject: @escaping RCTPromiseRejectBlock ) -> Void {
|
|
201
|
+
vibes.fetchInboxMessage(messageUID: messageUid) {message, error in
|
|
202
|
+
|
|
203
|
+
if let error = error {
|
|
204
|
+
reject("FETCH_INBOX_MESSAGE_ERROR", error.localizedDescription, error)
|
|
205
|
+
} else {
|
|
206
|
+
if let message = message {
|
|
207
|
+
resolve(message.encodeJSON())
|
|
208
|
+
} else {
|
|
209
|
+
reject("FETCH_INBOX_MESSAGE_ERROR", "message encoding faild", "message encoding faild" as? Error)
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
@objc
|
|
216
|
+
/// Mark Inbox Message as Read
|
|
217
|
+
///
|
|
218
|
+
/// - Parameters:
|
|
219
|
+
/// - messageUid: The Message ID
|
|
220
|
+
/// - resolve: promise resolver
|
|
221
|
+
/// - reject: promise rejector
|
|
222
|
+
func markInboxMessageAsRead(_ messageUid: String,
|
|
223
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
224
|
+
reject: @escaping RCTPromiseRejectBlock ) -> Void {
|
|
225
|
+
vibes.markInboxMessageAsRead(messageUID: messageUid) {message, error in
|
|
226
|
+
|
|
227
|
+
if let error = error {
|
|
228
|
+
reject("MARK_INBOX_MESSAGE_AS_READ_ERROR", error.localizedDescription, error)
|
|
229
|
+
} else {
|
|
230
|
+
if let message = message {
|
|
231
|
+
resolve(message.encodeJSON())
|
|
232
|
+
} else {
|
|
233
|
+
reject("MARK_INBOX_MESSAGE_AS_READ_ERROR", "message encoding faild", "message encoding faild" as? Error)
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
@objc
|
|
240
|
+
/// Expire Inbox Message
|
|
241
|
+
///
|
|
242
|
+
/// - Parameters:
|
|
243
|
+
/// - messageUid: The Message ID
|
|
244
|
+
/// - resolve: promise resolver
|
|
245
|
+
/// - reject: promise rejector
|
|
246
|
+
func expireInboxMessage(_ messageUid: String,
|
|
247
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
248
|
+
reject: @escaping RCTPromiseRejectBlock ) -> Void {
|
|
249
|
+
vibes.expireInboxMessage(messageUID: messageUid) {message, error in
|
|
250
|
+
|
|
251
|
+
if let error = error {
|
|
252
|
+
reject("EXPIRE_INBOX_MESSAGE_ERROR", error.localizedDescription, error)
|
|
253
|
+
} else {
|
|
254
|
+
if let message = message {
|
|
255
|
+
resolve(message.encodeJSON())
|
|
256
|
+
} else {
|
|
257
|
+
reject("EXPIRE_INBOX_MESSAGE_ERROR", "message encoding faild", "message encoding faild" as? Error)
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
@objc
|
|
264
|
+
/// Inbox Message Opened
|
|
265
|
+
///
|
|
266
|
+
/// - Parameters:
|
|
267
|
+
/// - message: The Inbox Message
|
|
268
|
+
/// - resolve: promise resolver
|
|
269
|
+
/// - reject: promise rejector
|
|
270
|
+
func onInboxMessageOpen(_ message: VibesJSONDictionary,
|
|
271
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
272
|
+
reject: @escaping RCTPromiseRejectBlock ) -> Void {
|
|
273
|
+
guard let inboxMessage = InboxMessage(attributes: message) else {
|
|
274
|
+
reject("INBOX_MESSAGE_OPEN_ERROR", "Could not create Inbox Message from payload", nil)
|
|
275
|
+
return
|
|
276
|
+
}
|
|
277
|
+
vibes.onInboxMessageOpen(inboxMessage: inboxMessage)
|
|
278
|
+
resolve("success")
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
@objc
|
|
282
|
+
/// Inbox Messages Fetched
|
|
283
|
+
///
|
|
284
|
+
/// - Parameters:
|
|
285
|
+
/// - resolve: promise resolver
|
|
286
|
+
/// - reject: promise rejector
|
|
287
|
+
func onInboxMessagesFetched(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
288
|
+
reject: @escaping RCTPromiseRejectBlock ) -> Void {
|
|
289
|
+
|
|
290
|
+
vibes.onInboxMessagesFetched()
|
|
291
|
+
resolve("Success recording an inbox_fetch event")
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
func didRegisterDevice(deviceId: String?, error: Error?) {
|
|
295
|
+
if let error = error {
|
|
296
|
+
if let registerDeviceRejecter = registerDeviceRejecter {
|
|
297
|
+
registerDeviceRejecter("REGISTER_DEVICE_ERROR", error.localizedDescription, error)
|
|
298
|
+
}
|
|
299
|
+
} else {
|
|
300
|
+
if let registerDeviceResolver = registerDeviceResolver {
|
|
301
|
+
userDefaults.set(deviceId, forKey: "vibesDeviceId")
|
|
302
|
+
registerDeviceResolver(["device_id": deviceId])
|
|
303
|
+
}
|
|
304
|
+
NotificationCenter.default.post(name: Notification.Name.vibesDeviceRegistered, object: deviceId)
|
|
305
|
+
}
|
|
306
|
+
registerDeviceRejecter = nil
|
|
307
|
+
registerDeviceResolver = nil
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
func didUnregisterDevice(error: Error?) {
|
|
311
|
+
if let error = error {
|
|
312
|
+
if let unregisterDeviceRejecter = unregisterDeviceRejecter {
|
|
313
|
+
unregisterDeviceRejecter("UNREGISTER_DEVICE_ERROR", error.localizedDescription, error)
|
|
314
|
+
}
|
|
315
|
+
} else {
|
|
316
|
+
if let unregisterDeviceResolver = unregisterDeviceResolver {
|
|
317
|
+
userDefaults.removeObject(forKey: "vibesDeviceId")
|
|
318
|
+
unregisterDeviceResolver(["success"])
|
|
319
|
+
}
|
|
320
|
+
NotificationCenter.default.post(name: Notification.Name.vibesDeviceUnregistered, object: nil)
|
|
321
|
+
}
|
|
322
|
+
unregisterDeviceRejecter = nil
|
|
323
|
+
unregisterDeviceResolver = nil
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
func didRegisterPush(error: Error?) {
|
|
327
|
+
if let error = error {
|
|
328
|
+
if let registerPushRejecter = registerPushRejecter {
|
|
329
|
+
registerPushRejecter("REGISTER_PUSH_ERROR", error.localizedDescription, error)
|
|
330
|
+
}
|
|
331
|
+
} else {
|
|
332
|
+
if let registerPushResolver = registerPushResolver {
|
|
333
|
+
registerPushResolver("Successs")
|
|
334
|
+
}
|
|
335
|
+
NotificationCenter.default.post(name: Notification.Name.vibesPushRegistered, object: vibes.pushToken)
|
|
336
|
+
}
|
|
337
|
+
registerPushRejecter = nil
|
|
338
|
+
registerPushResolver = nil
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
func didUnregisterPush(error: Error?) {
|
|
342
|
+
if let error = error {
|
|
343
|
+
if let unregisterPushRejecter = unregisterPushRejecter {
|
|
344
|
+
unregisterPushRejecter("UNREGISTER_PUSH_ERROR", error.localizedDescription, error)
|
|
345
|
+
}
|
|
346
|
+
} else {
|
|
347
|
+
if let unregisterPushResolver = unregisterPushResolver {
|
|
348
|
+
unregisterPushResolver("Successs")
|
|
349
|
+
}
|
|
350
|
+
NotificationCenter.default.post(name: Notification.Name.vibesPushUnregistered, object: nil)
|
|
351
|
+
}
|
|
352
|
+
unregisterPushRejecter = nil
|
|
353
|
+
unregisterPushResolver = nil
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
func didAssociatePerson(error: Error?) {
|
|
357
|
+
if let error = error {
|
|
358
|
+
if let associatePersonRejecter = associatePersonRejecter {
|
|
359
|
+
associatePersonRejecter("ASSOCIATE_PERSON_ERROR", error.localizedDescription, error)
|
|
360
|
+
}
|
|
361
|
+
} else {
|
|
362
|
+
if let associatePersonResolver = associatePersonResolver {
|
|
363
|
+
associatePersonResolver("Successs")
|
|
364
|
+
}
|
|
365
|
+
NotificationCenter.default.post(name: Notification.Name.vibesPushDidAssociatePerson, object: nil)
|
|
366
|
+
}
|
|
367
|
+
associatePersonRejecter = nil
|
|
368
|
+
associatePersonResolver = nil
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
extension Notification.Name {
|
|
373
|
+
static let vibesDeviceRegistered = Notification.Name("vibesDeviceRegistered")
|
|
374
|
+
static let vibesDeviceUnregistered = Notification.Name("vibesDeviceUnregistered")
|
|
375
|
+
static let vibesPushRegistered = Notification.Name("vibesPushRegistered")
|
|
376
|
+
static let vibesPushUnregistered = Notification.Name("vibesPushUnregistered")
|
|
377
|
+
static let vibesPushDidAssociatePerson = Notification.Name("vibesPushDidAssociatePerson")
|
|
378
|
+
}
|