1. 程式人生 > >Expo大作戰(二十九)--expo sdk api之registerRootComponent(註冊跟組件),ScreenOrientation(屏幕切換),SecureStore,

Expo大作戰(二十九)--expo sdk api之registerRootComponent(註冊跟組件),ScreenOrientation(屏幕切換),SecureStore,

修改 使用 pass con Go rip shared package api

技術分享圖片

簡要:本系列文章講會對expo進行全面的介紹,本人從2017年6月份接觸expo以來,對expo的研究斷斷續續,一路走來將近10個月,廢話不多說,接下來你看到內容,講全部來與官網

我猜去全部機翻+個人修改補充+demo測試的形式,對expo進行一次大補血!歡迎加入expo興趣學習交流群:597732981

【之前我寫過一些列關於expo和rn入門配置的東i西,大家可以點擊這裏查看:從零學習rn開發】

相關文章:

Expo大作戰(一)--什麽是expo,如何安裝expo clinet和xde,xde如何使用

Expo大作戰(二)--expo的生命周期,expo社區交流方式,expo學習必備資源,開發使用expo時關註的一些問題

Expo大作戰(三)--針對已經開發過react native項目開發人員有針對性的介紹了expo,expo的局限性,開發時項目選型註意點等

Expo大作戰(四)--快速用expo構建一個app,expo中的關鍵術語

Expo大作戰(五)--expo中app.json 文件的配置信息

Expo大作戰(六)--expo開發模式,expo中exp命令行工具,expo中如何查看日誌log,expo中的調試方式

Expo大作戰(七)--expo如何使用Genymotion模擬器

Expo大作戰(八)--expo中的publish以及expo中的link,對link這塊東西沒有詳細看,大家可以來和我交流

更多>>

寫在二十三章以後的話,之前的翻譯,不管如何,好與不好,終究是告一段落,也把expo基礎理論的東西又深入的理解了一遍,後續expo大作戰系列將主要介紹expo sdk的api。


SecureStore

提供在設備上本地加密和安全存儲鍵值對的方法。 每個expo項目都有獨立的存儲系統,無法訪問其他expo項目的存儲。

iOS:使用keychain服務將值存儲為kSecClassGenericPassword。 iOS有額外的選項可以設置值的kSecAttrAccessible屬性,該屬性控制何時可以獲取值。

Android:值存儲在SharedPreferences中,並使用Android的Keystore系統進行加密。

Expo.SecureStore.setItemAsync(key,value,options)
存儲鍵值對。

參數

key (string) - 與存儲值關聯的鍵。按鍵可能包含字母數字字符。, - 和_(Keys may contain alphanumeric characters ., -, and _.)。

value (string) - 要存儲的值。

選項(對象)(可選)(options (object) (optional) ) - 選項圖:

keychainService (string) -

  • iOS:該項目的服務,相當於kSecAttrService
  • Android:相當於公鑰/私鑰對別名

註意如果使用keychainService選項設置該項目,則需要稍後獲取該值。

keychainAccessible (enum) -

僅限iOS:使用iOS的kSecAttrAccessible屬性指定存儲條目何時可訪問。請參閱Apple關於鑰匙串物品輔助功能的文檔。可用的選項是:

  • Expo.SecureStore.WHEN_UNLOCKED:鑰匙串項目中的數據只能在設備被用戶解鎖時訪問。
  • Expo.SecureStore.AFTER_FIRST_UNLOCK:重啟後無法訪問鑰匙串項目中的數據,直到用戶解鎖設備一次。如果您在手機鎖定時需要訪問該項目,這可能很有用。
  • Expo.SecureStore.ALWAYS:無論設備是否被鎖定,始終可以訪問鑰匙串項目中的數據。這是最不安全的選擇。
  • Expo.SecureStore.WHEN_UNLOCKED_THIS_DEVICE_ONLY:與WHEN_UNLOCKED類似,但從備份還原時不會將條目遷移到新設備。
  • Expo.SecureStore.WHEN_PASSCODE_SET_THIS_DEVICE_ONLY:與WHEN_UNLOCKED_THIS_DEVICE_ONLY類似,用戶必須設置密碼才能存儲條目。如果用戶刪除他們的密碼,該條目將被刪除。
  • Expo.SecureStore.AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY:與AFTER_FIRST_UNLOCK類似,但從備份還原時不會將條目遷移到新設備。
  • Expo.SecureStore.ALWAYS_THIS_DEVICE_ONLY:與ALWAYS類似,但從備份還原時不會將條目遷移到新設備。

返回

如果值無法存儲在設備上,則承諾將拒絕(A promise that will reject if value cannot be stored on the device.)

Expo.SecureStore.getItemAsync(key,options)
獲取與提供的密鑰關聯的存儲值。

參數

key (string) - 用於存儲關聯值的鍵。

options (object) 選項(對象)(可選) - 選項圖:

keychainService(字符串) - iOS:項目的服務,等同於kSecAttrService。 Android:相當於公鑰/私鑰對別名。

註意如果使用keychainService選項設置該項目,則需要稍後獲取該值。

返回

解析為先前存儲的值的承諾;如果沒有給定鍵的條目,則為null。 如果在檢索值時發生錯誤,承諾將拒絕。

Expo.SecureStore.deleteItemAsync(鍵,選項)
刪除與提供的密鑰關聯的值。

參數

