-
Notifications
You must be signed in to change notification settings - Fork 182
/
WikitudePlugin.js
344 lines (295 loc) · 14.7 KB
/
WikitudePlugin.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
/**
* Release date: January 2, 2017
*/
var WikitudePlugin = function() {
/**
* This is the SDK Key, provided to you after you purchased the Wikitude SDK from http =//www.wikitude.com/store/.
* You can obtain a free trial key at http =//www.wikitude.com/developer/licenses .
*/
this._sdkKey = "ENTER-YOUR-KEY-HERE";
/**
* The Wikitude SDK can run in different modes.
* * Geo means, that objects are placed at latitude/longitude positions.
* * ImageTracking means that only image recognition is used in the ARchitect World.
* When your ARchitect World uses both, geo and ir, than set this value to "IrAndGeo". Otherwise, if the ARchitectWorld only needs image recognition, placing "IR" will require less features from the device and therefore, support a wider range of devices. Keep in mind that image recognition requires a dual core cpu to work satisfyingly.
*/
this.FeatureGeo = "geo";
this.FeatureImageTracking = "image_tracking";
this.FeatureInstantTracking = "instant_tracking";
this.FeatureObjectTracking = "object_tracking";
/**
* Start-up configuration: camera position (front or back).
*/
this.CameraPositionUndefined = 0;
this.CameraPositionFront = 1;
this.CameraPositionBack = 2;
/**
* Start-up configuration: camera focus range restriction (for iOS only).
*/
this.CameraFocusRangeNone = 0;
this.CameraFocusRangeNear = 1;
this.CameraFocusRangeFar = 2;
};
/*
* =============================================================================================================================
*
* PUBLIC API
*
* =============================================================================================================================
*/
/* Managing ARchitect world loading */
/**
* Use this function to check if the current device is capable of running ARchitect Worlds.
*
* @param {function} successCallback A callback which is called if the device is capable of running ARchitect Worlds.
* @param {function} errorCallback A callback which is called if the device is not capable of running ARchitect Worlds.
*/
WikitudePlugin.prototype.isDeviceSupported = function(successCallback, errorCallback, requiredFeatures) {
// Check if the current device is capable of running Architect Worlds
cordova.exec(successCallback, errorCallback, "WikitudePlugin", "isDeviceSupported", [requiredFeatures]);
};
/**
* Use this function to request access to restricted APIs like the camera, gps or photo library.
*
* @param {function} successCallback A callback which is called if all required permissions are granted.
* @param {function} errorCallback A callback which is called if one or more permissions are not granted.
* @param {function} requiredFeatures An array of strings describing which features of the Wikitude SDK are used so that the plugin can request access to those restricted APIs.
*/
WikitudePlugin.prototype.requestAccess = function(successCallback, errorCallback, requiredFeatures) {
cordova.exec(successCallback, errorCallback, "WikitudePlugin", "requestAccess", [requiredFeatures]);
};
/**
* Use this function to load an ARchitect World.
*
* @param {function(loadedURL)} successCallback function which is called after a successful launch of the AR world.
* @param {function(error)} errorCallback function which is called after a failed launch of the AR world.
* @param {String} architectWorldPath The path to a local ARchitect world or to a ARchitect world on a server or your
* @param {String} worldPath path to an ARchitect world, either on the device or on e.g. your Dropbox.
* @param {Array} requiredFeatures augmented reality features: a flags mask for enabling/disabling
* geographic location-based (WikitudePlugin.FeatureGeo) or image recognition-based (WikitudePlugin.FeatureImageTracking) tracking.
* @param {json object} (optional) startupConfiguration represents the start-up configuration which may look like the following:
* {
* "cameraPosition": app.WikitudePlugin.CameraPositionBack,
* "*OptionalPlatform*": {
* "*optionalPlatformKey*": "*optionalPlatformValue*"
* }
* }
*/
WikitudePlugin.prototype.loadARchitectWorld = function(successCallback, errorCallback, architectWorldPath, requiredFeatures, startupConfiguration) {
cordova.exec(successCallback, errorCallback, "WikitudePlugin", "open", [{
"SDKKey": this._sdkKey,
"ARchitectWorldURL": architectWorldPath,
"RequiredFeatures": requiredFeatures,
"StartupConfiguration" : startupConfiguration
}]);
if (this.customBackButtonCallback == null) {
cordova.exec(this.onBackButton, this.onWikitudeError, "WikitudePlugin", "setBackButtonCallback", []);
}
// We add an event listener on the resume and pause event of the application life-cycle
document.addEventListener("resume", this.onResume, false);
document.addEventListener("pause", this.onPause, false);
document.addEventListener("backbutton", this.onBackButton, false);
};
/* Managing the Wikitude SDK Lifecycle */
/**
* Use this function to stop the Wikitude SDK and to remove it from the screen.
*/
WikitudePlugin.prototype.close = function() {
document.removeEventListener("pause", this.onPause, false);
document.removeEventListener("resume", this.onResume, false);
document.removeEventListener("backbutton", this.onBackButton, false);
cordova.exec(this.onWikitudeOK, this.onWikitudeError, "WikitudePlugin", "close", [""]);
};
/**
* Use this function to only hide the Wikitude SDK. All location and rendering updates are still active.
*/
WikitudePlugin.prototype.hide = function() {
cordova.exec(this.onWikitudeOK, this.onWikitudeError, "WikitudePlugin", "hide", [""]);
};
/**
* Use this function to show the Wikitude SDK again if it was hidden before.
*/
WikitudePlugin.prototype.show = function() {
cordova.exec(this.onWikitudeOK, this.onWikitudeError, "WikitudePlugin", "show", [""]);
};
/* Interacting with the Wikitude SDK */
/**
* Use this function to call JavaScript which will be executed in the context of the currently loaded ARchitect World.
*
* @param js The JavaScript that should be evaluated in the ARchitect View.
*/
WikitudePlugin.prototype.callJavaScript = function(js) {
cordova.exec(this.onWikitudeOK, this.onWikitudeError, "WikitudePlugin", "callJavascript", [js]);
};
/**
* Use this function to set a callback which will be invoked when the ARchitect World opens an architectsdk =// url.
* document.location = "architectsdk =//opendetailpage?id=9";#
* @param onUrlInvokeCallback A function which will be called when the ARchitect World invokes a call to "document.location = architectsdk =//"
* @deprecated use setJSONObjectReceivedCallback instead
*/
WikitudePlugin.prototype.setOnUrlInvokeCallback = function(onUrlInvokeCallback) {
cordova.exec(onUrlInvokeCallback, this.onWikitudeError, "WikitudePlugin", "onUrlInvoke", [""]);
};
/**
* Use this function to set a callback which will be invoked when AR.platform.sendJSONObject is called.
* e.g.:
* AR.platform.sendJSONObject({
* action: "opendetailpage",
* id: 9
* });
*
* @param onJSONObjectReceived A function which will be called when AR.platform.sendJSONObject is called.
*/
WikitudePlugin.prototype.setJSONObjectReceivedCallback = function(onJSONObjectReceived) {
cordova.exec(onJSONObjectReceived, this.onWikitudeError, "WikitudePlugin", "onJSONObjectReceived", [""]);
};
/**
* Use this function to inject a location into the Wikitude SDK.
*
* @param latitude The latitude which should be simulated
* @param longitude The longitude which should be simulated
* @param altitude The altitude which should be simulated
* @param accuracy The simulated location accuracy
*/
WikitudePlugin.prototype.setLocation = function(latitude, longitude, altitude, accuracy) {
cordova.exec(this.onWikitudeOK, this.onWikitudeError, "WikitudePlugin", "setLocation", [latitude, longitude, altitude, accuracy]);
};
/**
* Use this function to generate a screenshot from the current Wikitude SDK view.
*
* @param {function(ur)} successCallback function which is called after the screen capturing succeeded.
* @param {function(err)} errorCallback function which is called after capturing the screen has failed.
* @param includeWebView Indicates if the ARchitect web view should be included in the generated screenshot or not.
* @param imagePathInBundleorNullForPhotoLibrary If a file path or file name is given, the generated screenshot will be saved in the application bundle. Passing null will save the photo in the device photo library.
*/
WikitudePlugin.prototype.captureScreen = function(successCallback, errorCallback, includeWebView, imagePathInBundleOrNullForPhotoLibrary)
{
cordova.exec(successCallback, errorCallback, "WikitudePlugin", "captureScreen", [includeWebView, imagePathInBundleOrNullForPhotoLibrary]);
};
/**
* Use this function to set a callback that is called every time the Wikitude SDK encounters an internal error or warning.
* Internal errors can occur at any time and might not be related to any WikitudePlugin function invocation.
* An error code and message are passed in form of a JSON object.
*
* @param {function(jsonObject)} errorHandler function which is called every time the SDK encounters an internal error.
*
* NOTE: The errorHandler is currently only called by the Wikitude iOS SDK!
*/
WikitudePlugin.prototype.setErrorHandler = function(errorHandler)
{
cordova.exec(this.onWikitudeOK, errorHandler, "WikitudePlugin", "setErrorHandler", []);
}
/**
* Use this function to set a callback that is called every time the iOS SDK need to calibrate device sensors.
*
* @param {function()} startCalibrationHandler function which is called every time the iOS SDK would like to calibrate device sensors.
*
* Note: The startCalibrationHandler is currently only called by the Wikitude iOS Cordova Plugin!
*/
WikitudePlugin.prototype.setDeviceSensorsNeedCalibrationHandler = function(startCalibrationHandler)
{
cordova.exec(startCalibrationHandler, this.onWikitudeError(), "WikitudePlugin", "setDeviceSensorsNeedCalibrationHandler", []);
}
/**
* Use this function to set a callback that is called every time the iOS SDK finished device sensor calibration.
*
* @param {function()} finishedCalibrationHandler function which is called every time the iOS SDK finished calibrating device sensors.
*
* Note: The finishedCalibrationHandler is currently only called by the Wikitude iOS Cordova Plugin!
*/
WikitudePlugin.prototype.setDeviceSensorsFinishedCalibrationHandler = function(finishedCalibrationHandler)
{
cordova.exec(finishedCalibrationHandler, this.onWikitudeError(), "WikitudePlugin", "setDeviceSensorsFinishedCalibrationHandler", []);
}
/**
* Use this function to set a callback that is called every time the back button is pressed while the Wikitude Cordova Plugin is presented.
*
* @param {function()} onBackButtonCallback function which is called every time the Android back button is pressed.
*
* Note: The function is only implemented for Android!
*/
WikitudePlugin.prototype.setBackButtonCallback = function(onBackButtonCallback)
{
this.customBackButtonCallback = function() {
onBackButtonCallback();
WikitudePlugin.prototype.close();
}
cordova.exec(this.customBackButtonCallback, this.onWikitudeError, "WikitudePlugin", "setBackButtonCallback", []);
}
/**
* Use this function to get information about the sdk build.
*
* @param {function} successCallback A callback which is called when the build information could be laoded.
*/
WikitudePlugin.prototype.getSDKBuildInformation = function(successCallback) {
cordova.exec(successCallback, this.onWikitudeError, "WikitudePlugin", "getSDKBuildInformation", [""])
}
/**
* Use this function to get the version of the sdk.
*
* @param {function} successCallback A callback which is called when the sdk version could be loaded.
*/
WikitudePlugin.prototype.getSDKVersion = function(successCallback) {
cordova.exec(successCallback, this.onWikitudeError, "WikitudePlugin", "getSDKVersion", [""])
}
/**
* Use this function to open the application specific system setting view.
*/
WikitudePlugin.prototype.openAppSettings = function() {
cordova.exec(this.onWikitudeOK, this.onWikitudeError, "WikitudePlugin", "openAppSettings", []);
}
/**
* Use this function to display an alert with a specific message.
*
* @param alertString The message to display in the alert.
*/
WikitudePlugin.prototype.showAlert = function(alertString) {
cordova.exec(this.onWikitudeOK, this.onWikitudeError, "WikitudePlugin", "showAlert", [alertString]);
};
/*
* =============================================================================================================================
*
* Callbacks of public functions
*
* =============================================================================================================================
*/
/* Lifecycle updates */
/**
* This function gets called every time the application did become active.
*/
WikitudePlugin.prototype.onResume = function() {
// Call the Wikitude SDK that it should resume.
cordova.exec(this.onWikitudeOK, this.onWikitudeError, "WikitudePlugin", "onResume", [""]);
};
/* Lifecycle updates */
/**
* This function gets called when the application goes back to main
*/
WikitudePlugin.prototype.onBackButton = function() {
// Call the Wikitude SDK that it should resume.
//cordova.exec(this.onWikitudeOK, this.onWikitudeError, "WikitudePlugin", "close", [""]);
if (this.customBackButtonCallback != null) {
this.customBackButtonCallback();
}
else {
WikitudePlugin.prototype.close();
}
};
/**
* This function gets called every time the application is about to become inactive.
*/
WikitudePlugin.prototype.onPause = function() {
// Call the Wikitude SDK that the application did become inactive
cordova.exec(this.onWikitudeOK, this.onWikitudeError, "WikitudePlugin", "onPause", [""]);
};
/**
* A generic success callback used inside this wrapper.
*/
WikitudePlugin.prototype.onWikitudeOK = function() {};
/**
* A generic error callback used inside this wrapper.
*/
WikitudePlugin.prototype.onWikitudeError = function() {};
/* Export a new WikitudePlugin instance */
var wikitudePlugin = new WikitudePlugin();
module.exports = wikitudePlugin;