1. 程式人生 > >詳解微信小程式開發

詳解微信小程式開發

微信應用開放的服務和元件包含如下:
  • 檢視容器:檢視(View)、滾動檢視、Swiper
  • 基礎內容:圖示、文字、進度條
  • 表單元件:按鈕、表單等等
  • 操作反饋
  • 導航
  • 媒體組建:音訊、圖片、視訊。
  • 地圖
  • 畫布
  • 檔案操作能力
  • 網路:上傳下載能力、WebSocket
  • 資料:資料快取能力
  • 位置:獲取位置、檢視位置
  • 裝置:網路狀態、系統資訊、重力感應、羅盤
  • 介面:設定導航條、導航、動畫、繪圖等等
  • 開放介面:登入,包括簽名加密,使用者資訊、微信支付、模板訊息

稽核:
根據《微信小程式平臺服務協議》,裡面有關描述如下: 

2.4 為確保微信小程式平臺、微信公眾平臺、其他使用者等各方的安全、穩定及良好的使用者體驗,騰訊將對需要釋出的小程式進行釋出稽核。 


“釋出稽核”是指由使用者發起,將其完成初始化開發的小程式提交至騰訊,由騰訊自行或委託第三方對該小程式的合法性、合理性、安全性、穩定性、可操作性、使用者體驗等各方面,採用包括但不限於開發資訊核對、安全測試、UI測試、隨機測試、動態測試、安全測試等方式,進行審查、甄別、試驗與評估的過程。釋出稽核結果包括稽核通過與稽核不通過兩種。稽核不通過的,該小程式將無法釋出。 

之後小程式的稽核極有可能採取和App store類似的策略,但相比微信其他平臺的稽核,各位嚴格和複雜。 

教程:
微信應用號(小程式,「應用號」的新稱呼)終於來了!目前還處於內測階段,微信只邀請了部分企業參與封測。想必大家都關心應用號的最終形態到底是什麼樣子?怎樣將一個「服務號」改造成為「小程式」?我們暫時以一款簡單的第三方工具的例項,來演示一下開發過程吧。 


OK,為了讓大家儘快看到這份教程,博卡君註定要熬夜了!今晚開始更新,希望明天一早就能釋出第一篇教程!記錄開始!看看幾天能完成變身吧! 

序言 

開始開發應用號之前,先看看官方公佈的「小程式」教程吧!(以下內容來自微信官方公佈的「小程式」開發指南) 

本文件將帶你一步步建立完成一個微信小程式,並可以在手機上體驗該小程式的實際效果。這個小程式的首頁將會顯示歡迎語以及當前使用者的微信頭像,點選頭像,可以在新開的頁面中檢視當前小程式的啟動日誌。 

1. 獲取微信小程式的 AppID

首先,我們需要擁有一個帳號,如果你能看到該文件,我們應當已經邀請併為你建立好一個帳號。注意不可直接使用服務號或訂閱號的 AppID。 利用提供的帳號,登入 
https://mp.weixin.qq.com,就可以在網站的「設定」-「開發者設定」中,檢視到微信小程式的 AppID 了。 

 

注意:如果我們不是用註冊時繫結的管理員微訊號,在手機上體驗該小程式。那麼我們還需要操作「繫結開發者」。即在「使用者身份-開發者」模組,繫結上需要體驗該小程式的微訊號。本教程預設註冊帳號、體驗都是使用管理員微訊號。 

2.建立專案

我們需要通過開發者工具,來完成小程式建立和程式碼編輯。 

開發者工具安裝完成後,開啟並使用微信掃碼登入。選擇建立「專案」,填入上文獲取到的 AppID,設定一個本地專案的名稱(非小程式名稱),比如「我的第一個專案」,並選擇一個本地的資料夾作為程式碼儲存的目錄,點選「新建專案」就可以了。 

