移動操作系統(tǒng)棉钧,每年會有一個大版本的發(fā)布,對部分功能多少會有影響涕蚤,最近由于蘋果發(fā)布了IOS10宪卿,以及android .6系統(tǒng)的普及,導(dǎo)致部分項目無法正常運轉(zhuǎn)万栅,嘗試了一番愧捕,解決了所有問題,為此記錄一下申钩,方便同樣問題的同志及時解決掉次绘。
IOS10升級后的問題
其實自從IOS9+以后, iphone平臺變化還是挺大的撒遣,可能這里列舉不是很全邮偎,算是參考吧!
HTTPS協(xié)議
IOS9以后要求所有的app都要尊崇https協(xié)議义黎,以及ipv6服務(wù)標(biāo)準(zhǔn)禾进。
對此最好的解決方案就是,更改服務(wù)的協(xié)議到https廉涕。
還有一種方案就是需要配置NSAppTransportSecurity泻云。
也可以對指定的url添加白名單:
從2017年1月1日起,,所有新提交的 app 默認(rèn)不允許使用NSAllowsArbitraryLoads來繞過ATS的限制,默認(rèn)情況下你的 app 可以訪問加密足夠強的(TLS V1.2以上)HTTPS內(nèi)容。
可以選擇使用NSExceptionDomains設(shè)置白名單的方式對特定的域名開放HTTP內(nèi)容來通過審核,比如說你的應(yīng)用集成了第三方的登錄分享SDK,可以通過這種方式來做狐蜕。
更多的配置:
NSAllowsArbitraryLoads - 設(shè)置 true 即支持所有 HTTP 請求
NSExceptionDomains - 添加白名單
NSExceptionMinimumTLSVersion - 白名單指定域名支持的 TLS 版本
NSExceptionRequiresForwardSecrecy - 白名單指定域名是否支持 Forward Secrecy
NSExceptionAllowsInsecureHTTPLoads - 白名單指定域名禁用 ATS
NSThirdPartyExceptionMinimumTLSVersion - 白名單指定第三方服務(wù)域名最低支持的 TLS 版本
NSThirdPartyExceptionRequiresForwardSecrecy - 白名單指定第三方服務(wù)域名是否支持 Forward Secrecy
NSThirdPartyExceptionAllowsInsecureHTTPLoads - 白名單指定第三方域名禁用 ATS
配置白名單針對第三方應(yīng)用
如果你的應(yīng)用需要打開或者檢查本地是否安裝了指定的app宠纯,就需要配置一個LSApplicationQueriesSchemes, 這樣才可以成功調(diào)用支付层释,或者地圖等應(yīng)用婆瓜。
比如下面這個設(shè)置,是針對于百度地圖的:
配置description針對用戶使用權(quán)限
在升級ios10以后贡羔,發(fā)現(xiàn)調(diào)用相機或者相冊等權(quán)限時廉白,發(fā)現(xiàn)閃退現(xiàn)象。
查找一番需要配置description, 如下:
大概統(tǒng)計了一下需要加的一些字段列在下面:
NSContactsUsageDescription -> 通訊錄
NSMicrophoneUsageDescription -> 麥克風(fēng)
NSPhotoLibraryUsageDescription -> 相冊
NSCameraUsageDescription -> 相機
NSLocationAlwaysUsageDescription -> 地理位置
NSLocationWhenInUseUsageDescription -> 地理位置
配置allow-intent
做H5的同學(xué)都知道乖寒,可以通過h5調(diào)用系統(tǒng)打電話功能猴蹂,比如:
發(fā)現(xiàn)在ios10上不起作用,查找一番需要配置allow-intent楣嘁, 這個要在混合應(yīng)用的config.xml中進行配置:
再次嘗試一下磅轻,OK了覆获!
cordova加載html 頁面,出現(xiàn)白屏
當(dāng)升級系統(tǒng)過瓢省,返現(xiàn)之前的app打開后出現(xiàn)白屏現(xiàn)象弄息,于此同時后臺沒有任何錯誤,找了很久沒有發(fā)現(xiàn)問題勤婚,猜想是不是因為平臺版本太老的原因:
于是摹量,升級了一下ios-platorm 到4.0版本,因為之前用的都是3.X.
再次運行馒胆,可以看到頁面缨称,但是還又一些小問題,比如布局錯亂等問題祝迂。
在對JS Library做了一次升級睦尽,全部升級到latest版本,保證代碼的可運行狀態(tài)型雳。
這次終于正常了当凡,一切ok.
這里建議大家一定要到平臺版本及時更新,以保證對系統(tǒng)webkit做最好的支持纠俭。
現(xiàn)在最新的是:
ios-platform 4.2
android-platform 5.2
推送通知
iOS10以后沿量,想要正常收到推送通知,需要進行額外的配置:
字體改變
iOS10的字體發(fā)生了變化冤荆,這導(dǎo)致一些文字在原有的寬高約束下可能會出現(xiàn)顯示不完整或者留白的情況朴则,需要逐一檢查。
Android
相比較而言Android變化影響會小一些钓简,但是同樣會存在問題乌妒。
需要升級到最新的platform
保證我們自定插件能得到更多的api支持以及webkit更好的支持。
權(quán)限配置
自android6.0以后外邓,android對權(quán)限的要求和ios十分相似撤蚊,要求用戶手動授權(quán)是否允許應(yīng)用使用該權(quán)限。
對于Android來講坐榆,主要有兩種權(quán)限拴魄,一個是正常權(quán)限,比如網(wǎng)絡(luò)席镀。還有一個危險權(quán)限,比如相冊夏漱,相機豪诲,聯(lián)系人等等,都需要用戶授權(quán)挂绰。
我們所要關(guān)注的就是危險權(quán)限屎篱,這些權(quán)限會被分為不同的權(quán)限組(PermissionGroup)服赎,這里需要說明一下,當(dāng)一個權(quán)限組里的任一權(quán)限被授權(quán)交播,這個組里的其他權(quán)限也都會被授權(quán)重虑,比如:READ_EXTERNAL_STORAGE這個讀SD卡的權(quán)限被授權(quán)了,這時候WRITE_EXTERNAL_STORAGE也同時被授權(quán)秦士。
具體實現(xiàn)方案比如:
權(quán)限的檢查:
if(ContextCompat.checkSelfPermission(thisActivity,Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
}else{
// }
這里涉及到一個API缺厉,ContextCompat.checkSelfPermission,主要用于檢測某個權(quán)限是否已經(jīng)被授予隧土,方法返回值為PackageManager.PERMISSION_DENIED或者PackageManager.PERMISSION_GRANTED提针。當(dāng)返回DENIED就需要進行申請授權(quán)了。
申請權(quán)限:
ActivityCompat.requestPermissions(thisActivity,newString[]{Manifest.permission.READ_CONTACTS},MY_PERMISSIONS_REQUEST_READ_CONTACTS);
該方法是異步的曹傀,第一個參數(shù)是Context辐脖;第二個參數(shù)是需要申請的權(quán)限的字符串?dāng)?shù)組;第三個參數(shù)為requestCode皆愉,主要用于回調(diào)的時候檢測嗜价。可以從方法名requestPermissions以及第二個參數(shù)看出幕庐,是支持一次性申請多個權(quán)限的炭剪,系統(tǒng)會通過對話框逐一詢問用戶是否授權(quán)。
處理權(quán)限申請回調(diào):
@Override
public voidonRequestPermissionsResult(intrequestCode, String permissions[], int[]grantResults)
{
switch (requestCode) {
caseMY_PERMISSIONS_REQUEST_READ_CONTACTS: { /
/ If request is cancelled, the result arrays areempty.
if(grantResults.length>0&&grantResults[0] ==PackageManager.PERMISSION_GRANTED) { /
/ permission was granted, yay! Do the //contacts-related task you need to do. } else {
// permission denied, boo! Disable the //functionality that depends on this permission.
} return; }
}
}
對于混合應(yīng)用翔脱,我們可以安裝一個插件來替代:
這個插件是針對于android 平臺的:
使用如下:
Normal Permissions如下:
ACCESS_LOCATION_EXTRA_COMMANDS READ_SYNC_SETTINGS
ACCESS_NETWORK_STATE READ_SYNC_STATS
ACCESS_NOTIFICATION_POLICY RECEIVE_BOOT_COMPLETED
ACCESS_WIFI_STATE REORDER_TASKS
BLUETOOTH REQUEST_INSTALL_PACKAGES
BLUETOOTH_ADMIN SET_TIME_ZONE
BROADCAST_STICKY SET_WALLPAPER
CHANGE_NETWORK_STATE SET_WALLPAPER_HINTS
CHANGE_WIFI_MULTICAST_STATE TRANSMIT_IR
CHANGE_WIFI_STATE USE_FINGERPRINT
DISABLE_KEYGUARD VIBRATE
EXPAND_STATUS_BAR WAKE_LOCK
GET_PACKAGE_SIZE WRITE_SYNC_SETTINGS
INTERNET SET_ALARM
KILL_BACKGROUND_PROCESSES INSTALL_SHORTCUT
MODIFY_AUDIO_SETTINGS UNINSTALL_SHORTCUT
NFC
DangerousPermissions如下:
Permission Group Permissions
CALENDAR
READ_CALENDAR
WRITE_CALENDAR
CAMERA
CAMERA
CONTACTS
READ_CONTACTS
WRITE_CONTACTS
GET_ACCOUNTS
LOCATION
ACCESS_FINE_LOCATION
ACCESS_COARSE_LOCATION
MICROPHONE
RECORD_AUDIO
PHONE
READ_PHONE_STATE
CALL_PHONE
READ_CALL_LOG
WRITE_CALL_LOG
ADD_VOICEMAIL
USE_SIP
PROCESS_OUTGOING_CALLS
SENSORS
BODY_SENSORS
SMS
SEND_SMS
RECEIVE_SMS
READ_SMS
RECEIVE_WAP_PUSH
RECEIVE_MMS
STORAGE
READ_EXTERNAL_STORAGE
WRITE_EXTERNAL_STORAGE
Cordova6.0+新特性
cordova的特性不是很多奴拦,主要是版本支持,但是有一點需要我們注意届吁。
對于插件安裝的發(fā)布错妖,升級后可以指定默認(rèn)版本對于cordova, 這也就意味著,我們在執(zhí)行:
可能不會獲取到最新版本的插件疚沐。
但是可以通過如下方法獲仍萋取:
上圖為2017年最新的視頻教程資料,搜索2352149755加我好友私聊我上傳視頻教程亮蛔,有什么不懂的也可以來私聊問我痴施。
不定時更新中。
如果你能明白這些視頻資料的好差究流,那么你也算是入行了辣吃,底層和中高層就是這一步之差。