IOS PhoneGap项目调用NATIVE

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

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

①.注册推送

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

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

1
2
3
4
5
6
7
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{<br>  //得到token {xxxxx-xxxx-xxx}
   NSString *newToken = [deviceToken description];<br>  //截取中间部分
   NSString *token =  [newToken substringWithRange:NSMakeRange(1, newToken.length-2)];<br>  //去掉空格
   NSString *temp =  [token stringByReplacingOccurrencesOfString:@" " withString:@""];<br>  //持久化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"]]; [self.commandDelegate 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>
//    //等待加载PhoneGap
    document.addEventListener("deviceready", onDeviceReady, false);
    // PhoneGap加载完成
  //调用native,必须是在设备准备好之后才能调用
function onDeviceReady() { var echo = MyIOSPlugin.nativeFunction("getToken",[‘‘], function(result) { }, function(error) { } );
     //echo就是我们通过调用navite获取我们刚才得到的设备ID window.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

 

IOS PhoneGap项目调用NATIVE,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。