為方便初學者瞭解微信小程式的基本程式碼結構,在建立過程中,如果選擇的本地資料夾是個空資料夾,開發者工具會提示,是否需要建立一個 quick start 專案。選擇「是」,開發者工具會幫助我們在開發目錄裡生成一個簡單的 demo。 

 

專案建立成功後,我們就可以點選該專案,進入並看到完整的開發者工具介面,點選左側導航,在「編輯」裡可以檢視和編輯我們的程式碼,在「除錯」裡可以測試程式碼並模擬小程式在微信客戶端效果,在「專案」裡可以傳送到手機裡預覽實際效果。 

3. 編寫程式碼

點選開發者工具左側導航的「編輯」,我們可以看到這個專案,已經初始化幷包含了一些簡單的程式碼檔案。最關鍵也是必不可少的,是 app.js、app.json、app.wxss 這三個。其中,.js 字尾的是指令碼檔案,.json 字尾的檔案是配置檔案,.wxss 字尾的是樣式表文件。微信小程式會讀取這些檔案,並生成小程式例項。 

下面我們簡單瞭解這三個檔案的功能,方便修改以及從頭開發自己的微信小程式。 

app.js 是小程式的指令碼程式碼。我們可以在這個檔案中監聽並處理小程式的生命週期函式、宣告全域性變數。呼叫 MINA 提供的豐富的 API,如本例的同步儲存及同步讀取本地資料。 
Java程式碼 
  1. //app.js  
  2. App({  
  3.   onLaunch: function () {  
  4.     //呼叫API從本地快取中獲取資料  
  5.     var logs = wx.getStorageSync('logs') || []  
  6.     logs.unshift(Date.now())  
  7.     wx.setStorageSync('logs', logs)  
  8.   },  
  9.   getUserInfo:function(cb){  
  10.     var that = this;  
  11.     if(this.globalData.userInfo){  
  12.       typeof cb == "function" && cb(this.globalData.userInfo)  
  13.     }else{  
  14.       //呼叫登入介面  
  15.       wx.login({  
  16.         success: function () {  
  17.           wx.getUserInfo({  
  18.             success: function (res) {  
  19.               that.globalData.userInfo = res.userInfo;  
  20.               typeof cb == "function" && cb(that.globalData.userInfo)  
  21.             }  
  22.           })  
  23.         }  
  24.       });  
  25.     }  
  26.   },  
  27.   globalData:{  
  28.     userInfo:null  
  29.   }  
  30. })  

app.json 是對整個小程式的全域性配置。我們可以在這個檔案中配置小程式是由哪些頁面組成,配置小程式的視窗 背景色,配置導航條樣式,配置預設標題。注意該檔案不可新增任何註釋。 
Java程式碼 
  1. {  
  2.   "pages":[  
  3.     "pages/index/index",  
  4.     "pages/logs/logs"  
  5.   ],  
  6.   "window":{  
  7.     "backgroundTextStyle":"light",  
  8.     "navigationBarBackgroundColor""#fff",  
  9.     "navigationBarTitleText""WeChat",  
  10.     "navigationBarTextStyle":"black"  
  11.   }  
  12. }  

app.wxss 是整個小程式的公共樣式表。我們可以在頁面元件的class屬性上直接使用app.wxss中宣告的樣式規則。 
Java程式碼 
  1. /**app.wxss**/  
  2. .container {  
  3.   height: 100%;  
  4.   display: flex;  
  5.   flex-direction: column;  
  6.   align-items: center;  
  7.   justify-content: space-between;  
  8.   padding: 200rpx 0;  
  9.   box-sizing: border-box;  
  10. }  

4.建立頁面

在這個教程裡,我們有兩個頁面,index 頁面和 logs 頁面,即歡迎頁和小程式啟動日誌的展示頁,他們都在 pages 目錄下。微信小程式中的每一個頁面的【路徑+頁面名】都需要寫在 app.json 的 pages 中,且 pages 中的第一個頁面是小程式的首頁。 

