资讯专栏INFORMATION COLUMN

OpenApplus小程序容器

neuSnail / 2985人阅读

摘要:参数格式为,其中为,仅支持一层字典否调用成功的回调函数否调用失败的回调函数否调用结束的回调函数调用成功失败都会执行警告框。

概述

OpenApp+ 一个小程序容器,配置简单、功能完善、界面流畅、开箱即用!使用OpenApp+可以快速扩展你的APP,使其拥有与微信一样的功能扩展可能,让App的所有的功能都通过小程序来实现,动态更新,更快的响应用户需求。其拥有的管理具备版本管理功能,让功能发布更加随心。

集成SDK 获得 AppKey

在平台上注册帐号,可以任意添加新 App,每一个 App 都有一个唯一的 AppKey 作为标识,平台提供客户端的AppKey、Appsecret和服务端的AppKey、Appsecret以便接入

iOS集成 Cocoapods 安装

推荐使用 CocoaPods 的方式安装使用。

CocoaPods 是一个广泛适用于Objective-C依赖管理工具,能够自动配置项目,简化你配置Openapp+的过程,使用以下命令行安装

$ gem install cocoapods

OpenApplus 安装

使用CocosPods集成Openapp+到Xcode,需要编写/podspec/OpenApplus.podspec文件

</>复制代码

  1. Pod::Spec.new do |s|
  2. s.name = "OpenApplus"
  3. s.version = "1.0.0"
  4. s.summary = "OpenApplus framework"
  5. s.homepage = "http://github.com/linwaiwai/openapplus"
  6. s.license = { :type => "OpenApplus License, Version 1.0.0", :text => <<-LICENSE
  7. Licensed under the OpenApplus License, Version 1.0.0 (the "License");
  8. you may not use this file except in compliance with the License.
  9. LICENSE
  10. }
  11. s.author = "linwaiwai"
  12. s.platform = :ios, "6.0.0"
  13. s.source = { :git => "https://github.com/linwaiwai/openapplus.git", :branch => "master"}
  14. s.frameworks = "UIKit"
  15. s.requires_arc = true
  16. s.dependency "SDWebImage", "3.7.5"
  17. s.dependency "SSZipArchive", "1.6.2"
  18. s.dependency "SVProgressHUD", "2.1.2"
  19. s.dependency "Masonry", "1.0.2"
  20. s.dependency "UMengUShare/Social/WeChat", "6.3.0"
  21. s.dependency "MJRefresh", "3.1.12"
  22. s.dependency "libextobjc", "~> 0.4.1"
  23. s.dependency "AFNetworking"
  24. s.dependency "OpenUDID"
  25. s.subspec "OpenApplus" do |ss|
  26. ss.vendored_frameworks = "*.framework"
  27. ss.vendored_libraries = "*.a"
  28. ss.source_files = "*.h"
  29. ss.resource = "*.bundle"
  30. end
  31. end
在Podfile文件加入

</>复制代码

  1. source "https://github.com/CocoaPods/Specs.git"
  2. platform :ios, "8.0"
  3. #忽略引入库的警告
  4. inhibit_all_warnings!
  5. target "openapplus-ios-demo" do
  6. pod "OpenApplus", :podspec => "./podspec/OpenApplus.podspec"
  7. end
在工程中Info.plist文件中添加如下项

</>复制代码

  1. NSAppTransportSecurity
  2. NSAllowsArbitraryLoads
运行

在 AppDelegate.m 里按顺序调用三个方法:

1、调用 +startWithAppKey: ,参数为第一步获得的 AppKey。

2、调用 +sync 方法检查包更新。

在AppDelegate.m或ViewController.m中调用 navigateToMiniProgram: 加载小程序项目,参数为在平台中创建的项目的名称。

</>复制代码

  1. #import <"openapplus/openapplus.h">
  2. @implementation AppDelegate
  3. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  4. UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:testViewController];
  5. self.window.rootViewController = navigationController;
  6. [self.window makeKeyAndVisible];
  7. [OpenApplus startWithAppKey:@"test"];
  8. [OpenApplus sync];
  9. [OpenApplus setNavigationController:navigationController];
  10. // JS_APPID 为小程序的APP_ID
  11. [OpenApplus navigateToMiniProgram:@"openapplus://jsApp/#JS_APPID#" completion:^{
  12. }];
  13. ...
  14. }
  15. @end