key (string) - 用於存儲關聯值的鍵。

options (object) 選項(對象)(可選) - 選項圖:

keychainService(字符串) - iOS:項目的服務,等同於kSecAttrService。 Android:相當於公鑰/私鑰對別名。 如果該項目使用KeychainService進行設置,則需要稍後獲取該值。

返回

如果價值無法刪除,承諾將拒絕。

用這個做本地化儲存的話,要安全些,這也是他的優點,提供在設備上本地加密和安全存儲鍵值對的方法。 每個expo項目都有獨立的存儲系統,無法訪問其他expo項目的存儲。

ScreenOrientation

允許在運行時更改支持的屏幕方向。 這將優先於app.json中的方向鍵。

Expo.ScreenOrientation.allow(orientation)

允許屏幕方向。 您可以使用多個方向多次調用此函數以允許多個方向。

參數

orientation (string) - 允許的方向。 有關可能的值,請參閱方向枚舉。

function changeScreenOrientation() {
  Expo.ScreenOrientation.allow(Expo.ScreenOrientation.Orientation.LANDSCAPE);
}

Expo.ScreenOrientation.Orientation

包含可以傳遞給allow函數的值的對象。(幾種枚舉類型,代表可以傳遞給Expo.ScreenOrientation.allow(orientation)的參數

  • ALL - 所有4種可能的方向
  • ALL_BUT_UPSIDE_DOWN - 除了反向肖像之外,可能是某些Android設備上的所有4種方向。
  • PORTRAIT - 肖像取向,也可能是某些Android設備上的反向肖像。
  • PORTRAIT_UP - 僅限上行肖像。(Upside portrait only.)
  • PORTRAIT_DOWN - 僅限顛倒肖像。
  • LANDSCAPE - 任何風景定位。
  • LANDSCAPE_LEFT - 僅限左側風景。
  • LANDSCAPE_RIGHT - 僅限右側景觀。

下為原文:

  • ALL — All 4 possible orientations

  • ALL_BUT_UPSIDE_DOWN — All but reverse portrait, could be all 4 orientations on certain Android devices.

  • PORTRAIT — Portrait orientation, could also be reverse portrait on certain Android devices.

  • PORTRAIT_UP — Upside portrait only.

  • PORTRAIT_DOWN — Upside down portrait only.

  • LANDSCAPE — Any landscape orientation.

  • LANDSCAPE_LEFT — Left landscape only.

  • LANDSCAPE_RIGHT — Right landscape only.

檢測方向何時改變(Detecting when the orientation changes)

做到這一點的最好方法是監聽對尺寸的更改。(The best way to do this is to listen for changes to Dimensions.)

registerRootComponent

Expo.registerRootComponent(component)

設置expo用於您的應用程序的主要組件。

註意:在SDK 18之前,有必要直接使用registerRootComponent,但對於從SDK 18或更高版本創建的項目,這將在Expo SDK中自動處理。

參數

component(ReactComponent) - 呈現應用程序其余部分的React組件類。

返回

沒有返回值。(No return value.)

註意:Expo.registerRootComponent大致相當於React Native的AppRegistry.registerComponent,並提供一些額外的掛鉤來提供Expo的特定功能(是對AppRegistry.registerComponent的又一個高層的封裝)。

常見問題

我在SDK 18之前創建了我的項目,並且我想要移除Expo.registerRootComponent,我該怎麽做?

  • 在繼續之前,請確保您的項目在SDK 18或更高版本上運行。
  • 打開main.js(或者如果你改變它,無論你的“main”是在package.json中)。(Open up main.js (or if you changed it, whatever your "main" is in package.json).)
  • 將“main”設置為“node_modules / expo / AppEntry.js”。
  • 從main.js中刪除Expo.registerRootComponent調用,並在根組件的類聲明之前放置導出默認值。(Delete the Expo.registerRootComponent call from main.js and put export default before your root component’s class declaration.)
  • 將main.js重命名為App.js.

如果我想將我的主應用程序文件命名為App.js以外的東西,該怎麽辦?

您可以將package.json中的“main”設置為項目中的任何文件。 如果你這樣做,那麽你需要使用registerRootComponent; 如果您使用自定義條目文件,導出默認值將不會使該組件成為expo應用程序的根。

例如,假設您希望將“src / main.js”作為應用程序的條目文件 - 例如,您可能不喜歡在項目根目錄中包含JavaScript文件。 首先,在package.json中設置它:

{
  "main": "src/main.js"
}

然後在“src / main.js”中,確保你調用了registerRootComponent(),並將你想渲染的組件傳遞給應用程序的根目錄。

import Expo from expo;
import React from react;
import { View } from react-native;

class App extends React.Component {
  render() {
    return <View />;
  }
}

Expo.registerRootComponent(App);

這一部分很有用,大家慢慢體會,用到的時候,就用!


下一張繼續介紹,這一篇主要介紹了:expo sdk api之registerRootComponent(註冊跟組件),ScreenOrientation(屏幕切換),SecureStore歡迎大家關註我的微信公眾號,這篇文章是否被大家認可,我的衡量標準就是公眾號粉絲增長人數。歡迎大家轉載,但必須保留本人博客鏈接!

技術分享圖片

Expo大作戰(二十九)--expo sdk api之registerRootComponent(註冊跟組件),ScreenOrientation(屏幕切換),SecureStore,