每一個小程式頁面是由同路徑下同名的四個不同字尾檔案的組成,如:index.js、index.wxml、index.wxss、index.json。.js 字尾的檔案是指令碼檔案,.json 字尾的檔案是配置檔案,.wxss 字尾的是樣式表文件,.wxml 字尾的檔案是頁面結構檔案。 

index.wxml是頁面的結構檔案: 
Java程式碼 
  1. <view class="container">  
  2.   <view  bindtap="bindViewTap" class="userinfo">  
  3.     <image class="userinfo-avatar" src="{{userInfo.avatarUrl}}" background-size="cover"></image>  
  4.     <text class="userinfo-nickname">{{userInfo.nickName}}</text>  
  5.   </view>  
  6.   <view class="usermotto">  
  7.     <text class="user-motto">{{motto}}</text>  
  8.   </view>  

本例中使用了 、、來搭建頁面結構,繫結資料和互動處理函式。 

index.js是頁面的指令碼檔案,在這個檔案中我們可以監聽並處理頁面的生命週期函式、獲取小程式例項,宣告並處理資料,響應頁面互動事件等。 
Java程式碼 
  1. //index.js  
  2. //獲取應用例項  
  3. var app = getApp()  
  4. Page({  
  5.   data: {  
  6.     motto: 'Hello World',  
  7.     userInfo: {}  
  8.   },  
  9.   //事件處理函式  
  10.   bindViewTap: function() {  
  11.     wx.navigateTo({  
  12.       url: '../logs/logs'  
  13.     })  
  14.   },  
  15.   onLoad: function () {  
  16.     console.log('onLoad')  
  17.     var that = this  
  18.     //呼叫應用例項的方法獲取全域性資料  
  19.    app.getUserInfo(function(userInfo){  
  20.       //更新資料  
  21.       that.setData({  
  22.         userInfo:userInfo  
  23.       })  
  24.     })  
  25.   }  
  26. })  
  27. index.wxss是頁面的樣式表:  
  28. /**index.wxss**/  
  29. .userinfo {  
  30.   display: flex;  
  31.   flex-direction: column;  
  32.   align-items: center;  
  33. }  
  34. .userinfo-avatar {  
  35.   width: 128rpx;  
  36.   height: 128rpx;  
  37.   margin: 20rpx;  
  38.   border-radius: 50%;  
  39. }  
  40. .userinfo-nickname {  
  41.   color: #aaa;  
  42. }  
  43. .usermotto {  
  44.   margin-top: 200px;  
  45. }  

頁面的樣式表是非必要的。當有頁面樣式表時,頁面的樣式表中的樣式規則會層疊覆蓋 app.wxss 中的樣式規則。如果不指定頁面的樣式表,也可以在頁面的結構檔案中直接使用 app.wxss 中指定的樣式規則。 

index.json是頁面的配置檔案: 

頁面的配置檔案是非必要的。當有頁面的配置檔案時,配置項在該頁面會覆蓋 app.json 的 window 中相同的配置項。如果沒有指定的頁面配置檔案,則在該頁面直接使用 app.json 中的預設配置。 

logs的頁面結構 
Java程式碼 
  1. <!--logs.wxml-->  
  2. <view class="container log-list">  
  3.   <block wx:for-items="{{logs}}" wx:for-item="log">  
  4.     <text class="log-item">{{index + 1}}. {{log}}</text>  
  5.   </block>  
  6. </view>  

logs 頁面使用 控制標籤來組織程式碼,在 上使用 wx:for-items 繫結 logs 資料,並將 logs 資料迴圈展開節點 
Java程式碼 
  1. //logs.js  
  2. var util = require('../../utils/util.js')  
  3. Page({  
  4.   data: {  
  5.     logs: []  
  6.   },  
  7.   onLoad: function () {  
  8.     this.setData({  
  9.       logs: (wx.getStorageSync('logs') || []).map(function (log) {  
  10.         return util.formatTime(new Date(log))  
  11.       })  
  12.     })  
  13.   }  
  14. })  

