0

我正在使用 pushwoosh 将推送通知发送到我的 ios 移动应用程序。我想允许用户禁用应用程序内的通知。我遇到的问题是 pushwoosh api 对 ios 使用的设备 ID 与对 android 使用的设备 ID 不同。设备 ID 由插件使用本机代码创建。它使用硬件 mac 地址并应用 md5 算法来创建 phonegap 称为“hwid”(硬件 id)的“唯一”id。我找到了执行此操作的本机目标 c 类,但我不知道如何从 Javascript 访问变量“hwid”。

我已经阅读了 phonegap文档并创建了一个插件,允许我访问本机 ios 类。我的问题是我不知道目标 c,因此无法弄清楚如何将变量返回给回调。

pushwoosh api 需要设备 ID 才能取消注册设备,如您在此处看到的:

{
   "request":{
      "application":"APPLICATION_CODE",
      "hwid": "hardware device id"
   }
}

我看过这篇文章,它对我想要完成的事情没有帮助。但是,它确实显示了创建唯一 ID 的本机代码。

我还发现了将 hwid 打印到控制台的此类。如果我能找到一种方法从我的 js 代码中访问下面的“hwid”,我就准备好了。

#import "PWRequest.h"

@implementation PWRequest
@synthesize appId, hwid;

- (NSString *) methodName {
return @"";
}

//Please note that all values will be processed as strings
- (NSDictionary *) requestDictionary {
        return nil;
}

- (NSMutableDictionary *) baseDictionary {
        NSMutableDictionary *dict = [NSMutableDictionary new];
    [dict setObject:appId forKey:@"application"];
    [dict setObject:hwid forKey:@"hwid"];
        NSLog(@"hwid: %@", hwid);

    return [dict autorelease];
}

- (void) parseResponse: (NSDictionary *) response {
}

- (void) dealloc {
    self.appId = nil;
    self.hwid = nil;

    [super dealloc];
}

@end

有人可以指出我正确的方向吗?谢谢。

4

2 回答 2

1

我们刚刚为 iOS Phonegap Javascript 添加了 unregisterDevice 方法。PushNotification.prototype.unregisterDevice = function(success, fail) { cordova.exec(success, fail, "PushNotification", "unregisterDevice", []); };

它以前仅适用于 Android,现在也可在 iOS 上使用。对于 Phonegap 3.0,请参阅最新的 Pushwoosh 插件仓库: https ://github.com/shaders/pushwoosh-phonegap-3.0-plugin

对于较旧的 Phonegap 版本 <= 2.9,请参阅旧版 Pushwoosh Phonegap 插件: https ://github.com/shaders/phonegap-cordova-push-notifications/tree/master/iOS

我希望它有帮助!

于 2013-09-24T13:33:46.847 回答
0

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

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:00:06.980 回答