ios html5上架,iOS原生集成H5+详细流程

iOS原生集成H5+

集成方式

独立应用方式集成

Widget方式集成

WebView方式集成

可以打开官方链接: 选择 5+SDK -> 5+SDK集成 -> 平台 下查看集成方式

独立应用方式: 官方Demo中的实现, 独立的App, 感觉上和直接在HBuilder创建App相同, 可以方便证书导入这些步骤吧

Widget方式: 模块部分的扩展使用

WebView方式: 单独界面的扩展使用

白皮书原话: 在使用中,如果需要显示多个H5页面,建议使用Widget集成方式,如果只有一个H5页面,建议使用WebView集成方式

集成过程

导入SDK相关文件

8cf2139e561c

Snip20170507_10.png

8cf2139e561c

Snip20170507_6.png

导入Pandora相关文件

8cf2139e561c

Snip20170507_13.png

8cf2139e561c

Snip20170507_14.png

修改编译配置

配置Build Setting

搜索 Other Linker Flags , 配置下拉列表中添加-ObjC

搜索 Enable Bitcode, 配置为 NO

配置info.plist, target -> Info

添加NSAppTransportSecurity字段 -> NSAllowsArbitraryLoads为YES

URL Types -> + -> URL Schemes框配置为 * hbuilder*

写调用SDK代码编译, 报错按照错误提示导入库, 直到编译成功

/// AppDelegate

#import "PDRCore.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

/// 指定5+SDK的模式

return [PDRCore initEngineWihtOptions:launchOptions withRunMode:PDRCoreRunModeNormal];

}

- (void)applicationWillTerminate:(UIApplication *)application {

[PDRCore destoryEngine];

}

@end

#import "PDRCore.h"

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// 独立应用方式加载

// [self start5pAsNormal];

}

/// 满足一些条件调用

- (void)doSomething {

// Widget方式加载

// [self start5pAsWidget];

// WebView方式加载

// [self start5pAsWebView];

}

- (void)start5pAsNormal {

PDRCore *core = [PDRCore Instance];

if (!core) return;

[core setContainerView:self.view];

[core start];

}

- (void)start5pAsWidget {

PDRCore *core = [PDRCore Instance];

if (!core) return;

// 设置WebApp所在的目录,该目录下必须有mainfest.json

NSString* pWWWPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Pandora/apps/H5Demo/www"];

// 设置5+SDK运行的View

[core setContainerView:self.view];

// 传入参数可以在页面中通过plus.runtime.arguments参数获取

NSString* pArgus = @"id=plus.runtime.arguments";

// 启动该应用

_coreApp = [[core appManager] openAppAtLocation:pWWWPath withIndexPath:@"index.html" withArgs:pArgus withDelegate:nil];

// 如果应用可能会重复打开的话建议使用restart方法

// [[core appManager] restart:_coreApp];

}

- (void)start5pAsWebView {

PDRCore *core = [PDRCore Instance];

if (!core) return;

// 单页面集成时可以设置打开的页面是本地文件或者是网络路径

NSString* pFilePath = [NSString stringWithFormat:@"file://%@/%@", [NSBundle mainBundle].bundlePath, @"Pandora/apps/H5Dome/www/index.html"];

_appFrame = [[PDRCoreAppFrame alloc] initWithName:@"WebViewID1" loadURL:pFilePath frame:CGRectOffset(self.view.frame, 0, 20)];

// 单页面运行时设置Document目录

NSString* pStringDocumentpath = [NSString stringWithFormat:@"%@/Pandora/apps/H5Dome/www/", [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0]];

[core.appManager.activeApp.appInfo setWwwPath:pStringDocumentpath];

[core.appManager.activeApp.appWindow registerFrame:_appFrame];

[self.view addSubview:_appFrame];

}

@end

匹配 模式(PDRCoreRunMode) 与 启动该模式(how start) 的代码, 否则很容易掉坑里

Demo中其他处理, AppDelegate / ViewController 都可以参照

解决Undefined symbols for architecture xxx: “xxx”, referenced from: 的错误提示

8cf2139e561c

屏幕快照 2017-05-06 23.14.25.png

首先使用官方文档

8cf2139e561c

屏幕快照 2017-05-06 23.14.57.png

导入对应库

8cf2139e561c

Snip20170506_1.png

还有无法匹配的错误, 自行google / baidu

实验结果总结

独立应用方式与Widget方式确实相似, 区别部分

/// AppDelegate中

/// 独立应用方式: 配置为 PDRCoreRunModeNormal

/// Widget方式: 配置为 PDRCoreRunModeAppClient

[PDRCore initEngineWihtOptions:launchOptions withRunMode:PDRCoreRunMode];

/// 配置并启动5+SDK环境

/// 独立应用方式: 直接在启动后的根控制器中设置即可

