1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > IOS PhoneGap项目调用NATIVE

IOS PhoneGap项目调用NATIVE

时间:2019-05-31 16:51:59

相关推荐

IOS PhoneGap项目调用NATIVE

1.今天项目需要为PhoneGap项目,添加推送功能,网上搜了一大片,折腾了一会,总算折腾出来了,记录一下

分析一下思路,1,需要获得deviceToken,2,js获取TOKEN

①.注册推送

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions{//注册推送 [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];}

②.获得token,并且放入UserDefault中

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken{

//得到token {xxxxx-xxxx-xxx}NSString *newToken = [deviceToken description];

//截取中间部分NSString *token = [newToken substringWithRange:NSMakeRange(1, newToken.length-2)];

//去掉空格NSString *temp = [token stringByReplacingOccurrencesOfString:@" " withString:@""];

//持久化token[[NSUserDefaults standardUserDefaults] setObject:temp forKey:@"token"];}

二、调用Navite代码,获取token

①.创建插件,可以再plugins文件夹下创建

②.MyPlugin.h

#import <Cordova/CDVPlugin.h>@interface MyPlugin : CDVPlugin- (void) getToken:(CDVInvokedUrlCommand*) command;@end

MyPlugin.m

#import "MyPlugin.h"@implementation MyPlugin- (void) getToken:(CDVInvokedUrlCommand*) command{CDVPluginResult* pluginResult = nil;// NSString* echo = [command.arguments objectAtIndex:0];// if (echo != nil && [echo length] > 0) {// pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:echo];// } else {// pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR];// }

//从UserDefault中取的token,并且封装成结果返回

//如果是别的逻辑处理,记得吧结果封装就可以了

pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:[[NSUserDefaults standardUserDefaults] objectForKey:@"token"]];[mandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];}

③.在config.xml中配置我们的插件

<!-- Deprecated plugins element. REmove in 3.0 --><plugins>

//name为JS调用时的名字<feature name="myPlugin">

//name不能改变 value为我们刚才创建的插件名字<param name="ios-package" value="MyPlugin" /></feature></plugins>

④.封装一下调用方法

创建一个通用JS,MyPlugin.js

var MyIOSPlugin = {/*** 调用IOS方法* @param method 要调用IOS插件的方法名* @param parameter 参数[数组]* @param success 成功回调* @param fail 失败回调* @returns {*}*/nativeFunction: function(method, parameter, success, fail) {return Cordova.exec(success, fail, "myPlugin", method, parameter);}};

⑤.测试一下

在index.html页面中引入刚才的MyPlugin.js

然后index.html写

<script>// //等待加载PhoneGapdocument.addEventListener("deviceready", onDeviceReady, false);// PhoneGap加载完成

//调用native,必须是在设备准备好之后才能调用

function onDeviceReady(){var echo = MyIOSPlugin.nativeFunction("getToken",[''],function(result) {},function(error) {});

//echo就是我们通过调用navite获取我们刚才得到的设备IDwindow.device=echo;}</script>

使用phoneGap打包时候,target=7.0一下的时候遇到了问题,这样解决

Property 'edgesForExtendedLayout' not found on object of type 'LAViewController *'Use of undeclared identifier 'UIRectEdgeNone'

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000

#define IOS7_SDK_AVAILABLE 1

#endif

#ifdef IOS7_SDK_AVAILABLE

//把这段代码包起来,如果系统是ios7则执行这个方法

if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) {

self.edgesForExtendedLayout = UIRectEdgeNone;

}

#endif

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。