📜 [專欄新文章] Solidity Weekly #16
✍️ mingderwang
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
Expo (React Native) + web3.js 1.0.x 開發手機 dApps
今天要介紹如何利用 Expo,來撰寫手機 dApp。基本上,如果想做到去中心化的 dApp,期望能將 Javascript app 能盡可能的包裹成單一檔案,用去中心化檔案儲存空間,讓手機或網頁直接下載來執行。手機版的 App,也可用 Expo 做到類似的結果,但目前 Expo 還是有點中心化;當然利用 cipherbrowser 或 status.im 等方式開發也行,只要你不怕被 vendor lock-in。
Expo 是一種 MIT license 的開放源始碼,讓 React Native 開發與部屬更為簡單,讓用戶只要先下載 iOS 或 Android 的 Expo clients。就很容易透過 exp://xxx 的 URI 來執行。因為 React Native 跟 web3.js 都是用 Javascript 語言,因此很容易整合。(註:web3.js 也不是唯一連區塊鏈的方法,只是搭配 Remix,能產生 web3 程式片段,所以比較方便)
但由於 React Native 非 100% 與 node.js 相容,因此有些 workarounds 要做,例如 node 內建 standard library 裡的 crypto (註 2),Buffer 等 React Native 就沒有,所以這裏還不是很方便。(喜歡 truffle 的人,也可參考 react-native-box 來做,但也還沒很成熟)
Mobile dApp 有個問題是,你(用戶)沒有 localhost 自己的 node 當成 web3 provider 可以連線到 Ethereum 區塊鏈。所以有幾種選擇,最簡單的就是要再相信某一個 node,這裡用 infura (與 Metamask 同一家公司),也許還要搭配其他方法,讓這 dApp 不要依賴任何 server 也能運作。但如果要用到 HDWallet,還是要用 truffle-hdwallet-provider 來當 web3 provider,也能同時避開沒有 crypto 的問題。
使用 Expo 開發畫面
註 1:直接用 React Native 開發,不容易除錯,且速度慢。所以建議程式邏輯可以考慮用 React Native for Web 在 CodeSandbox.io 先做開發和測試,最後再搬到 Expo 的 React Native 裡。(或直接在 codesandbox.io 開發 Expo 程式也行)
CodeSandbox
註 2:例如當在 Expo 的環境裡使用到 web3.eth.accounts.create() 時,會出現以下 error,但其他地方(Condsandbox)不會。
解決方法,不要用 web3 provider 改用 truffle-hdwallet-provider (在 React Native 裡要用 Promise.promisifyAll 繞過問題)
var HDWalletProvider = require("truffle-hdwallet-provider"); var mnemonic = "manage velvet tide tube object spin identify neither foot together wagon tip"; var hd = new HDWalletProvider(mnemonic, "https://mainnet.infura.io/"); web3 = new Web3(hd); Promise.promisifyAll(web3.eth); let accounts = await web3.eth.getAccountsAsync();
Solidity Weekly #16 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
「native app web app比較」的推薦目錄:
- 關於native app web app比較 在 Taipei Ethereum Meetup Facebook 的最佳解答
- 關於native app web app比較 在 矽谷阿雅 Anya Cheng Facebook 的最讚貼文
- 關於native app web app比較 在 [心得] 非native開發app,反而讓開發過程更痛苦- 看板Soft_Job 的評價
- 關於native app web app比較 在 Web App、Hybrid、ReactNative 和WEEX 的优劣· Issue #7 · ... 的評價
- 關於native app web app比較 在 Progressive Web App vs. Native App - YouTube 的評價
- 關於native app web app比較 在 移动应用开发:Web App模式、Native App模式及 ... - Tao's Blog 的評價
native app web app比較 在 矽谷阿雅 Anya Cheng Facebook 的最讚貼文
網站+App=谷歌推出PWA原生應用網站迎戰蘋果APP
20年前流行做網站,8年前流行做App,5年前流行平板,今年你要知道谷歌幾個月前推出的「原生應用網站」(Progressive Web App - PWA) - 一種用起來就像是App的新網站科技。
1. PWA 讓用戶可以把網站加到手機螢幕上,就像App一樣的小圖標。要用隨時找得到,不用到瀏覽器開慢慢的網頁。
2. PWA 可以傳即時通訊(push notification)。就像App一樣,用戶可以收到推播通知。
3. PWA 沒網路也可以用。只要是之前看過的頁面,就算沒網路線下也可以用。比如說你可以讓用戶先發照片,但是到有網路才上傳,省用戶上網數據費用。
4. PWA 讓網頁下載快。第一次瀏覽後,之後每次開就像原生應用程式(native app) 一樣快。
#PWA #谷歌 #原生應用網站 #矽谷 #數位趨勢
5. PWA 因為要求要在https而不是http上,所以個人資料比較安全,不易被駭。
6. 最重要的是,PWA 省去品牌大筆「下載app」的行銷費用。用戶上網站後,谷歌會在用戶用了一會後推播問用戶要不要把PWA加到手機首頁。谷歌研究顯示用戶平均每個月用25個app,但卻用超過一百個網站。而且每800人到app商店準備下載app,最後只有262個人真的下載而且用app。
谷歌為什麼要出PWA? 蘋果在app上遠比谷歌成功,谷歌以搜尋起家瀏覽器當然是他們的強項,推出PWA將有助於谷歌繼續加強在數位領域的影響力。
我的團隊剛與谷歌共同推出墨西哥第一個PWA,成果如何?過一陣子告訴你!
https://developers.google.com/web/progressive-web-apps/
native app web app比較 在 Web App、Hybrid、ReactNative 和WEEX 的优劣· Issue #7 · ... 的推薦與評價
... APP开发模式-脑图Native App 传统的原生APP开发模式,有IOS和AOS两大系统,需要各自语言开发各自APP ... 比较方便,效率介于Native App、Web App之间 缺点: ... ... <看更多>
native app web app比較 在 Progressive Web App vs. Native App - YouTube 的推薦與評價
Comparing the customer journey between a progressive web app (PWA) and a native app. ... <看更多>
native app web app比較 在 [心得] 非native開發app,反而讓開發過程更痛苦- 看板Soft_Job 的推薦與評價
不好意思 我想趁這個討論串比較熱絡的時候藉機請問各位前輩
前面jsgoc大大所說的不要死守一種語言或是多點技能樹當然是非常好的建議
不過這應該是從比較資深開發者的角度所出發的
那如果是一個junior面對要選擇Objective-C + Swift還是React Native
請問各位前輩是否有什麼建議或是心得可以分享?
我是非理工半路出家寫了快半年iOS
以Swift為主 Objective-C為輔 也有上架的作品
最近在選擇工作上要在Objective-C跟React Native中做決定
但是我查到對React Native的評價卻有點兩極
支持者說一套開發通吃雙平台 整合 通用等等特性
反對者說效能比不過原生語言 會原生寫React Native畫蛇添足等等
想請各位給點建議 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.231.193.109
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1508245795.A.B39.html
... <看更多>