10 其他说明 - MiEcosystem/ios-rn-sdk GitHub Wiki
插件系统集成了第三方开源项目 ReactLocalization 来实现插件的多语言化,该库文件位于 CommonModules 文件夹中
var LocalizedStrings = require("../CommonModules/LocalizedStrings");
注意 具体的使用请参照开源项目的wiki
米家APP要求插件支持四种语言:
- 简体中文
- 英文
- 繁体中文(香港)
- 繁体中文(台湾)
iOS9及以后的版本,系统的语言 key 包含了手机的地区信息,例如中国区-简体中文的语言 key 为 "zh-Hans-CN",而香港区-简体中文的语言 key 为 "zh-Hans-HK",我们对此作了修改,返回给插件的语言设置去掉了地区的信息,这样,只需要支持 "en"、"zh-Hans"、"zh-Hant"、"zh-HK"、"zh-TW" 5 个 key 即可。AL-[100,)
"en":{
},
"zh-Hans":{
//简体中文
},
"zh-Hant":{
//繁体中文
},
"zh-HK":{
//繁体中文(香港)
},
"zh-TW":{
//繁体中文(台湾)
},
"es": {
//西班牙语
},
"ru": {
//俄语
},
"ko":{
//韩语,暂不做要求,请根据自身产品需求决定是否支持
}
var ReactLocalization = require("NativeModules").ReactLocalization;
console.warn(""constants:" + ReactLocalization.systemLanguage+"\n");
language 米家中设置的语言
systemLanguage 系统语言
-
getLanguage(callback)
AL-[123,)
var ReactLocalization = require("NativeModules").ReactLocalization; ReactLocalization.getLanguage((error, currentLanguage, systemLanguage) => { //error:是否出错 //currentLanguage: 米家app内用户设置的语言,字符串 //systemLanguage: 系统的当前语言字符串 if(!error){ console.warn("currentLanguage:" + currentLanguage +"\n" + "systemLanguage:" + systemLanguage + "\n"+"constants:" + ReactLocalization.systemLanguage+"\n"); } })
iPhone X 采用 @3X 图,开发尺寸为 375 * 812 pt。其中 Status Bar 向上延伸至屏幕顶端,延伸高度为 24 pt(即现在 Status Bar高度为 44 );Tab Bar向下延伸至屏幕底部,延伸高度为 34 pt (即现在Tab Bar高度为 83)。
1,保证设计布局能够填满整个屏幕
2,注意 Safe Area,核心内容不要被设备的圆角、传感器以及底部访问主屏幕的指示灯遮挡
*对于iPhone X来说,安全区域为除去顶部44pt以及底部34pt之后的其他区域
1,请在 config.plist 文件中添加 supportIPhoneX
字段,类型为 Boolean
,值为 YES
。
2,请根据自家插件的设计制定适配方案,Human Interface Guidelines 会是你的好帮手。通常,需要修改的地方有:
- 导航
如果使用 MHNavigationBar
组件,需要将其下移 24 pt,可参考 com.xiaomi.demoios
插件中 index.ios.js 文件,使用 marginTop: 24
来达到此目的。
- 屏幕底部交互控件
如果有靠近屏幕底部的交互,将控件上移到距离底部34 pt 以上的范围内(即安全区域内)。
插件配置widget总共分两步,
- 填写配置文件plist
- 准备icon图片
widget的配置在插件配置中填写,插件配置文件config.plist中添加一个key, widget,类型为dictionary,widget dictionary在config.plist中具体结构如下;
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>pluginStructureVersion</key>
<integer>1</integer>
<key>noFrameworkCode</key>
<true/>
<key>deviceStatusRefreshInterval</key>
<integer>6</integer>
<key>customSceneTriggerIds</key>
<array>
<string>250</string>
</array>
<key>customSceneActionIds</key>
<array>
<string>250</string>
</array>
<key>widget</key>
<dict>
<key>deviceImage</key>
<string>demo_operation_device_icon</string>
<key>contents</key>
<array>
<dict>
<key>localizablename</key>
<dict>
<key>en</key>
<string>open</string>
<key>zh_HK</key>
<string>打開</string>
<key>zh_TW</key>
<string>打開</string>
<key>zh_CN</key>
<string>打开</string>
</dict>
<key>name</key>
<string>widget.operation.icon.ondemo</string>
<key>iconurl</key>
<string>demo_operation_icon_auto</string>
<key>method</key>
<string>set_power</string>
<key>params</key>
<string>on</string>
</dict>
<dict>
<key>name</key>
<string>widget.operation.icon.off</string>
<key>iconurl</key>
<string>demo_operation_icon_love</string>
<key>method</key>
<string>set_power</string>
<key>params</key>
<string>off</string>
</dict>
</array>
</dict>
</dict>
</plist>
可以用xcode打开com.xiaomi.demoios中的config.plist参考(温馨提示,可以拖拽demo中config.plist中的widget字段到自己的config.plist中,修改一下就可以了)
deviceImage为设备图标的文件名,contents为widget支持的操作数组,每一项的dictionary结构如下
<dict>
<key>localizablename</key>
<dict>
<key>en</key>
<string>open</string>
<key>zh_HK</key>
<string>打開</string>
<key>zh_TW</key>
<string>打開</string>
<key>zh_CN</key>
<string>打开</string>
</dict>
<key>name</key>
<string>widget.operation.icon.ondemo</string>
<key>iconurl</key>
<string>demo_operation_icon_auto</string>
<key>method</key>
<string>set_power</string>
<key>params</key>
<string>on</string>
</dict>
name和localizablename都是widget操作的名字,例如“打开”“关闭”“最爱”等,name中填写多语言字符串的key,app支持的多语言字符串key可以查询localizable.strings中搜widget关键字,如果app没有提供,自己在localizablename字典中支持四种语言的名字
iconurl为widget操作的图片名,以上图片名均填写文件名即可,不用管路径
最后且最实质的一步配置,是rpc命令的方法名和参数,method为调用的rpc方法名,params为方法的参数,如果有多个参数则用","分隔
widget图片都放在插件包的Resources/widget目录下,deviceImage只需准备@2x/@3x两张图片,文件名为对应字段的文件名;iconurl则需要三份图片,@2x/@3x共六张图片,对应iconurl字段的文件名、iconurl_closed、iconurl_open三份图片,展示在设备不同在线情况下
同样参考一下com.xiaomi.demoios中的图片命名和图片大小
大功告成,打包测试吧
-
我们推荐使用系统自带字体,维护成本最低,避免版权、迁移等等问题。如必须使用其他字体,参考下一条。
-
米家 iOS App 目前支持以下字体,请从中选择,并注意 API Level。
API Level: [135, ]
- D-DIN
- D-DINCondensed-Bold
- D-DINCondensed
- D-DINExp-Bold
API Level:[119, ]
- Kmedium
- DS-Digital
- MI-LANTING--GBK1-Light
- MI-LANTING--GBK1-Thin
-
以上字体直接在 Style 中直接使用
fontFamily
调用即可。 -
考虑版权问题与维护成本,不接受其他字体。