0

我正在使用 phonegap 为用户开发 IOS 应用程序,并且我为应用程序做一个推送通知,请按照此处的教程进行操作:

http://devgirl.org/2012/10/19/tutorial-apple-push-notifications-with-phonegap-part-1/

而且我在注册设备令牌时遇到问题。我想将 deviceToken 从 xcode 代码存储在 javascript 中,但我不知道为什么我使用 phonegap 开发应用程序的任何 Objective-C 语言。我尝试研究如何在 Xcode 中找到 deviceToken。然后示例显示在这里

   - (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
  {
    NSLog(@"My token is: %@", deviceToken);
  }

我如何将 deviceToken 字符串变量转换为 javascript?可以这样做吗?

4

2 回答 2

3

我编写了您正在使用的教程,其中有一个指向github上的示例的链接,该示例实际上使用了带有 PhoneGap 的通用 PushNotification 插件。在示例代码中,您可以看到它使用插件传回设备令牌,以便您可以从 JavaScript 中存储它。

这是您在使用插件的示例中在 Objective-c 中引用的方法:

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
    NSLog(@"Calling push notification next, my registered token is: %@", deviceToken);
    // Code for phonegap communication - calls this method in PushNotification.m
    PushNotification* pushHandler = [self.viewController getCommandInstance:@"PushNotification"];
    [pushHandler didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
}

它在以下调用 PushNotification 插件代码:

- (void)didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    NSLog(@"didRegisterForRemoteNotificationsWithDeviceToken:%@", deviceToken);
    DLog(@"didRegisterForRemoteNotificationsWithDeviceToken:%@", deviceToken);

    NSString *token = [[[[deviceToken description] stringByReplacingOccurrencesOfString:@"   <"withString:@""]
                    stringByReplacingOccurrencesOfString:@">" withString:@""]
                   stringByReplacingOccurrencesOfString: @" " withString: @""];

    NSMutableDictionary *results = [PushNotification getRemoteNotificationStatus];
    [results setValue:token forKey:@"deviceToken"];   
    CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:results];
    [self writeJavascript:[pluginResult toSuccessCallbackString:[self.callbackIds valueForKey:@"registerDevice"]]];

}

然后在 JavaScript 中,您可以从回调中引用它:

register: function() {
    var pushNotification = window.plugins.pushNotification;
    pushNotification.registerDevice({alert:true, badge:true, sound:true}, function(status) {
        app.myLog.value+=JSON.stringify(['registerDevice status: ', status])+"\n";
        app.storeToken(status.deviceToken);
    });
},
storeToken: function(token) {
    console.log("Token is " + token);
    ...
}    

查看完整的示例代码和我的教程以获取更多详细信息...

希望有帮助:)

于 2012-12-07T11:23:25.583 回答
0

将以下两行代码放入您didRegisterForRemoteNotificationsWithDeviceTokenAppDelegate.m

NSString* jsString = [NSString stringWithFormat:@"var deviceToken = \"%@\";", deviceToken];
    [self.viewController.webView stringByEvaluatingJavaScriptFromString:jsString];

在 JS 文件中访问 DeviceToken 为

DeviceToken = (typeof deviceToken !== "undefined") ? deviceToken : "";

并根据您的要求使用 DeviceToken。

于 2014-11-28T14:30:10.890 回答