上述例子是把 Openapplus 同步放在 -application:didFinishLaunchingWithOptions: 里,若希望包能及时推送,可以把 [OpenApplus sync] 放在 -applicationDidBecomeActive: 里,每次唤醒都能同步更新 OpenApplus 包,不需要等用户下次启动。

Android集成 Android Studio集成

下载SDK功能组件,解压.zip文件得到相应组件包(openapplus-release.aar),在Android Studio的项目工程libs目录中拷入相关组件jar包。

右键Android Studio的项目工程—>选择Open Module Settings —>在 Project Structure弹出框中 —>选择 Dependencies选项卡 —>点击左下“+”—>选择组件包类型—>引入相应的组件包。

运行

在项目工程的自定义application中的onCreate方法中添加以下两个方法:
注意:一定要在主进程进行该项操作

</>复制代码

  1. OpenApplus.registerApp(this, SampleContants.APPID, SampleContants.APP_SECRET);
  2. OpenApplus.sync();
  3. OpenApplus.setCallback(new OpenApplusCallback() {
  4. @Override
  5. public void invoke(OACallbackType type, JSONObject data, OpenApplusNotify notify) {
  6. if (type == OACallbackType.OACallbackTypeAuthUser){
  7. // 该接口仅供测试使用,请使用服务端发送给授权请求
  8. OARequestWrapper requestWrapper = OpenApplus.makeRequestWrapper(SampleContants.SERVER_APPID, SampleContants.SERVER_APP_SECRET);
  9. OAAuthDtoWrapper dto = new OAAuthDtoWrapper();
  10. dto.setUid("1");
  11. try {
  12. dto.setCode(data.getString("code"));
  13. } catch (JSONException e) {
  14. e.printStackTrace();
  15. }
  16. String deviceID = Settings.Secure.getString(WXEnvironment.sApplication.getApplicationContext().getContentResolver(),
  17. Settings.Secure.ANDROID_ID);
  18. dto.setDeviceid(deviceID);
  19. requestWrapper.sendObject(dto, notify);
  20. }
  21. }
  22. });

注意:

参数1:上下文,必须的参数,不能为空

参数2:OpenApplus app key,必须参数。

参数3:OpenApplus app secret,必须参数。

添加相关权限

</>复制代码

代码混淆

如果您的应用使用了混淆, 请添加

</>复制代码

  1. -keep class com.openapplus.** {*;}
添加Activty入口

在AndroidManifest.xml中添加

</>复制代码

启动小程序容器

</>复制代码

  1. Intent intent = new Intent(SplashActivity.this, OATinyProgramActivity.class);
  2. intent.putExtra("tiny","openapplus://jsApp/xxxxx");
  3. startActivity(intent);
  4. finish();
小程序 API 授权登录流程 一、App接入 第一步:获取服务端的AppKey、AppSecret、AppKey、JsAppsecret

在进行OpenApp+ OAuth2授权登录接入之前,在开放平台注册【http://www.openapplus.com/】开发者帐号,并拥有一个已审核通过的网站应用, 获取应用的AppKey、AppSecret,并获得相应的服务端的JsAppKey、JsAppsecret,申请OpenApp+登录且通过审核后,可开始接入流程。

第二步:配置App的授权接口

