diff --git a/iOS/UniqueIdentifier/README.md b/iOS/UniqueIdentifier/README.md new file mode 100644 index 0000000..ebbce3d --- /dev/null +++ b/iOS/UniqueIdentifier/README.md @@ -0,0 +1,17 @@ +# Unique Identifier support for iOS applications + +_Created by `Andrew Thorp`_ + +Usage: + + // To GENERATE a Unique ID + PGUniqueIdentifier.generateUUID(function(result){ + // result will be the new UUID or the UUID that is stored in this apps NSDefaults + }); + + // To GET the Unique ID + PGUniqueIdentifier.getUUID(function(result){ + // result will be the UUID stored in this apps NSDefaults + }, function(error){ + // If a UUID has not yet been generated, you will receive the error "ERROR". + }); \ No newline at end of file diff --git a/iOS/UniqueIdentifier/UniqueIdentifier.h b/iOS/UniqueIdentifier/UniqueIdentifier.h new file mode 100644 index 0000000..c0d8683 --- /dev/null +++ b/iOS/UniqueIdentifier/UniqueIdentifier.h @@ -0,0 +1,40 @@ +// +// UniqueIdentifier.h +// UniqueIdentifierPlugin +// +// Created by Andrew Thorp on 4/13/12 +// +// +// THIS SOFTWARE IS PROVIDED BY THE ANDREW THORP "AS IS" AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +// EVENT SHALL ANDREW TRICE OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// + +#import + +#ifdef CORDOVA_FRAMEWORK +#import +#else +#import "CORDOVA/CDVPlugin.h" +#endif + +@interface UniqueIdentifier : CDVPlugin { + NSString* callbackId; + NSString* uuidString; + CFUUIDRef uuid; +} + +@property (nonatomic, copy) NSString* callbackID; + +//Public Instance Method (visible in phonegap API) +- (void) generateUUID:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options; +- (void) getUUID:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options; + +@end diff --git a/iOS/UniqueIdentifier/UniqueIdentifier.js b/iOS/UniqueIdentifier/UniqueIdentifier.js new file mode 100644 index 0000000..42dcee0 --- /dev/null +++ b/iOS/UniqueIdentifier/UniqueIdentifier.js @@ -0,0 +1,44 @@ +// +// UniqueIdentifier.js +// UniqueIdentifierPlugin +// +// Created by Andrew Thorp on 4/13/12 +// +// +// THIS SOFTWARE IS PROVIDED BY THE ANDREW THORP "AS IS" AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +// EVENT SHALL ANDREW TRICE OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// + +var UniqueIdentifier = function(){ + +} + +/** + * Generate new UUID + */ +UniqueIdentifier.prototype.generateUUID = function(success, fail){ + Cordova.exec(success, fail, "UniqueIdentifier", "generateUUID", []); +}; + +/** + * Return UUID stored in NSDefaults + */ +UniqueIdentifier.prototype.getUUID = function(success, fail){ + Cordova.exec(success, fail, "UniqueIdentifier", "getUUID", []); +}; + +Cordova.addConstructor(function(){ + if (!window.plugins){ + window.plugins = {}; + } + + window.plugins.uniqueIdentifier = new UniqueIdentifier(); +}); diff --git a/iOS/UniqueIdentifier/UniqueIdentifier.m b/iOS/UniqueIdentifier/UniqueIdentifier.m new file mode 100644 index 0000000..3b50548 --- /dev/null +++ b/iOS/UniqueIdentifier/UniqueIdentifier.m @@ -0,0 +1,68 @@ +// +// UniqueIdentifier.m +// UniqueIdentifierPlugin +// +// Created by Andrew Thorp on 4/13/12 +// +// +// THIS SOFTWARE IS PROVIDED BY THE ANDREW THORP "AS IS" AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +// EVENT SHALL ANDREW TRICE OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// + +#import "UniqueIdentifier.h" +#define UUID_USER_DEFAULTS_KEY @"UUID" + +@implementation UniqueIdentifier + +@synthesize callbackID; + +NSString* UNIQUE_IDENTIFIER_OK = @"OK"; +NSString* UNIQUE_IDENTIFIER_ERROR = @"ERROR"; + +- (void) generateUUID:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options +{ + self.callbackID = [arguments pop]; + + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + if ([defaults stringForKey:UUID_USER_DEFAULTS_KEY] == nil) { + uuid = CFUUIDCreate(NULL); + if (uuid) { + uuidString = (NSString *)CFUUIDCreateString(NULL, uuid); + CFRelease(uuid); + } + + [defaults setObject:uuidString forKey:UUID_USER_DEFAULTS_KEY]; + [defaults synchronize]; + } + + NSString *uniqueIdentifier = [defaults stringForKey:UUID_USER_DEFAULTS_KEY]; + + CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString: uniqueIdentifier]; + [self writeJavascript: [pluginResult toSuccessCallbackString:self.callbackID]]; +} + +- (void) getUUID:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options +{ + self.callbackID = [arguments pop]; + CDVPluginResult* pluginResult; + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + + if ([defaults stringForKey:UUID_USER_DEFAULTS_KEY] == nil){ + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString: UNIQUE_IDENTIFIER_ERROR]; + [self writeJavascript: [pluginResult toErrorCallbackString:self.callbackID]]; + } else { + NSString *uniqueIdentifier = [defaults stringForKey:UUID_USER_DEFAULTS_KEY]; + pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString: uniqueIdentifier]; + [self writeJavascript: [pluginResult toSuccessCallbackString:self.callbackID]]; + } +} + +@end diff --git a/iPhone/UniqueIdentifier/PGUniqueIdentifier.h b/iPhone/UniqueIdentifier/PGUniqueIdentifier.h new file mode 100644 index 0000000..a7c98fb --- /dev/null +++ b/iPhone/UniqueIdentifier/PGUniqueIdentifier.h @@ -0,0 +1,35 @@ +// +// PGUniqueIdentifier.h +// UniqueIdentifierPlugin +// +// Created by Andrew Thorp on 4/13/12 +// +// +// THIS SOFTWARE IS PROVIDED BY THE ANDREW THORP "AS IS" AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +// EVENT SHALL ANDREW TRICE OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// + +#import +#import + +@interface PGUniqueIdentifier : PGPlugin { + NSString* callbackId; + NSString* uuidString; + CFUUIDRef uuid; +} + +@property (nonatomic, copy) NSString* callbackID; + +//Public Instance Method (visible in phonegap API) +- (void) generateUUID:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options; +- (void) getUUID:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options; + +@end \ No newline at end of file diff --git a/iPhone/UniqueIdentifier/PGUniqueIdentifier.m b/iPhone/UniqueIdentifier/PGUniqueIdentifier.m new file mode 100644 index 0000000..075895b --- /dev/null +++ b/iPhone/UniqueIdentifier/PGUniqueIdentifier.m @@ -0,0 +1,67 @@ +// +// PGUniqueIdentifier.m +// UniqueIdentifierPlugin +// +// Created by Andrew Thorp on 4/13/12 +// +// +// THIS SOFTWARE IS PROVIDED BY THE ANDREW THORP "AS IS" AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +// EVENT SHALL ANDREW TRICE OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// + +#import "PGUniqueIdentifier.h" +#define UUID_USER_DEFAULTS_KEY @"UUID" + +@implementation PGUniqueIdentifier + +@synthesize callbackID; + +NSString* UNIQUE_IDENTIFIER_OK = @"OK"; +NSString* UNIQUE_IDENTIFIER_ERROR = @"ERROR"; + +- (void) generateUUID:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options +{ + self.callbackID = [arguments pop]; + + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + if ([defaults stringForKey:UUID_USER_DEFAULTS_KEY] == nil) { + uuid = CFUUIDCreate(NULL); + if (uuid) { + uuidString = (NSString *)CFUUIDCreateString(NULL, uuid); + CFRelease(uuid); + } + [defaults setObject:uuidString forKey:UUID_USER_DEFAULTS_KEY]; + [defaults synchronize]; + } + + NSString *uniqueIdentifier = [defaults stringForKey:UUID_USER_DEFAULTS_KEY]; + + PluginResult* pluginResult = [PluginResult resultWithStatus:PGCommandStatus_OK messageAsString: uniqueIdentifier]; + [self writeJavascript: [pluginResult toSuccessCallbackString:self.callbackID]]; +} + +- (void) getUUID:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options +{ + self.callbackID = [arguments pop]; + PluginResult* pluginResult; + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + + if ([defaults stringForKey:UUID_USER_DEFAULTS_KEY] == nil){ + pluginResult = [PluginResult resultWithStatus:PGCommandStatus_ERROR messageAsString: UNIQUE_IDENTIFIER_ERROR]; + [self writeJavascript: [pluginResult toErrorCallbackString:self.callbackID]]; + } else { + NSString *uniqueIdentifier = [defaults stringForKey:UUID_USER_DEFAULTS_KEY]; + pluginResult = [PluginResult resultWithStatus:PGCommandStatus_OK messageAsString: uniqueIdentifier]; + [self writeJavascript: [pluginResult toSuccessCallbackString:self.callbackID]]; + } +} + +@end diff --git a/iPhone/UniqueIdentifier/README.md b/iPhone/UniqueIdentifier/README.md new file mode 100644 index 0000000..ebbce3d --- /dev/null +++ b/iPhone/UniqueIdentifier/README.md @@ -0,0 +1,17 @@ +# Unique Identifier support for iOS applications + +_Created by `Andrew Thorp`_ + +Usage: + + // To GENERATE a Unique ID + PGUniqueIdentifier.generateUUID(function(result){ + // result will be the new UUID or the UUID that is stored in this apps NSDefaults + }); + + // To GET the Unique ID + PGUniqueIdentifier.getUUID(function(result){ + // result will be the UUID stored in this apps NSDefaults + }, function(error){ + // If a UUID has not yet been generated, you will receive the error "ERROR". + }); \ No newline at end of file diff --git a/iPhone/UniqueIdentifier/UniqueIdentifier.js b/iPhone/UniqueIdentifier/UniqueIdentifier.js new file mode 100644 index 0000000..8854214 --- /dev/null +++ b/iPhone/UniqueIdentifier/UniqueIdentifier.js @@ -0,0 +1,11 @@ +var PGUniqueIdentifier = { + + generateUUID: function(success, fail) { + return PhoneGap.exec(success, fail, "PGUniqueIdentifier", "generateUUID", []); + }, + + getUUID: function(success, fail) { + return PhoneGap.exec(success, fail, "PGUniqueIdentifier", "getUUID", []); + } + +}; \ No newline at end of file