摘要:參數格式為,其中為,僅支持一層字典否調用成功的回調函數否調用失敗的回調函數否調用結束的回調函數調用成功失敗都會執行警告框。
概述
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文件
Pod::Spec.new do |s| s.name = "OpenApplus" s.version = "1.0.0" s.summary = "OpenApplus framework" s.homepage = "http://github.com/linwaiwai/openapplus" s.license = { :type => "OpenApplus License, Version 1.0.0", :text => <<-LICENSE Licensed under the OpenApplus License, Version 1.0.0 (the "License"); you may not use this file except in compliance with the License. LICENSE } s.author = "linwaiwai" s.platform = :ios, "6.0.0" s.source = { :git => "https://github.com/linwaiwai/openapplus.git", :branch => "master"} s.frameworks = "UIKit" s.requires_arc = true s.dependency "SDWebImage", "3.7.5" s.dependency "SSZipArchive", "1.6.2" s.dependency "SVProgressHUD", "2.1.2" s.dependency "Masonry", "1.0.2" s.dependency "UMengUShare/Social/WeChat", "6.3.0" s.dependency "MJRefresh", "3.1.12" s.dependency "libextobjc", "~> 0.4.1" s.dependency "AFNetworking" s.dependency "OpenUDID" s.subspec "OpenApplus" do |ss| ss.vendored_frameworks = "*.framework" ss.vendored_libraries = "*.a" ss.source_files = "*.h" ss.resource = "*.bundle" end end在Podfile文件加入
source "https://github.com/CocoaPods/Specs.git" platform :ios, "8.0" #忽略引入庫的警告 inhibit_all_warnings! target "openapplus-ios-demo" do pod "OpenApplus", :podspec => "./podspec/OpenApplus.podspec" end在工程中Info.plist文件中添加如下項
運行NSAppTransportSecurity NSAllowsArbitraryLoads
在 AppDelegate.m 里按順序調用三個方法:
1、調用 +startWithAppKey: ,參數為第一步獲得的 AppKey。
2、調用 +sync 方法檢查包更新。
在AppDelegate.m或ViewController.m中調用 navigateToMiniProgram: 加載小程序項目,參數為在平臺中創建的項目的名稱。
#import <"openapplus/openapplus.h"> @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:testViewController]; self.window.rootViewController = navigationController; [self.window makeKeyAndVisible]; [OpenApplus startWithAppKey:@"test"]; [OpenApplus sync]; [OpenApplus setNavigationController:navigationController]; // JS_APPID 為小程序的APP_ID [OpenApplus navigateToMiniProgram:@"openapplus://jsApp/#JS_APPID#" completion:^{ }]; ... } @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方法中添加以下兩個方法:
注意:一定要在主進程進行該項操作
OpenApplus.registerApp(this, SampleContants.APPID, SampleContants.APP_SECRET); OpenApplus.sync(); OpenApplus.setCallback(new OpenApplusCallback() { @Override public void invoke(OACallbackType type, JSONObject data, OpenApplusNotify notify) { if (type == OACallbackType.OACallbackTypeAuthUser){ // 該接口僅供測試使用,請使用服務端發送給授權請求 OARequestWrapper requestWrapper = OpenApplus.makeRequestWrapper(SampleContants.SERVER_APPID, SampleContants.SERVER_APP_SECRET); OAAuthDtoWrapper dto = new OAAuthDtoWrapper(); dto.setUid("1"); try { dto.setCode(data.getString("code")); } catch (JSONException e) { e.printStackTrace(); } String deviceID = Settings.Secure.getString(WXEnvironment.sApplication.getApplicationContext().getContentResolver(), Settings.Secure.ANDROID_ID); dto.setDeviceid(deviceID); requestWrapper.sendObject(dto, notify); } } });
注意:
參數1:上下文,必須的參數,不能為空
參數2:OpenApplus app key,必須參數。
參數3:OpenApplus app secret,必須參數。
添加相關權限代碼混淆
如果您的應用使用了混淆, 請添加
-keep class com.openapplus.** {*;}添加Activty入口
在AndroidManifest.xml中添加
啟動小程序容器
Intent intent = new Intent(SplashActivity.this, OATinyProgramActivity.class); intent.putExtra("tiny","openapplus://jsApp/xxxxx"); startActivity(intent); finish();小程序 API 授權登錄流程 一、App接入 第一步:獲取服務端的AppKey、AppSecret、AppKey、JsAppsecret
在進行OpenApp+ OAuth2授權登錄接入之前,在開放平臺注冊【http://www.openapplus.com/】開發者帳號,并擁有一個已審核通過的網站應用, 獲取應用的AppKey、AppSecret,并獲得相應的服務端的JsAppKey、JsAppsecret,申請OpenApp+登錄且通過審核后,可開始接入流程。
第二步:配置App的授權接口[OpenApplus startWithAppKey:@"AppKey" andSecret:@"AppSecret"]; NSString *uid = @"111"; [OAConfiguration setUserIdentify:uid]; [OpenApplus setupCallback:^(OACallbackType type, id data, OpenApplusNotify notify, NSError *error) { switch (type) { case OACallbackTypeAuthUser: { // http://www.openapplus.com/auth/auth,請求該接口獲取token和超時時間 OAContainerAuthObject *containerAuthObject = [[OAContainerAuthObject alloc] init]; containerAuthObject.token = @""; containerAuthObject.expired = @""; notify(containerAuthObject, nil); // 使用App服務端的AppKey和AppSecret,以下注釋代碼因為使用簡易方式,沒有經過服務端的驗證,并且將AppServerKey,AppServerSecret暴露在客戶端,屬于不安全的簡易方式,僅供測試或者沒有服務器的app的使用,再次申請,該方式不安全。 // OARequestWrapper *requestWrapper = [OpenApplus requestWithAppKey:@"AppServerKey" andSecret:@"AppServerSecret"]; // OAAuthDtoWrapper *dto = [[OAAuthDtoWrapper alloc] init]; // dto.code = [data performSelector:@selector(code)]; // dto.deviceid = [OpenUDID value]; // dto.uid = uid; // [requestWrapper sendObject:dto thenNotify:notify]; } }]第三步:用戶認證
用戶認證接口
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的過期時間 |
在進行OpenApp+ OAuth2授權登錄接入之前,在開放平臺注冊【http://www.openapplus.com/】開發者帳號,并擁有一個已審核通過的小程序項目,并獲得相應的服務端的JsAppKey、JsAppsecret,將其授權到應用后,可開始接入流程。
第二步:前端調用登錄APImy.getAuthCode({ jsAppKey: "jsAppKey", success: (loginResponse) => { if (!loginResponse.error){ let sessionData = { token: loginResponse.authCode, jsAppKey: that.config.jsAppKey } let qs = require("qs") my.httpRequest({ url: "http://httpbin.org/post", method: "POST", data: sessionData, success: function(res) { if (parseInt(respData.data.code) === 1) { console.debug("獲取jsToken成功!jsToken為:" + respData.data.jsToken); } }, fail: function(res) { console.debug("獲取authCode失敗!"); }, complete: function(res) { } }); } else { console.debug("獲取jsToken失敗!"); } } });第三步:通過jsToken獲取獲取后臺session
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的過期時間 |
能調用的接口有以下:
| 接口|接口URL|接口說明|
| :------| ------: | ------: |
| /auth/jsapp/getUser| http://www.openapplus.com/aut... | 獲取用戶個人信息 |
調用接口獲取登錄憑證(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 | 是 | 過期時間 |
示例代碼:
my.getAuthCode({ jsAppKey: "jsAppKey", success: (res) => { my.alert({ content: res.authCode, }); }, });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 | 否 | 調用結束的回調函數(調用成功、失敗都會執行) |
示例代碼:
my.navigateToMiniProgram({ appId: "", path: "pages/index/index", extraData: { foo: "bar" }, envVersion: "develop", success(res) { // 打開成功 } })wx.navigateBackMiniProgram(OBJECT)
返回到上一個小程序,只有在當前小程序是被其他小程序打開時可以調用成功
OBJECT參數說明:
參數 | 類型 | 必填 | 說明 |
---|---|---|---|
extraData | String | 否 | 需要返回給上一個小程序的數據,上一個小程序可在 App.onShow(e) 中獲取到這份數據。參數e格式為:{path: "", query: query},其中query 為extraData,僅支持一層字典 |
success | function | 否 | 調用成功的回調函數 |
fail | function | 否 | 調用失敗的回調函數 |
complete | function | 否 | 調用結束的回調函數(調用成功、失敗都會執行) |
alert 警告框。
OBJECT參數說明:
參數 | 類型 | 必填 | 說明 |
---|---|---|---|
title | String | 否 | alert框的標題 |
content | function | 否 | alert框的內容 |
buttonText | function | 否 | 按鈕文字,默認確定 |
success | function | 否 | 調用成功的回調函數 |
fail | function | 否 | 調用失敗的回調函數 |
complete | function | 否 | 調用結束的回調函數(調用成功、失敗都會執行) |
confirm 確認框。
OBJECT參數說明:
參數 | 類型 | 必填 | 說明 |
---|---|---|---|
title | String | 否 | alert框的標題 |
content | function | 否 | alert框的內容 |
confirmButtonText | function | 否 | 確認按鈕文字,默認‘確定’ |
cancelButtonText | function | 否 | 確認按鈕文字,默認‘取消’ |
success | function | 否 | 調用成功的回調函數 |
fail | function | 否 | 調用失敗的回調函數 |
complete | function | 否 | 調用結束的回調函數(調用成功、失敗都會執行) |
confirm 確認框。
OBJECT參數說明:
參數 | 類型 | 必填 | 說明 |
---|---|---|---|
content | String | 否 | alert框的標題 |
type | function | 否 | alert框的內容 |
success | function | 否 | 調用成功的回調函數 |
fail | function | 否 | 調用失敗的回調函數 |
complete | function | 否 | 調用結束的回調函數(調用成功、失敗都會執行) |
示例代碼:
my.showToast({ type: "success", content: "操作成功", duration: 3000, success: () => { my.alert({ title: "toast 消失了", }); }, });my. hideToast()
隱藏弱提示。
示例代碼:
my.hideToast()my. showLoading()
顯示加載提示。
OBJECT參數說明:
參數 | 類型 | 必填 | 說明 |
---|---|---|---|
content | String | 否 | alert框的標題 |
delay | Integer | 否 | 延遲顯示,單位 ms,默認 0。如果在此時間之前調用了 my.hideLoading 則不會顯示 |
success | function | 否 | 調用成功的回調函數 |
fail | function | 否 | 調用失敗的回調函數 |
complete | function | 否 | 調用結束的回調函數(調用成功、失敗都會執行) |
示例代碼:
my.showLoading({ content: "加載中...", delay: 1000, });my. hideLoading()
隱藏加載提示。
示例代碼:
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 | 是 | 選擇的日期 |
示例代碼:
my.datePicker({ format: "yyyy-MM-dd", currentDate: "2012-12-12", startDate: "2012-12-10", endDate: "2012-12-15", success: (res) => { my.alert({ content: res.date, }); }, });my. hideKeyboard()
隱藏鍵盤。
示例代碼:
my. hideKeyboard();SDK API +startWithAppKey:
傳入在平臺申請的 appKey,啟動 JSPatch SDK。同時會自動執行已下載到本地的 patch 腳本。建議在 -application:didFinishLaunchingWithOptions: 開頭處調用。
+sync與 OpenApplus 平臺后臺同步,詢問是否有包更新,如果有更新會自動下載并執行。
!!注意 +startWithAppKey: 并不會詢問后臺包更新,必須調用 +sync 方法。
每調用一次 +sync 就會請求一次后臺,對于實時性要求不高的 APP,只需在 -application:didFinishLaunchingWithOptions: 處調用一次,這樣用戶會在啟動時去同步 patch 信息。對于實時性要求高的 APP,可以在 -applicationDidBecomeActive: 處調用這個接口,這樣會在每次用戶喚醒 APP 時去同步一次后臺,請求次數會增多,但有包更新時用戶會及時收到。
后臺使用 發布指南 應用指南 收銀臺文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68335.html
摘要:不過在小程序中,這就不是我們需要考慮的了,微信已經幫我們處理好了。而在新手階段,暫時只需要關注兩個參數指定一個塊級布局,它其內的元素,總是起一個新行來顯示,而微信小程序的很多視圖容器組件,默認的就是,例如等。 showImg(https://segmentfault.com/img/remote/1460000015285633?w=750&h=562); 一、序 Hi,大家好,我是承...
摘要:所以為了在小程序開發中更方便地布局,有必要來詳細了解下布局在小程序的使用。本文將針對布局的各個屬性進行介紹,并直接使用來編寫例子,運行環境是小程序的開發者工具。在容器使用會導致布局失效。 一篇舊文,上手小程序時做的一些探索 Flex布局是一種十分靈活方便的布局方式,目前主流的現代瀏覽器基本都實現了對Flex布局的完全支持。而在微信小程序中,IOS端使用的渲染引擎WKWebView和安卓...
摘要:正在學習,留著看看轉自的大坑小洼成為云計算領域的新寵兒已經是不爭的事實,作為高速發展的開源項目,難免存在這樣或那樣的瑕疵。話不多說,一起來領略的大坑小洼。原因回歸至上文的第一個坑。如此一來,只要內部涉及到域名解析,則立即受到影響。 正在學習Docker,留著看看 轉自Docker的大坑小洼 Docker成為云計算領域的新寵兒已經是不爭的事實,作為高速發展的開源項目,難免存在這樣或那樣...
摘要:報告劃重點和領跑企業容器云市場在此次發布的企業級容器平臺的類似的魔力象限中,和是企業級容器管理平臺市場的卓越領導者。 showImg(https://segmentfault.com/img/remote/1460000016766848?w=1268&h=365); 全球著名的調研機構Forrester Research近日發布了《The Forrester New Wave: En...
閱讀 1845·2021-11-25 09:43
閱讀 3688·2021-11-24 10:32
閱讀 1075·2021-10-13 09:39
閱讀 2328·2021-09-10 11:24
閱讀 3343·2021-07-25 21:37
閱讀 3464·2019-08-30 15:56
閱讀 857·2019-08-30 15:44
閱讀 1447·2019-08-30 13:18