</>复制代码

  1. [OpenApplus startWithAppKey:@"AppKey" andSecret:@"AppSecret"];
  2. NSString *uid = @"111";
  3. [OAConfiguration setUserIdentify:uid];
  4. [OpenApplus setupCallback:^(OACallbackType type, id data, OpenApplusNotify notify, NSError *error) {
  5. switch (type) {
  6. case OACallbackTypeAuthUser: {
  7. // http://www.openapplus.com/auth/auth,请求该接口获取token和超时时间
  8. OAContainerAuthObject *containerAuthObject = [[OAContainerAuthObject alloc] init];
  9. containerAuthObject.token = @"";
  10. containerAuthObject.expired = @"";
  11. notify(containerAuthObject, nil);
  12. // 使用App服务端的AppKey和AppSecret,以下注释代码因为使用简易方式,没有经过服务端的验证,并且将AppServerKey,AppServerSecret暴露在客户端,属于不安全的简易方式,仅供测试或者没有服务器的app的使用,再次申请,该方式不安全。
  13. // OARequestWrapper *requestWrapper = [OpenApplus requestWithAppKey:@"AppServerKey" andSecret:@"AppServerSecret"];
  14. // OAAuthDtoWrapper *dto = [[OAAuthDtoWrapper alloc] init];
  15. // dto.code = [data performSelector:@selector(code)];
  16. // dto.deviceid = [OpenUDID value];
  17. // dto.uid = uid;
  18. // [requestWrapper sendObject:dto thenNotify:notify];
  19. }
  20. }]
第三步:用户认证

用户认证接口

</>复制代码

  1. http://www.openapplus.com/auth/auth

请求方式:

POST, ContentType:x-www-form-urlencode

参数说明:

参数 类型 必填 说明
appKey String 应用appServerKey
code String 授权code
deviceid String 设备deviceid
uid String 用户标识
timestamp String 当前时间戳
signature String 使用签名规则生成的签名sha1(toquery(sort(params))) , 参数中密钥为:appSecret=appSecret

返回说明:

参数 类型 必填 说明
code String 状态编码
data String 返回数据
message String 错误信息

data参数说明:

参数 类型 必填 说明
token String 授权token
expired String 为session的过期时间
二、小程序接入 第一步:获取小程序的JsAppKey、JsAppsecret

在进行OpenApp+ OAuth2授权登录接入之前,在开放平台注册【http://www.openapplus.com/】开发者帐号,并拥有一个已审核通过的小程序项目,并获得相应的服务端的JsAppKey、JsAppsecret,将其授权到应用后,可开始接入流程。

第二步:前端调用登录API

</>复制代码

  1. my.getAuthCode({
  2. jsAppKey: "jsAppKey",
  3. success: (loginResponse) => {
  4. if (!loginResponse.error){
  5. let sessionData = {
  6. token: loginResponse.authCode,
  7. jsAppKey: that.config.jsAppKey
  8. }
  9. let qs = require("qs")
  10. my.httpRequest({
  11. url: "http://httpbin.org/post",
  12. method: "POST",
  13. data: sessionData,
  14. success: function(res) {
  15. if (parseInt(respData.data.code) === 1) {
  16. console.debug("获取jsToken成功!jsToken:" + respData.data.jsToken);
  17. }
  18. },
  19. fail: function(res) {
  20. console.debug("获取authCode失败!");
  21. },
  22. complete: function(res) {
  23. }
  24. });
  25. } else {
  26. console.debug("获取jsToken失败!");
  27. }
  28. }
  29. });
第三步:通过jsToken获取获取后台session

</>复制代码

  1. http://www.openapplus.com/auth/jsapp/code2session

请求方式:

POST, ContentType:x-www-form-urlencode

参数说明:

参数 类型 必填 说明
jsAppKey String 该应用的jsAppKey
token String 前端获取的jsToken
timestamp String 当前时间戳
signature String 使用签名规则生成的签名sha1(toquery(sort(params))) , 参数中密钥为:appSecret=jsAppSecret

返回说明:

参数 类型 必填 说明
code String 状态编码
data String 响应数据
message String 错误信息

data参数说明:

参数 类型 必填 说明
session String 授权会话
expired String 为session的过期时间
第五步:通过session调用接口

能调用的接口有以下:

| 接口|接口URL|接口说明|
| :------| ------: | ------: |
| /auth/jsapp/getUser| http://www.openapplus.com/aut... | 获取用户个人信息 |

客户端 my. getAuthCode(OBJECT)

调用接口获取登录凭证(jsAppToken)进而换取用户登录态信息,包括用户的唯一标识(openid) 及本次登录的 会话密钥(session_key)。用户数据的加解密通讯需要依赖会话密钥完成。

OBJECT参数说明:

参数 类型 必填 说明
jsAppKey String 小程序应用AppKey
success function 调用成功的回调函数
fail function 调用失败的回调函数
complete function 调用结束的回调函数(调用成功、失败都会执行)

CALLBACK返回参数说明:

参数 类型 必填 说明
authCode String 授权码,用户允许登录后,回调内容会带上 authCode(有效期五分钟),开发者需要将 authCode 发送到开发者服务器后台,使用code 换取 session_key api,将 authCode 换成 openid 和 session_key
expired Timestamp 过期时间

示例代码:

</>复制代码

  1. my.getAuthCode({
  2. jsAppKey: "jsAppKey",
  3. success: (res) => {
  4. my.alert({
  5. content: res.authCode,
  6. });
  7. },
  8. });
my. navigateToMiniProgram(OBJECT)

开放小程序容器操作API,打开同一App下关联的另一个小程序。

OBJECT参数说明:

参数 类型 必填 说明
appId String 要打开的小程序 jsAppKey
path String 打开的页面路径,如果为空则打开首页
extraData String 需要传递给目标小程序的数据,目标小程序可在 App.onLaunch(e),App.onShow(e) 中获取到这份数据。参数e格式为:{path: "", query: query},其中query 为extraData,仅支持一层字典
url String 和appId二者选择一个,打开小程序的URL,格式为:openapplus://jsApp/e03f37ba425a47e6aafd8170eee6be52/param1=value1¶m2=value2, 如果参数中提供了instancId,会尝试打开已有页面
success function 调用成功的回调函数
fail function 调用失败的回调函数
complete function 调用结束的回调函数(调用成功、失败都会执行)

示例代码:

</>复制代码

  1. my.navigateToMiniProgram({
  2. appId: "",
  3. path: "pages/index/index",
  4. extraData: {
  5. foo: "bar"
  6. },
  7. envVersion: "develop",
  8. success(res) {
  9. // 打开成功
  10. }
  11. })
wx.navigateBackMiniProgram(OBJECT)

返回到上一个小程序,只有在当前小程序是被其他小程序打开时可以调用成功

OBJECT参数说明:

参数 类型 必填 说明
extraData String 需要返回给上一个小程序的数据,上一个小程序可在 App.onShow(e) 中获取到这份数据。参数e格式为:{path: "", query: query},其中query 为extraData,仅支持一层字典
success function 调用成功的回调函数
fail function 调用失败的回调函数
complete function 调用结束的回调函数(调用成功、失败都会执行)
my.alert(OBJECT)

alert 警告框。

OBJECT参数说明:

参数 类型 必填 说明
title String alert框的标题
content function alert框的内容
buttonText function 按钮文字,默认确定
success function 调用成功的回调函数
fail function 调用失败的回调函数
complete function 调用结束的回调函数(调用成功、失败都会执行)
my.confirm(OBJECT)

confirm 确认框。

OBJECT参数说明:

参数 类型 必填 说明
title String alert框的标题
content function alert框的内容
confirmButtonText function 确认按钮文字,默认‘确定’
cancelButtonText function 确认按钮文字,默认‘取消’
success function 调用成功的回调函数
fail function 调用失败的回调函数
complete function 调用结束的回调函数(调用成功、失败都会执行)
my. showToast(OBJECT)

confirm 确认框。

OBJECT参数说明:

参数 类型 必填 说明
content String alert框的标题
type function alert框的内容
success function 调用成功的回调函数
fail function 调用失败的回调函数
complete function 调用结束的回调函数(调用成功、失败都会执行)

示例代码:

</>复制代码

  1. my.showToast({
  2. type: "success",
  3. content: "操作成功",
  4. duration: 3000,
  5. success: () => {
  6. my.alert({
  7. title: "toast 消失了",
  8. });
  9. },
  10. });
my. hideToast()

隐藏弱提示。

示例代码:

</>复制代码

  1. my.hideToast()
my. showLoading()

显示加载提示。

OBJECT参数说明:

参数 类型 必填 说明
content String alert框的标题
delay Integer 延迟显示,单位 ms,默认 0。如果在此时间之前调用了 my.hideLoading 则不会显示
success function 调用成功的回调函数
fail function 调用失败的回调函数
complete function 调用结束的回调函数(调用成功、失败都会执行)

示例代码:

</>复制代码

  1. my.showLoading({
  2. content: "加载中...",
  3. delay: 1000,
  4. });
my. hideLoading()

隐藏加载提示。

示例代码:

</>复制代码

  1. my.hideLoading();
my. datePicker(OBJECT)

打开日期选择列表。

OBJECT参数说明:

参数 类型 必填 说明
format String 返回的日期格式,yyyy-MM-dd(默认)HH:mm yyyy-MM-dd HH:mm yyyy-MM yyyy
currentDate String 初始选择的日期时间,默认当前时间
startDate String 最小日期时间
endDate String 最大日期时间
success function 调用成功的回调函数
fail function 调用失败的回调函数
complete function 调用结束的回调函数(调用成功、失败都会执行)

success返回参数说明:

参数 类型 必填 说明
date String 选择的日期

示例代码:

</>复制代码

  1. my.datePicker({
  2. format: "yyyy-MM-dd",
  3. currentDate: "2012-12-12",
  4. startDate: "2012-12-10",
  5. endDate: "2012-12-15",
  6. success: (res) => {
  7. my.alert({
  8. content: res.date,
  9. });
  10. },
  11. });
my. hideKeyboard()

隐藏键盘。

示例代码:

</>复制代码

  1. my. hideKeyboard();
SDK API +startWithAppKey:

传入在平台申请的 appKey,启动 JSPatch SDK。同时会自动执行已下载到本地的 patch 脚本。建议在 -application:didFinishLaunchingWithOptions: 开头处调用。

+sync

与 OpenApplus 平台后台同步,询问是否有包更新,如果有更新会自动下载并执行。

!!注意 +startWithAppKey: 并不会询问后台包更新,必须调用 +sync 方法。

每调用一次 +sync 就会请求一次后台,对于实时性要求不高的 APP,只需在 -application:didFinishLaunchingWithOptions: 处调用一次,这样用户会在启动时去同步 patch 信息。对于实时性要求高的 APP,可以在 -applicationDidBecomeActive: 处调用这个接口,这样会在每次用户唤醒 APP 时去同步一次后台,请求次数会增多,但有包更新时用户会及时收到。

后台使用 发布指南 应用指南 收银台

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/68335.html

相关文章

  • 写给 Android 开发的程序布局指南,Flex 布局!

    摘要:不过在小程序中,这就不是我们需要考虑的了,微信已经帮我们处理好了。而在新手阶段,暂时只需要关注两个参数指定一个块级布局,它其内的元素,总是起一个新行来显示,而微信小程序的很多视图容器组件,默认的就是,例如等。 showImg(https://segmentfault.com/img/remote/1460000015285633?w=750&h=562); 一、序 Hi,大家好,我是承...

    Salamander 评论0 收藏0
  • Flex布局在程序的使用

    摘要:所以为了在小程序开发中更方便地布局,有必要来详细了解下布局在小程序的使用。本文将针对布局的各个属性进行介绍,并直接使用来编写例子,运行环境是小程序的开发者工具。在容器使用会导致布局失效。 一篇旧文,上手小程序时做的一些探索 Flex布局是一种十分灵活方便的布局方式,目前主流的现代浏览器基本都实现了对Flex布局的完全支持。而在微信小程序中,IOS端使用的渲染引擎WKWebView和安卓...

    FingerLiu 评论0 收藏0
  • Docker的大坑

    摘要:正在学习,留着看看转自的大坑小洼成为云计算领域的新宠儿已经是不争的事实,作为高速发展的开源项目,难免存在这样或那样的瑕疵。话不多说,一起来领略的大坑小洼。原因回归至上文的第一个坑。如此一来,只要内部涉及到域名解析,则立即受到影响。 正在学习Docker,留着看看 转自Docker的大坑小洼 Docker成为云计算领域的新宠儿已经是不争的事实,作为高速发展的开源项目,难免存在这样或那样...

    My_Oh_My 评论0 收藏0
  • Forrester企业级容器平台权威排行出炉,初创Rancher缘何成为领导者?

    摘要:报告划重点和领跑企业容器云市场在此次发布的企业级容器平台的类似的魔力象限中,和是企业级容器管理平台市场的卓越领导者。 showImg(https://segmentfault.com/img/remote/1460000016766848?w=1268&h=365); 全球著名的调研机构Forrester Research近日发布了《The Forrester New Wave: En...

    Pocher 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<