iOS集成Dcloud

1 .参考链接

http://ask.dcloud.net.cn/docs/#http://ask.dcloud.net.cn/article/83
http://ask.dcloud.net.cn/docs/#http://ask.dcloud.net.cn/article/84

2 .注意官方介绍的这句。

注意开发者在使用示例工程时建议不要把工程从SDK目录里挪出来,如果要移动工程可以通过修改library search path ,framework search path 和head search path来解决报错。
因为sdk太大,所以不建议拉进去的,因此放在目录中,根据需要添加库,git上传时忽略该文件夹,打开.gitignore 添加/SDK。
serach 下配置
Framework search paths
$(PROJECT_DIR)/SDK/libs/Release-iphoneos
$(PROJECT_DIR)/CloudStore/Share/Bundles
$(PROJECT_DIR)/SDK/libs/Release-iphonesimulator
Header search paths
$(SRCROOT)/SDK/inc recursive
library search paths
$(PROJECT_DIR)/SDK/libs/Release-iphoneos
$(PROJECT_DIR)/CloudStore/Share/Bundles

中间那个可以拉inc那个文件。我是拉进去编译的。你也可以拉进去不编译。

3.最重要的配置

根据这个文件Feature-iOS配置 other linker flags

同时需要注意下下面几个,可能不一样。
ui和个推sdk还有nativeui注意

4.返回按钮

oc代码
- (void)button3Click{
//启动h5工程
    NSString *pWWWPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Pandora/apps/H586661F4/www"];
    pAppHandle = nil;
    //这里自己创建一个view 代替官方代码里面的self.view
    view = [[UIView alloc] initWithFrame:self.view.bounds];
    view.backgroundColor = [UIColor whiteColor];
    view.tag = 22;
    [self.view addSubview:view];
    [[PDRCore Instance] setContainerView:view];
    pAppHandle = [[[PDRCore Instance] appManager] openAppAtLocation:pWWWPath withIndexPath:@"/html/goods/search.html" withArgs:nil withDelegate:nil];
    [[[PDRCore Instance] appManager] restart:pAppHandle];
    [[NSNotificationCenter defaultCenter]  addObserver:self selector:@selector(textClose:) name:@"CloseWebAPP" object:nil];

}

- (void)textClose:(NSNotification *)not{
    //不要在消息触发的方法里关闭应用需要使用异步的方式关闭APP
    [self performSelectorOnMainThread:@selector(classWebApp) withObject:nil waitUntilDone:NO];
}

- (void)classWebApp{
    //调用AppManager的方法关闭应用
    [[PDRCore Instance].appManager end:pAppHandle];
    //需要把h5所在的页面从主View中移除   我这样直接把h5所在的页面的父view置为nil
    for (UIView *subviews in [self.view subviews]) {
        if (subviews.tag==22) {
            [subviews removeFromSuperview];
        }
    }

}
js代码varnotiClass = plus.ios.importClass("NSNotificationCenter");
notiClass.defaultCenter().postNotificationNameobject("CloseWebAPP",null);

下面是我这部分的代码,主要是根据上面的参考和官方的参考,使用的是widget模式。webview和app模式试了下好像不太行。