執行結果如下: 

 

5.手機預覽

開發者工具左側選單欄選擇「專案」,點選「預覽」,掃碼後即可在微信客戶端中體驗。 

 

目前,預覽和上傳功能尚無法實現,需要等待微信官方的下一步更新。 

如你所見,微信官方給出的開發指南還非常簡單,很多細節、程式碼和功能都沒有明確的展示,所以接下來就到博卡君展示實力的時候啦!開發教程正式開始! 

第一章:準備工作
做好準備工作很重要。開發一個微信應用號,你需要提前到微信的官方網站(weixin.qq.com)下載開發者工具。 

相關推薦

程式開發

微信應用開放的服務和元件包含如下:檢視容器:檢視(View)、滾動檢視、Swiper基礎內容:圖示、文字、進度條表單元件:按鈕、表單等等操作反饋導航媒體組建:音訊、圖片、視訊。地圖畫布檔案操作能力網路:上傳下載能力、WebSocket資料:資料快取能力位置:獲取位置、檢視位

程式與HTML5的差異

微信小程式的頁面粗略看與HTML類似,也是基於標記語言和樣式渲染,而且多數css樣式可以使用。實際上從檢視層的角度來說,小程式與傳統HTML5還是有明顯的區別。 開發工具不同 區別於H5的開發工具+瀏覽器Device Mode預覽的模式,小程式的開發基於

程式支付流程

  花了幾天把小程式的支付模組介面寫了一下,可能有著公眾號開發的一點經驗,沒有入太多的坑,在此我想記錄一下整個流程。首先先把小程式微信支付的圖搬過來:相信會來查百度的同學們基本都是對文件的說明不是很理解。我下面大概總結一下整個業務邏輯的過程。微信小程式的商戶系統一般是以介面的

程式開發筆記4—— IntersectionObserver 用法

看微信文件時看到這個很有趣的api,但是官方的文件和例子關於這個api的介紹都是很讓人失望的,所以花了點時間瞭解了以下這個方法,做個記錄,供參考。 簡介 首先,我的理解是,這是一個觀察器(廢話),它用來監測目標物件與某個參照物的相交情況。什麼是相交情況?通俗的說,就是兩個區域有重

程式開發(四)---程式開發元件使用初步

1:建立一個微信小程式的工程 2:請參考如下連結裡面的內容,這是微信小程式的官方開發指南: https://mp.weixin.qq.com/debug/wxadoc/dev/component/button.html?t=20161222 3:可以拷貝部分例子程式到你

程式開發(七)---程式APP生命週期

