如何在phonegap ios中将设备令牌从Xcode抓取到javascript?
Posted
技术标签:
【中文标题】如何在phonegap ios中将设备令牌从Xcode抓取到javascript?【英文标题】:How to grab device Token from Xcode to javascript in phonegap ios? 【发布时间】:2012-12-07 05:16:52 【问题描述】:我正在使用 phonegap 为用户开发 ios 应用程序,并且我为应用程序进行推送通知,请按照此处的教程进行操作:
http://devgirl.org/2012/10/19/tutorial-apple-push-notifications-with-phonegap-part-1/
而且我在注册设备令牌时遇到问题。我想从 xcode 代码将 deviceToken 存储在 javascript 中,但我不知道为什么我使用 phonegap 开发应用程序的任何客观 C 语言。我尝试研究如何找到 deviceToken在 Xcode 中。然后在此处显示示例
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
NSLog(@"My token is: %@", deviceToken);
如何将 deviceToken 字符串变量转换为 javascript?可以这样做吗?
【问题讨论】:
如果你不知道objective-c,为什么不使用一个关心推送通知的插件呢? github上有一个不错的:github.com/phonegap/phonegap-plugins/tree/master/iPhone/… 嗯,我的意思是这个:github.com/phonegap/phonegap-plugins/tree/master/iOS/…。但是源已经没有了,可能该插件不再适用于较新的phonegap版本,因为它们改变了插件机制。 【参考方案1】:我编写了您正在使用的教程,其中有一个指向 sample on 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);
...
查看完整示例代码和my tutorial 了解更多详情...
希望有帮助:)
【讨论】:
【参考方案2】:将以下两行代码放入您的didRegisterForRemoteNotificationsWithDeviceToken
或AppDelegate.m
NSString* jsString = [NSString stringWithFormat:@"var deviceToken = \"%@\";", deviceToken];
[self.viewController.webView stringByEvaluatingJavaScriptFromString:jsString];
在 JS 文件中访问 DeviceToken 为
DeviceToken = (typeof deviceToken !== "undefined") ? deviceToken : "";
并根据您的要求使用 DeviceToken。
【讨论】:
以上是关于如何在phonegap ios中将设备令牌从Xcode抓取到javascript?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 phonegap/javascript iOS 读取设备令牌 (parse.com)
Phonegap 插件推送在 iOS 13 及更高版本上返回奇怪格式的 iOS 设备令牌
关于如何将 APN 的设备令牌链接到注册用户的建议(通过 phonegap 或 UIWebView)