加入行動裝置
我們的照片庫應用程式在 iOS、Android 和 Web 上執行之前,都不算完整 - 全部使用一個程式碼庫。只需要進行一些小的邏輯更改來支援行動平台,安裝一些原生工具,然後在裝置上執行該應用程式即可。開始吧!
讓我們從進行一些小的程式碼更改開始 - 然後當我們將其部署到裝置時,我們的應用程式將「正常運作」。
平台特定邏輯
首先,我們將更新照片儲存功能以支援行動裝置。在 savePicture
函式中,檢查應用程式正在哪個平台上執行。如果它是「混合」(Capacitor 或 Cordova,這兩個原生執行階段),則使用 readFile
方法將照片檔案讀取為 base64 格式。此外,使用 Filesystem API 返回照片的完整檔案路徑。設定 webviewPath
時,請使用特殊的 Capacitor.convertFileSrc
方法(此處有詳細資訊)。否則,請在 Web 上執行應用程式時使用與之前相同的邏輯。
const savePicture = async (photo: Photo, fileName: string): Promise<UserPhoto> => {
let base64Data: string | Blob;
// "hybrid" will detect Cordova or Capacitor;
if (isPlatform('hybrid')) {
const file = await Filesystem.readFile({
path: photo.path!,
});
base64Data = file.data;
} else {
base64Data = await base64FromPath(photo.webPath!);
}
const savedFile = await Filesystem.writeFile({
path: fileName,
data: base64Data,
directory: Directory.Data,
});
if (isPlatform('hybrid')) {
// Display the new image by rewriting the 'file://' path to HTTP
// Details: https://ionic.dev.org.tw/docs/building/webview#file-protocol
return {
filepath: savedFile.uri,
webviewPath: Capacitor.convertFileSrc(savedFile.uri),
};
} else {
// Use webPath to display the new image instead of base64 since it's
// already loaded into memory
return {
filepath: fileName,
webviewPath: photo.webPath,
};
}
};
接下來,在 loadSaved
函式中新增一小段邏輯。在行動裝置上,我們可以將每個照片檔案直接指向 Filesystem 並自動顯示它們。但是,在 Web 上,我們必須將每個影像從 Filesystem 讀取為 base64 格式。這是因為 Filesystem API 在底層使用了 IndexedDB。更新 useEffect
內的 loadSaved
函式至
const loadSaved = async () => {
const { value } = await Preferences.get({ key: PHOTO_STORAGE });
const photosInPreferences = (value ? JSON.parse(value) : []) as UserPhoto[];
// If running on the web...
if (!isPlatform('hybrid')) {
for (let photo of photosInPreferences) {
const file = await Filesystem.readFile({
path: photo.filepath,
directory: Directory.Data,
});
// Web platform only: Load the photo as base64 data
photo.webviewPath = `data:image/jpeg;base64,${file.data}`;
}
}
setPhotos(photosInPreferences);
};
我們的照片庫現在包含一個在 Web、Android 和 iOS 上運行的程式碼庫。接下來,是您一直在等待的部分 - 將應用程式部署到裝置。