1. 程式人生 > >hbuilder 開發5+ APP採坑記錄

hbuilder 開發5+ APP採坑記錄

開發一款APP產品需要在安卓和蘋果2大平臺釋出,同時開發團隊也需要有安卓和IOS。

HTML5 Plus移動App,簡稱5+App,是一種基於HTML、JS、CSS編寫的運行於手機端的App,這種App可以通過擴充套件的JS API任意呼叫手機的原生能力,實現與原生App同樣強大的功能和效能。

通過5+App可以降低APP開發的門檻,讓一般的前端開發人員也可以進行APP的開發,同時能為公司節約很大的成本,只需要一個前端團隊即可。

最近我司為了快速釋出一個APP產品,也選擇了5+App這種方式,由於本人主要是做後端開發的,前端這塊不是很熟,在開發過程中遇到了很多的問題,特別是一些IOS證書的申請流程,搞的暈頭轉向,為了 避免後面的同學採坑,在這裡將採坑的內容分享出來。

APP圖示問題?

在真機除錯環境下,hbuilder會把APP內容同步到我們的手機中,這個時候圖示顯示的是hbuilder的圖示,不是我們在啟動頁設定好了的自己的圖示,這個需要將APP打包後裝在手機上才可以顯示出來。

啟動頁圖片問題?

啟動頁圖片有2個問題,一個是和上面圖示一樣的問題,在真機除錯環境下是沒效果的,還有個問題就是不能去掉,很多APP都會在啟動時候載入一些廣告內容,這是一個很常見的需求,hbuilder中只能配置靜態的本地圖片然後打包到APP中,不能做成動態的,當時我想的是能不能直接配一個圖片地址,然後就可以達到動態的效果,事實證明是不行的,打包不了。

那麼如何解決這個問題呢?

既然啟動頁不能更改,也去不掉,那就製作一張自己公司logo的啟動頁面,在啟動頁面載入完成之後自己實現一個廣告頁面,廣告頁面後就是我們的APP首頁,通過這種方式來達到動態啟動廣告頁的效果,由於我本人沒做過原生的移動開發,不知道在原生的開發中能不能將啟動頁去掉,我們這邊用的是別人的框架,這個就只能妥協了,當然啟動頁面也是有必要的,可以讓APP在啟動時將一些資源提前載入好。

我看了一些其他的APP,比如微店買家版,也是有自己的啟動圖片,然後再跳轉到廣告頁面,最後到首頁的。

APP中用百度地圖定位問題?

我們之前在網頁中也是用的地圖來定位的,也有一個key,在做APP的時候看到也是需要配置SDK內容的,當時以為就用網頁中用的百度的key就可以了,配上去之後就發現出問題了,有的時候可以定位成功,有的時候定位不了,後面看了文件:

http://ask.dcloud.net.cn/article/29,發現地圖的appkey還分安卓和IOS的版本,所以又重新申請了不同系統下不同的key。

微信登入問題?

首先你得有賬號,賬號沒問題之後就得建應用了,應用需要等微信團隊審批之後才可以使用第三方登入的功能,微信申請地址:https://open.weixin.qq.com/

在建立應用的時候需要分別填寫安卓和IOS的資訊

IOS需要注意的是Bundle ID的填寫,一個是正式的,一個是測試環境下使用的,Bundle ID通常都是公司的包名稱,比如com.cxytiandi.app,測試的就可以使用com.cxytiandi.app.test

安卓沒有Bundle ID這個說法,安卓的叫應用包名,而且不區分正式和測試環境,只需要填寫一個就可以了,比如com.cxytiandi.app

前提是你得將你的APP用簽名檔案進行簽名打包,然後安裝到你的手機上,最後下載微信提供的簽名獲取工具安裝到手機上,通過這個工具獲取簽名然後填寫到微信開發平臺的賬號申請資訊中即可。

最重要的問題來了,我的APP怎麼簽名打包呀?

在jdk的bin檔案中,輸入以下命名進行檔案生成:

keytool -genkey -alias 別名 -keyalg RSA -validity 10000 -keystore 檔名.keystore
  • alias是你要填寫的別名
  • 檔名.keystore 是檔案儲存的名稱

回車之後會讓你填寫一些基本的證書資訊還有密碼,密碼一定要記住

如果大家不是Java開發人員,本地可能沒有按照jdk,這個時候你可以用hbuilder開發包中自帶的jre的bin目錄去生產證書。

打包的話就可以選擇使用自己的證書,然後填寫下圖的資訊,最後打包安裝到自己的手機中獲取簽名:

image.png

等微信那邊稽核通過之後,你會得到一個appid和appsecret,直接在SDK配置中進行配置即可使用微信登入的功能。

image.png

登入示例可以參考官方給的demo,記得在登出微信登入的時候呼叫下面的退出登入方法:

