10 其他说明 - MiEcosystem/ios-rn-sdk GitHub Wiki

其他说明

扩展程序国际化

插件系统集成了第三方开源项目 ReactLocalization 来实现插件的多语言化,该库文件位于 CommonModules 文件夹中

var LocalizedStrings = require("../CommonModules/LocalizedStrings");

注意 具体的使用请参照开源项目的wiki

米家的多语言化标准

米家APP要求插件支持四种语言:

  1. 简体中文
  2. 英文
  3. 繁体中文(香港)
  4. 繁体中文(台湾)

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 简易适配指南

变化

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 以上的范围内(即安全区域内)。

widgetconfig 配置项的含义

插件配置widget总共分两步,

  • 填写配置文件plist
  • 准备icon图片

config.plist填写

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为方法的参数,如果有多个参数则用","分隔

准备icon图片

widget图片都放在插件包的Resources/widget目录下,deviceImage只需准备@2x/@3x两张图片,文件名为对应字段的文件名;iconurl则需要三份图片,@2x/@3x共六张图片,对应iconurl字段的文件名、iconurl_closed、iconurl_open三份图片,展示在设备不同在线情况下

同样参考一下com.xiaomi.demoios中的图片命名和图片大小

大功告成,打包测试吧

在米家扩展程序中使用自定义字体

  1. 我们推荐使用系统自带字体,维护成本最低,避免版权、迁移等等问题。如必须使用其他字体,参考下一条。

  2. 米家 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
  3. 以上字体直接在 Style 中直接使用 fontFamily 调用即可。

  4. 考虑版权问题与维护成本,不接受其他字体。

⚠️ **GitHub.com Fallback** ⚠️