[[NSNotificationCenter defaultCenter]  addObserver:self selector:@selector(textClose:) name:@"CloseWebAPP" object:nil];
    //0为widget  1为webview  2为app模式,
    int jhb = 0;
    switch (jhb) {
        case 0:
        {
            //代理 基本是修改样式
            h5Engine.coreDeleagete = self;
            //设置runtime根视图的父亲View
            [h5Engine setContainerView:_containerView];
            //设置5+Runtime ViewContoller
            h5Engine.persentViewController = self;
            [h5Engine showLoadingPage];
            dispatch_async(dispatch_get_main_queue(), ^(void) {
                [h5Engine start];
            });
        }
            break;
        case 1:
        {

            if (h5Engine != nil)
            {
                [h5Engine startAsWebClient];
                NSString* pFilePath = @"http://www.baidu.com";
                NSString* pFilePath = @"http://192.168.60.109/cloudstore/html/index.html";
                CGRect StRect = CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height - 20);
                PDRCoreAppFrame* appFrame = [[PDRCoreAppFrame alloc] initWithName:@"WebViewID1" loadURL:pFilePath frame:StRect];
                [h5Engine.appManager.activeApp.appWindow registerFrame:appFrame];
                [_containerView addSubview:appFrame];
                [self.view addSubview:_containerView];

            }

        }
            break;
        case 2:{

            //  webapp模式 本地应用
                PDRCoreApp* pAppHandle = nil;
            //    设置WebApp所在的目录,该目录下必须有mainfest.json
                NSString *pWWWPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Pandora/apps/com.baobeigou.b2b/www"];
            //    如果路径中包含中文,或Xcode工程的targets名为中文则需要对路径进行编码
                NSString* pWWWPath2 =  (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes( kCFAllocatorDefault, (CFStringRef)pWWWPath, NULL, NULL,  kCFStringEncodingUTF8 ));
            //    这里自己创建一个view 代替官方代码里面的self.view
                UIView* view = [[UIView alloc] initWithFrame:self.view.bounds];
                view.backgroundColor = [UIColor whiteColor];
                view.tag = 23;
                [self.view addSubview:view];
            //    设置5+SDK运行的View
                [[PDRCore Instance] setContainerView:view];
            //    传入参数可以在页面中通过plus.runtime.arguments参数获取.可不传
            //    NSString* pArgus = @"id=plus.runtime.arguments";
            //   创建app
                pAppHandle = [[[PDRCore Instance] appManager] openAppAtLocation:pWWWPath withIndexPath:@"index.html" withArgs:nil withDelegate:nil];
            //   如果应用可能会重复打开的话建议使用restart方法
                [[[PDRCore Instance] appManager] restart:pAppHandle];

        }
            break;
        default:{
            NSLog(@"输入h5运行模式");
        }
            break;
    }

可以参考

返回按钮http://www.jianshu.com/p/fff3f2ff99c9

其他http://www.jianshu.com/p/d9050a1b765e

上文可能有点乱。

下文runtime只是指h5那个环境下的runtime。
h5环境的runtime关闭时越狱机可能会奔溃,有点坑没有找到原因。
为了用户体验,点击h5这个模块不需要再等待几秒,app开启时直接跑起runtime了,记得单例下这个控制器,内存是增加了(不过好像退出界面关闭runtime的话,内存增加以后也没明显的减下来),一开始还担心审核过不了,毕竟配置项太多,大家注意上线前需要去官网搜下审核,manifest这边配置不要被坑了。没通知的话appdele那边那些通知需要隐藏掉,不然审核也过不了。还有由于h5那边账号同步的原因,所以账号登出的时候,我关闭runtime,登录成功的时候重启runtime。解决了账号不同步时,判断不加载,然后卡死在h5环境的情况下只能退出app。

关于优化(未实施):后台模式时关闭runtime 切换前台时开启。iOS系统自己优化内存好像也是有效的。

需求(未实施),根据传参判断进不同页面,所以记得控制器需要单例。还有返回页面判断下控制器类型。返回类型pop还是dismiss,这部分只是涉及到项目中一个广告页是模态化去h5模块的。

时间: 2024-10-12 15:07:53

iOS集成Dcloud的相关文章

无处不在,详解iOS集成第三方登录(SSO授权登录<无需密码>)

1.前言 不多说,第三登录无处不在!必备技能,今天以新浪微博为例. 这是上次写的iOS第三方社交分享:http://www.cnblogs.com/qingche/p/3727559.html 可以和今天的一起集成使用. 2.集成前的准备工作 2.1.去ShareSDK(现为Mob)注册帐号,下载SDK,然后添加自己的应用后得到AppKey 下载地址:http://sharesdk.cn/Download 2.2.申请第三方登录的Appkey 例如: 新浪微博.腾讯微博.QQ.微信.豆瓣应用.人

iOS 集成银联支付(绕过文档的坑,快速集成)

iOS 集成银联支付(绕过文档的坑,快速集成) 本文是投稿文章,作者:南栀倾寒当初集成支付宝的时候,觉得见了这么丑的代码,加上这么难找的下载地址,在配上几乎为零的文档,寒哥就要吐血了. 下午去集成银联,才知道血吐的早了. 下载地址:https://open.unionpay.com/upload/download/Development_kit85427986.rar 其实我找了半个小时 也不知道怎么就下载好了 这个我在Chrome的下载记录里找到的 解压之后会有这样的目录结构 Paste_Im