/// Widget方式: 在需要用启动的位置设置即可

PDRCore *core = [PDRCore Instance];

if (!core) return;

[core setContainerView:self.view];

[core showLoadingPage]; // 展示启动页(读取页)

dispatch_async(dispatch_get_main_queue(), ^(void) {

/// 独立应用方式: 下面俩种都可以开启

/// Widget方式: 必须使用第二种开启

[core start];

// [[core appManager] openAppAtLocation:[[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Pandora/apps/HelloH5/www"] withIndexPath:@"index.html" withArgs:@"id=plus.runtime.arguments" withDelegate:nil];

});

相关资源链接

本项目是即时通讯 APP,主要功能有群聊、私聊、朋友圈、可以发送文字、语音、视频、图片、表情、红包等。消息可以撤回, 群组可以设置管理员、可以禁言、踢人,能设置能否可查看客户信息,可@客户等,支持扫码入群,能设置好友备注、群名片、消息置顶、消息免打扰等,拥有代理商功能,vip 功能,签到功能,支持消息离线推送(ios 无需上架,Android 需要上应用商店) 后端可以设置客服和网站管理,可以通过后端给客户发消息,可以清除群聊天记录,也可以撤回客户消息,能设置具体的参数,可推荐具体的群等 本系统发送消息采用异步推送以及缓存技术,消息秒推送,即便服务器配置低,客户也感觉不到卡慢,图片浏览之后直接实时预览,无需等待上传。 APP 端历史聊天记录、图片以及前台程序缓存在本地,页面秒开,支持云端同步聊天记录,断网状态页面之间也可以切换,流畅性媲美原生。 技术路线: 后台开发语言:PHP (原生架构) 前台开发语言:uniapp socket 推送:GateWayWorker(支持分布式部署,高并发,抗压能力强,未采用第三方付费推送服务) 数据库:mysql 开发工具:hbuiderX,phpstorm 目前支持 android、ios,pc,h5,不提供 ios 签名、软著申请、上架服务等。 服务器配置 : 服务器操作系统: Linux Centos 7 软件环境: php 5.6 +Apache2.4+MySQL5.6 (推荐使用宝塔) 前台功能详情: 登录注册:客户名密码登录、注册、邀请注册,不记得密码(通过短信验证找回密码) 好友:可发文字、语音(仅限 APP)、图片、视频、表情、红包;图片可预览,支持缓存;内置浏览器可自动提取并打开超链接,单一的超链接可以提取到标题和简介; 群组:显示群聊信息、群聊二维码、管理员权限,可禁言 可撤回消息,可全局禁言也可单独禁言,能设置用能否可以查看客户信息,可@群友,能设置群名片、能设置能否可以发送超链接,能否可以修改昵称、可发群声明 消息:可置顶消息,能设置免打扰 联络人:可备注、可按客户名、昵称查找联络人和群组 消息助手:注册自动增加,无法删除,后端管理员可通过助手发送消息 客服:后端可以设置多个客服,注册之后随机增加或者者一律增加,客服有具体的标识 第三方网站:可嵌入多个第三方网站,后端能设置名称和链接,能设置在哪个端显示。 扫一扫:可扫第三方网站,可以扫码进群,可扫码加好友、扫码登录 朋友圈(仅限手机端):可发送文字、图片,可以点赞评论 个人设置:设置资料(头像、昵称、所在地、性别、个性签名等),修改密码,消息提示设置(响铃或者者震动)、银行卡绑定等。 代理商中心:设置邀请链接、邀请二维码,手动增加客户、管理查看我的团队成员等。 VIP 中心:VIP 分个人 VIP 和团队 VIP,个人 vip 仅限自己使用,团队 vip 可以给下级开通个人 vip 我的钱包:显示余额、充值、提现、账单流水。 APP 端消息离线推送:集成 unipush(个推),ios 无需上应用商店,但需要 push 的签名,Android 端离线推送需要上应用商店(申请软著并且域名备案) 后端功能详情: 系统设置:系统参数设置、APP 参数设置、vip 参数设置、充值充值提现设置、第三方网站设置、汇款账户设置等 客户管理:可查看、修改、删除客户信息、可给客户通过官方账号发私信、能设置具体的客服、可管理投诉信息 群组管理:查看群组的信息、可修改群组信息、可解散群组、可清空指定群组的聊天记录 聊天记录:聊天记录分个人聊天记录和群聊记录,可以查看客户的聊天记录、可删除 登录日志:显示每个客户的登录时间、ip、所在地 资金管理:充值管理、提现管理、账单等 角色管理:可以根据不同功可设置不同的角色 管理员管理:新添加、删除、修改管理员 操作日志:查看管理员操作日志 修改密码:修改当前登录账号的密码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值