user2341060
user2341060

Reputation: 85

Pushwoosh phonegap plugin, retrieving device ID

I'm using the pushwoosh phonegap plugin for push notifications. After successful registration I need to store the device ID that the registration used in the "hwid" parameter so that I can target push notifications that I send with this same device ID. This works great on Android since it seems the phonegap device.uuid is the same ID that the pushwoosh plugin is sending to their servers. However, on ios the device.uuid returns a different ID than what is sent to pushwoosh. I can see from the Xcode console log the hwid that the plugin is sending to pushwoosh but cannot figure out where they are getting this ID from and how to access the same ID within phonegap.

EDIT: I was hoping the getRemoveNotificationStatus function would return this info but it actually returns less than the registerDevice callback.

UPDATE: Ok, from digging through their plugin code I see where they are constructing this ID that they send to their servers. Not sure why this ID isn't accessible through the phonegap plugin since this is the ID that I ultimately need to have in order to target a push notification to the specific device.

Their code:

(NSString *) uniqueDeviceIdentifier{
    NSString *macaddress = [self macaddress];
    NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];

    NSString *stringToHash = [NSString stringWithFormat:@"%@%@",macaddress,bundleIdentifier];
    NSString *uniqueIdentifier = [self stringFromMD5:stringToHash];

    return uniqueIdentifier;
}

- (NSString *) uniqueGlobalDeviceIdentifier{
    // >= iOS6 return identifierForVendor
    UIDevice *device = [UIDevice currentDevice];

    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.1")) {
        if ([device respondsToSelector:@selector(identifierForVendor)] && [NSUUID class]) {
            NSUUID *uuid = [device identifierForVendor];
            return [uuid UUIDString];
        }
    }

    // Fallback on macaddress
    NSString *macaddress = [self macaddress];
    NSString *uniqueIdentifier = [self stringFromMD5:macaddress];

    return uniqueIdentifier;
}

Upvotes: 1

Views: 1918

Answers (2)

ajodom10
ajodom10

Reputation: 141

As I posted here.

I found a work-around for anyone who needs this. Just open up the class "PWRequest.m" in xcode. Add the code below just under "[dict setObject:hwid forKey:@"hwid"];" in the NSMutableDictionary method.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"hwidfile2.txt"]; NSLog(@"From Echo Class File Path: %@", filePath); NSString *str = hwid; This will save a text file to your local app directory in which you can access from your Javascript code. For example, you can use this JS code to access and print the hwid to the console. Just call the 'readPwfile(filename)' function, passing in the name of your file as the function argument.

function readPWFile(fileName){
  window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem){

    fileSystem.root.getFile(fileName, null, gotReadFileEntry, fail);


  });

  function gotReadFileEntry(fileEntry) {
    fileEntry.file(gotFile, fail);
  }

  function gotFile(file){
    //readDataUrl(file);
    readAsText(file);
  }

  function readAsText(file) {
    var reader = new FileReader();
    reader.onloadend = function(evt) {
        console.log('Reading file... hwig Result: '+evt.target.result);


    };
    reader.readAsText(file);
   }
}

Upvotes: 0

Publicus
Publicus

Reputation: 1548

Are you sure that you need the hwid?

When I use the Pushwoosh Remote API to send push messages to individual devices I target using the "devices" tag and then just supply the deviceToken of the devices I wish to message.

The device token is easily accessible as it's part of the status-return from the plugin (status['deviceToken']).

Upvotes: 3

Related Questions