如何在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】:

将以下两行代码放入您的didRegisterForRemoteNotificationsWithDeviceTokenAppDelegate.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)

cordova pushplugin 无法在 iOS 中获取设备令牌

设备令牌在开发中注册良好,但不是生产

未收到 Phonegap iOS 推送通知