function logout(auth){
    auth.logout(function(){
        outLine("登出\""+auth.description+"\"成功");
    },function(e){
        outLine("登出\""+auth.description+"\"失敗:"+e.message);
    });
}

如果不呼叫logout方法會導致當你手機中的微信切換成另一個賬號的時候,你微信登入獲取的還是之前的微信資訊,有快取。

推送問題?

hbuilder開發APP時預設集成了一些第三方的推送功能,比如個推。當然在使用的過程中也踩過一些坑。

1.IOS使用普通訊息模板進行推送時會彈出一個很醜的框,效果圖如下:

image.png

那麼怎麼去掉這個比較醜的框呢,在推送的時候我們用透傳訊息模版來推送就不會出現這個框了,這個時候就需要自己用程式碼監控訊息過來,當收到訊息的時候你可以自己建立一個本地訊息或者用系統訊息提示框來代替。

本地訊息建立:

function createLocalPushMsg(){
    var options = {cover:false};
    var str = dateToStr(new Date());
    str += ": 歡迎使用HTML5+建立本地訊息!";
    plus.push.createMessage( str, "LocalMSG", options );
    outSet( "建立本地訊息成功!" );
    outLine( "請到系統訊息中心檢視!" );
    if(plus.os.name=="iOS"){
        outLine('*如果無法建立訊息,請到"設定"->"通知"中配置應用在通知中心顯示!');
    }
}

系統提示框:

plus.nativeUI.alert()

2.IOS離線推送收不到?

安卓的APP如果被殺死了,想要做離線推送是不可能的,只能通過手機廠商來實現離線推送,IOS中也是通過蘋果提供的APNS服務來實現離線訊息的推送功能。

通過setAPNInfo(ApnPayload payload);來設定推送資訊,但是按照這樣的做法改了程式碼之後還是死活收不到訊息,線上的就可以了,搞了好久最後懷疑是評估證書的問題,在個推中建立推送應用是需要傳證書的,最開始之前我傳的.p12證書是通過ios_development.cer生成的,這個證書打包時要用到,當時也沒什麼問題,到後來發現離線推送不行了,才去找原因,發現蘋果開發者中心還有一個推送的證書型別,我去,這麼麻煩,又單獨申請了一個推送的證書

image.png

然後通過下面的方式生成了一個推送的.p12檔案,上傳到個推,最後才能收到離線訊息。

生成p12需要3個檔案:

1,本機在https://developer.apple.com/ios/manage/certificates/team/index.action生成certifacates時上傳的本機證書:CertificateSigningRequest.certSigningRequest

2,從https://developer.apple.com/ios/manage/overview/index.action的app IDs裡拿到的Push SSLCertificate,命名為:aps.cer

3,在本機雙擊aps.cer會自動載入到本機的Keychain中,在keychain中找到該證書,展開,匯出其下的private key為:key.p12

將以上3個檔案放在同一個資料夾中,並用terminal開啟,一次輸入下面命令(需要輸入密碼時均填寫123456):

1,openssl x509 -in aps.cer -inform DER -out aps.pem -outform PEM

2,openssl pkcs12 -nocerts -out key.pem -in key.p12

3,openssl pkcs12 -export -in aps.pem -inkey key.pem -certfile CertificateSigningRequest.certSigningRequest -name "push" -out push.p12

即可生成需要的p12

在生成IOS證書的時候如果遇到.cer 檔案新增到鑰匙串報錯:不能修改“System Roots”鑰匙串的問題請參考這篇文章的做法,有效:https://www.jianshu.com/p/ab3193236a68

相關推薦

hbuilder 開發5+ APP記錄

開發一款APP產品需要在安卓和蘋果2大平臺釋出,同時開發團隊也需要有安卓和IOS。 HTML5 Plus移動App,簡稱5+App,是一種基於HTML、JS、CSS編寫的運行於手機端的App,這種App可以通過擴充套件的JS API任意呼叫手機的原生能力,實現

windows 2008 r2下 IIS7.5 部署多個DV SSL證書 記錄

