1

我正在使用 pushwoosh phonegap 插件进行推送通知。成功注册后,我需要将注册使用的设备 ID 存储在“hwid”参数中,以便我可以针对使用相同设备 ID 发送的推送通知。这在 Android 上效果很好,因为 phonegap device.uuid 似乎与 pushwoosh 插件发送到其服务器的 ID 相同。但是,在 ios 上,device.uuid 返回的 ID 与发送到 pushwoosh 的 ID 不同。我可以从 Xcode 控制台日志中看到插件发送到 pushwoosh 的 hwid,但无法弄清楚他们从哪里获取此 ID 以及如何在 phonegap 中访问相同的 ID。

编辑:我希望 getRemoveNotificationStatus 函数会返回此信息,但它实际上返回的少于 registerDevice 回调。

更新:好的,通过挖掘他们的插件代码,我看到他们在哪里构建他们发送到他们的服务器的这个 ID。不确定为什么无法通过 phonegap 插件访问此 ID,因为这是我最终需要拥有的 ID,以便将推送通知定位到特定设备。

他们的代码:

(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;
}
4

2 回答 2

3

你确定你需要hwid吗?

当我使用 Pushwoosh Remote API 将推送消息发送到我使用“设备”标签定位的单个设备时,然后只需提供我希望发送消息的设备的 deviceToken。

设备令牌很容易访问,因为它是插件状态返回的一部分 (status['deviceToken'])。

于 2013-05-05T11:30:34.673 回答
0

正如我在这里发布的。

我为任何需要这个的人找到了解决方法。只需在 xcode 中打开类“PWRequest.m”。在 "[dict setObject:hwid forKey:@"hwid"];" 下添加以下代码 在 NSMutableDictionary 方法中。

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; 这会将一个文本文件保存到您的本地应用程序目录中,您可以从 Javascript 代码访问该目录。例如,您可以使用此 JS 代码访问并将 hwid 打印到控制台。只需调用“readPwfile(filename)”函数,将文件名作为函数参数传入。

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);
   }
}
于 2013-09-24T18:04:26.530 回答