iOS集成支付宝

需要企业和支付宝签约这个是需要审核的[3天左右   以邮件形式告知你] 使用支付宝进行一个完整的支付功能,大致有以下步骤: 1>先与支付宝签约,获得商户ID(partner)和账号ID(seller) (这个主要是公司的负责) 2>下载相应的公钥私钥文件(加密签名用) 3>下载支付宝SDK(登录网站:http://club.alipay.com/)里面提供了非常详细的文档.如何签约.如何获得公钥私钥.如何调用支付接口. 4>生成订单信息 5>调用支付宝客户端,由支付宝客户端跟

iOS- 无处不在,详解iOS集成第三方登录(SSO授权登录<无需密码>)

1.前言 不多说,第三登录无处不在!必备技能,今天以新浪微博为例. 这是上次写的iOS第三方社交分享:http://www.cnblogs.com/qingche/p/3727559.html 可以和今天的一起集成使用. 2.集成前的准备工作 2.1.去ShareSDK(现为Mob)注册帐号,下载SDK,然后添加自己的应用后得到AppKey 下载地址:http://sharesdk.cn/Download 2.2.申请第三方登录的Appkey 例如: 新浪微博.腾讯微博.QQ.微信.豆瓣应用.人

iOS集成极光推送

iOS集成极光推送 一.配置APNs 苹果APNs(英文全称:Apple Push Notification Service) 1.配置开发证书 ![Uploading apns_13_803165.png -] 2.配置生产证书 和配置开发证书的流程相同. 3.将配置好的证书导出为 .p12 文件 一.注册极光推送帐号 可登录 极光推送官网 注册帐号. 注册成功后进入控制台 二.集成极光推送SDK sdk地址 我使用的是JPush-iOS-SDK-2.1.0.下载的文件里有个pdf文件iOS+

iOS 集成百度地图 位置偏移问题

iOS 集成百度SDK 请参考 百度地图官方文档 ,这里不就多啰嗦了 本文介绍的是在百度地图上根据经纬度,自定义气泡时,气泡位置的偏移,在我们天朝这种事是很常见的,也见怪不怪了,在项目中使用的百度地图的SDK,位置各种不对,百度地图和其他地图,如高德,他们都有自己的偏移算法,网上也有很多譬如 火星坐标转换之类的,都不能达到准备显示的效果. 其实百度SDK 有他自己偏移算法,使用百度偏移转换就可以了 BMKPointAnnotation *annotation = [[BMKPointAnnota

iOS集成alipay无线应用sdk错误问题

今天下载alipay无线应用sdk,首选感觉:我靠,藏的真深!下载后commad+R发现报错了.具体错误信息如图: 解决办法是将library search paths 里面的东西去掉所有的\\\  坑爹啊!如图: iOS集成alipay无线应用sdk错误问题

IOS:IOS集成开发和环境的介绍

集成开发环境的介绍 Xcode :iOS集成开发环境,也是编辑器,负责管理应用程序工程. Interface Builder:快速原型开发工具,可视化的组装用户UI接口的工具,在 Xcode 4.0以后集成到了Xcode中. Instruments:功能强大的性能调试工具,以及内存分析工具. iPhone Simulator:Mac OS X平台应用程序,它是模拟应用程序在真机上运行的 一个环境,但是并不能完全模拟所有功能. iOS SDK:iOS软件开发工具包

shareinstall之IOS集成

提示:以下代码(配置)由shareinstall根据当前应用动态生成,开发者可直接使用:按照以下步骤指引,10分钟即可完成IOS SDK集成.一.产品原理精确的App安装来源与携带参数安装 :shareInstall的核心价值在于,帮助Android/iOS开发者通过shareInstall提供的sdk,精确的获取app每一次安装的分享(或推广)来源.原理如下:开发者在分享的h5页面上集成 shareInstall web sdk,发布分享链接时在url上动态的拼接任意的自定义参数(如推广渠道号