HTML5+ API Reference的蠻多接口挺好用的,uni-app
App 端內置 HTML5+ 引擎,讓 js 可以直接調用豐富的原生能力。官方文檔:http://www.html5plus.org/doc/zh_cn/runtime.html
以及先了解下:uni-app使用HTML5+ 的注意事項
一、問題背景
IOS上傳app store又被拒了,還是之前說是微信安裝的原因
Guideline 4.2.3 - Design - Minimum Functionality We were required to install the WeChat app before we could log in via WeChat.
Users should be able to log in with WeChat and access their accounts without having to install any additional apps. Next Steps If you would like to offer authentication through WeChat, please use a mechanism that allows users to log in with WeChat
from within your app without first having to install an additional app. We recommend implementing the Safari View Controller API to display web content within your app.
The Safari View Controller allows the display of a URL and inspection of the certificate from an embedded browser in an app
so that customers can verify the webpage URL and SSL certificate to confirm they are entering their sign in credentials
into a legitimate page. Resources For additional information on the Safari View Controller API, please review the What's New in Safari webpage. Please see attached screenshot for details.
准則4.2.3-設計-最低功能 我們需要先安裝微信應用程序,然后才能通過微信登錄。用戶應該能夠使用微信登錄並訪問自己的帳戶,而無需安裝任何其他應用程序。 下一步 如果您想通過微信提供身份驗證,請使用一種機制,允許用戶從您的應用程序中使用微信登錄,而無需先安裝其他應用程序。 我們建議實現Safari視圖控制器API來顯示應用程序中的web內容。Safari View Controller允許在應用程序中顯示URL和檢查嵌入式瀏覽器中的證書,
以便客戶可以驗證網頁URL和SSL證書,以確認他們正在將登錄憑據輸入合法頁面。 資源 有關Safari視圖控制器API的更多信息,請查看Safari網頁中的新增內容。 有關詳細信息,請參閱隨附的屏幕截圖。
也就是說設備未安裝微信客戶端,點微信登錄的時候提示報錯。還記得上次這個原因拒絕,是要我們提供了等值的蘋果登錄(sign in with apple)就通過了,沒想到更新版本的時候又報這個原因拒絕,坑啊,為什么第一次因為這個原因拒絕的時候,要我們提供蘋果登錄呢。
簡單的說,就是:使用微信分享、登錄必須安裝微信客戶端,QQ登錄、QQ空間分享過程中必須安裝手機QQ客戶端,在未安裝客戶端的設備上測試會提示下載,這是不符合蘋果審核規則的。
解決方法:首先調用微信SDK或QQ互聯SDK的方法檢測是否安裝微信/QQ客戶端:
[QQApi isQQInstalled]
isWXAppInstalled
如果未安裝客戶端則隱藏對應登錄或分享按鈕。
經過驗證上述方法可以有效通過APPstore審核,這邊會密切關注微信及QQ互聯方面的動態,如果有更好的解決方案,也會第一時間更新。

這是原生app的方法,那么需要考慮uniapp如何判斷設備上是否安裝微信之類的。其實也有比較簡單的api提供。
二、uni-app如何判斷是否安裝騰訊QQ微信微博支付寶淘寶客戶端呢
Boolean plus.runtime.isApplicationExist(appInf);
(1)說明:如果第三方程序已安裝則返回true,未安裝則返回false。
關於 ApplicationInf 參數,官方也有詳細描述,查看:http://www.html5plus.org/doc/zh_cn/runtime.html#plus.runtime.ApplicationInf
Android平台需要通過設置 appInf 的 pname 屬性(包名)進行查詢。
iOS平台需要通過設置 appInf 的 action 屬性(Scheme)進行查詢,
在iOS9以后需要添加白名單才可查詢,在manifest.json文件plus->distribute->apple->urlschemewhitelist節點下添加(如urlschemewhitelist:[“weixin”]).
判斷其他應用是否安裝,可以用對應的pname和action來判斷。以下是一些常用平台的pname和action。
平台 | pname | action |
---|---|---|
微信 | com.tencent.mm | weixin:// |
com.tencent.mobileqq | mqq:// | |
新浪微博 | com.sina.weibo | sinaweibo:// |
淘寶 | com.taobao.taobao | taobao:// |
支付寶 | com.eg.android.AlipayGphone | alipay:// |
京東 | com.jingdong.app.mall | openApp.jdMobile:// |
優酷 | com.youku.phone | youku:// |
高度地圖 | com.autonavi.minimap | iosamap:// |
百度地圖 | com.baidu.BaiduMap | baidumap:// |
3、代碼示例
// 判斷第三方程序(微信) 是否安裝
function checkApp(){ if(plus.runtime.isApplicationExist({pname:'com.tencent.mm',action:'weixin://'})){ console.log("微信應用已安裝"); }else{ console.log("微信應用未安裝"); } }