1:微信小程式APP的生命週期方法: 在微信小程式工程中的app.js中增加如圖1所示方法 圖1 編譯執行,檢視日誌如圖2,圖3所示:微信小程式啟動時,呼叫生命週期方法為:onLaunch方法(app.js)---onShow方法(app.js)---onLoad方法(首

程式開發(九)---程式佈局基礎

1:Flex佈局 Flex佈局如圖1所示 圖1 1.1 Flex容器屬性 1.2 Flex容器內元素屬性 align如果定義會覆寫掉容器屬性中的justify-content,align-items設定的屬性 微信小程式開發工程中,新建檔案layout,然後新建各

程式開發教程(六)配置——app.json、page.json

全域性配置:app.json  微信小程式的全域性配置儲存在app.json檔案中。開發者通過使用app.json來配置頁面檔案(pages)的路徑、視窗(window)表現、設定網路超時時間值(networkTimeout)以及配置多個切換頁(tarBar)等。  首先看一

程式開發 6 測測你是三國殺中的誰---調查測試類程式

    “我應該是金庸小說中的誰?”這類遊戲能帶動使用者的好奇心,並激起使用者的分享慾望,從而成為一款長盛不衰的小遊戲。    這類遊戲的特點很明顯: 有一系列調查問卷供使用者回答,通常是選擇一個選項或分數。根據使用者的選擇跳到下一題目最後顯示答案,告訴使用者的測試結果。

程式開發--豆瓣圖書介面

由於微信小程式訪問豆瓣圖書介面的API被關閉, 所有從小程式端發起的訪問請求都會被拒絕, 403,禁止通訊。 其餘的資訊介面大都是http的,微信小程式中不允許訪問http, 我們通過中繼伺服器爬取並解析資料實現了一個可以在小程式中實現的圖書資訊查詢介面。 通過圖書的isbn 號碼查詢關於該圖書的各

程式開發 筆記

1.[wxss]設定帶透明度的rgb顏色:rgb(0,0,0,0.5); 2.小程式使用類似於iOS的NSNotification:(第三方:https://github.com/icindy/WxNotificationCenter) (1)在需要收發通知的頁面引入WxNotification

程式開發框架——WXSS(一)

    WXSS語言決定了小程式頁面的各個元素在視覺上的展示,WXSS與CSS即為相試的、為了適合微信小程式開發WXSS對CSS進行相應的修改。     width:用來設定元素'寬度' / height:用來設定元素'高度 '/

純正商業級應用-程式開發實戰已更完

第1章 導學與申請appkey 如何更好的學習本課程?如何申請開發者key?如何呼叫和測試介面? 1-1 微信小程式商業級實戰-課程導學。 1-2 優先自己開發 1-3 appkey的申請 1-4 課程維護說明 第2章 準備工作 開發前的準備工作以及第三方開發工具的選擇 2-1 流程與開發前準備 2

程式開發:二級、三級等多級聯動選單

二級級聯效果三級聯動效果 二級聯動和三級聯動的程式碼結構都是一樣,就看要怎麼設定。接下來上三級聯動的程式碼。 wxml <view class="picker-box"> <view class='skill-picker'&g

程式開發筆記5——元素隨著頁面滾動吸附在頂部的效果

現在很多app都有這樣的效果,某元素隨著頁面的滾動,吸附在頂部的效果。本文將介紹實現這種效果的兩種不同的方法。 先看一下效果圖: 使用IntersectionObserver 思路 上一篇部落格詳細介紹了IntersectionObserver的用法。這裡用來實現這種吸附的

程式開發筆記2——自定義導航欄元件

本文主要是熟悉微信小程式自定義元件的開發,以一個常見的導航欄(Tabbar)需求為例。 官方文件:https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/ 首先我們先看一

程式開發-引入阿里巴巴向量icon圖示庫

先在阿里巴巴圖示庫下載icon圖示並儲存到專案裡,然後下載到本地。此步驟的壓縮檔案命名為壓縮1檔案。 解壓下載檔案,開啟轉換網址https://transfonter.org/,點選 Add fonts按鈕將iconfont.ttf檔案上傳上去,按圖操作就好。此步驟的壓縮檔案命名為壓縮2檔

純正商業級應用-程式開發實戰最新無加密

第1章 導學與申請appkey 如何更好的學習本課程?如何申請開發者key?如何呼叫和測試介面? 1-1 微信小程式商業級實戰-課程導學。 1-2 優先自己開發 1-3 appkey的申請 1-4 課程維護說明 第2章 準備工作 開發前的準備工作以及第三方開發工具的選擇 2-1 流程與開發前準

程式開發使用者授權登入

用wx.login獲取登入憑證code <!--pages/user/index.wxml--> <view hidden='{{boolean}}'> <view wx:if="{{isLogin == 1}}"> <!-- 個人資訊 --

與大家分享學習程式開發的一些心得

因為我也才開始學習微信小程式不久,下文也是現在的一時之言,大家有不同的想法也可以在評論裡共同交流討論,希望文章能給大家提供一點點幫助。 最近接觸到了一些前端框架,像Vue.js,React,發現小程式的框架體系跟它們很像。它們都推崇模組化,元件化,資料與元素繫結。這樣沒有繁瑣的DOM操作,