首先幾個關鍵詞:1. 免費DV SSL證書申請 (https://www.sslforfree.com/)2. 生成IIS需要的.pfx (下個軟體)3. 預設情況一個伺服器的IIS7只能繫結一個HTTPS也就是443埠 (升級到IIS8.5為佳)4. 開啟TLS 1.2 (

回顧vue開發spa(踩記錄

url 如果 after 本質 {} spa 不能 cnblogs 所有     使用vueJS開發前端頁面差不多也有大半多年了。由於項目後臺管理頁面最早都是使用JQ進行開發的,剛開始使用vue的時候,只能是直接在頁面裏面引入vueJS框架進行開發,期間把項目後臺的編輯頁面

springboot kafka整合(包括java程式碼不能傳送和消費kafka訊息的記錄

kafka採坑記錄:     1、kafka服務端server.properties中的broker.id叢集內需要唯一。     2、kafka config檔案中listeners和advertised.listeners需要配置本機ip:9092

微信小程式記錄 ------- canvas 生成分享到朋友圈帶小程式碼的圖片

最近做了一個問卷類的小程式,其中的結果頁想讓使用者進行朋友圈分享轉發,網上搜索資料,得出解決思路,用 canvas 將頁面繪製生成圖片,然後儲存到手機相簿,最終效果如下: 在這裡我只寫頁面裡關於 canvas 生成圖片並進行儲存這個流程的相關程式碼,並且會

oracle11g資料庫安裝記錄 Oracle the network adapter could not establish the connection

第一處坑: 解決方案: 原文:https://blog.csdn.net/yhj198927/article/details/49178279  1.開啟oracle的“Net Manager”   2.開啟“監聽程式”   3.開啟“資料庫服務”  

mybatis記錄

動態sql對字串的判斷 之前只對null和空做過判斷,沒有對具體的內容做過判斷,這次開發過程中做了內容判斷結果死活不對 如下:status != '1' 始終無法判斷通過 後來查了資料需要改為status != '1'.toString() 突然想到了Java裡面的字串判斷

Spring Security 4.x -> 5.x 踩記錄

1. AuthenticationManager無法自動注入 在實現AbstractAuthenticationProcessingFilter重寫以使用者名稱、密碼認證時,需要顯示注入AuthenticationManager,不然會報如下錯誤: Caus

com.google.gson.JsonSyntaxException: java.lang.NumberFormatException使用GsonFormat,記錄

今天依舊從PostMan測試介面,拿JSON格式資料。使用GsonFormat進行格式轉換。 然後進行網路請求,但是執行程式,出現錯誤。 錯誤如下所示: com.google.gson.JsonSynt

windows7下安裝darknet配置YOLO3的記錄

情況說明 下載 第一個坑:由於我的win7上已經安裝過CUDA9.0+cuDNN7.0加速器,採取的教程是我的AI之路(5)--如何選擇和正確安裝跟Tensorflow版本對應

從VS下專案搬遷至Linux編譯記錄

1、將*.cpp檔案複製到linux資料夾下,執行操作 g++ xxx.cpp -o xxx 2、如果有額外的庫,入opencv,採用如下方式 g++ xxx.cpp -o xxx -I /usr/local/include/opencv -L /usr/local/l

使用HBuilder開發移動APP:ajax呼叫介面資料

既然要做APP,與介面互動式少不了的,除非只是想做一個純靜態的APP。所以html5+的環境準備好後,我最先開始研究的就是如何與介面互動。 使用HBuilder新建示例教程後,裡面會有一個ajax(網路請求)的列子,檔案目錄是examples/ajax.html。看了下這個檔

記一次ES安裝的記錄

今天心血來潮,想玩玩ES(elasticSearch),我使用的作業系統版本是:CentOS7.4,ES版本是:6.3.2,Java版本是:8u181。具體的下載步驟這裡不再做詳細介紹。 安裝完Jdk後開始安裝es。 第一步:在/usr下新建資料夾:/es。將es的壓縮包解壓到/

ubuntu16.04安裝配置vsftpd記錄

歡迎光臨我的個人主頁 最近學習linux, 在安裝配置vsftpd時遇到問題,記錄一下 一.安裝配置可以參考Ubuntu 16.04下vsftpd 安裝配置例項 二.沒看上面的教程之前,我以為是vsfp

RN 記錄

記錄RN學習過程 Cannot add a child that doesn’t have a YogaNode to a parent without a measure function! 錯誤原因: 檢查下標籤對中是否有非法的字元 如:<Text&g

Clipboard深度實踐與記錄

1.css禁止選擇導致IOS無法複製 body{ -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: non

微信小程式記錄

坑一:wx:for迴圈,2層資料可以迴圈出來,但陣列物件的屬性迴圈不出來; 錯誤程式碼: <block  wx:for="{{arr}}" wx:key="{{index}}">   <view>{{item.attributes.name}}<

IOS h5頁面記錄

1. input 輸入框樣式IOS上回會有個很醜的內邊框 新增  -webkit-appearance: none;  就可以去掉 input { height: 100%; width: 100%; box-shadow: none; ou

最簡潔簡單的vue axios springboot2.0 cookie token jwt 跨域 cors cookie存token header 頭請求帶token 登陸login 記錄

vue axios springboot2.0 cookie  token jwt 跨域 cors cookie存token  header 頭請求帶token 登陸login 採坑記錄  首先 後端 pom檔案 <dependency&g

Flume hive sink記錄

一、hive sink概述hive sink與hdfs sink 想對比,hive sink可以近實時的把資料採集到hive表中,hdfs sink要構建hive外部表去關聯hdfs路徑,並且實時性沒辣麼高。二、注意事項1、Hive表必須設定bucket並且 stored a