Langkapi ke konten utama
Tutorial

Membangun Aplikasi Mobile dengan React.js dan Capacitor

Petunjuk Langkah demi Langkah untuk Mengubah Aplikasi Web React.js menjadi Aplikasi Mobile Nativ dengan Menggunakan Capacitor, serta Menambahkan Capgo Navigasi Nativ, Transisi, dan Praktik Terbaik Layout iOS.

Martin Donadieu

Martin Donadieu

Pengembang Konten

Membangun Aplikasi Mobile dengan React.js dan Capacitor

Tutorial ini akan mengajak Anda membuat aplikasi mobile menggunakan React dan Capacitor. Setelah itu, Anda akan tahu cara mengubah aplikasi web React.js menjadi aplikasi mobile natif dengan Capacitor, serta menambahkan sentuhan natif dengan Capgo Navigasi Nativ dan Transisi.

Capacitor memungkinkan Anda untuk dengan mudah mengubah aplikasi web React.js menjadi aplikasi mobile natif, tanpa perlu melakukan perubahan besar atau belajar strategi baru seperti React Native.

Prosesnya melibatkan beberapa langkah sederhana, dan sebelum Anda tahu, aplikasi React.js Anda akan menjadi aplikasi mobile yang berfungsi penuh. Jadi, tetaplah bersama kami untuk mengikuti perjalanan ini.

Capacitor Ringkasan

CapacitorJS adalah perubahan besar. Ia dapat menyatu dengan proyek web apa pun dan menggabungkan aplikasi Anda ke dalam tampilan web native sambil menghasilkan proyek Xcode dan Android Studio native. Selain itu, melalui plugin-nya, Anda dapat mengakses fitur perangkat native seperti kamera melalui jembatan JS.

Capacitor offers a straightforward way to create a native mobile application without any hassle or steep learning curve. Its simple API and streamlined functionality make it easy to incorporate into your project.

Pengaturan Aplikasi React.js

Let’s go for the simplest method to initiate a React application. We’ll use the npm package manager to create a new React app:

npx create-react-app my-app

Untuk mengubah proyek kami menjadi aplikasi mobile native, sebuah ekspor dari aplikasi kami diperlukan.

We’ll come back to this in a moment. First, let’s understand how to integrate Capacitor into our React app.

Integrating Capacitor into Your React.js App

Langkah awal pengaturan mungkin sedikit rinci, tetapi setelah itu, mengupdate wrapper aplikasi native menjadi se sederhana sebagai menjalankan sync perintah.

First, we’ll install the Capacitor CLI as a development dependency and set it up within our project. During the setup, accept the default values for name and bundle ID by pressing “enter.”

Selanjutnya, kita akan menginstal paket inti dan paket relevan untuk platform iOS dan Android.

Terakhir, kita akan menambahkan platform, dan Capacitor akan membuat folder untuk setiap platform di root projek kita:

# Install the Capacitor CLI locally
npm install -D @capacitor/cli

# Initialize Capacitor in your React project
npx cap init

# Install the required packages
npm install @capacitor/core @capacitor/ios @capacitor/android

# Add the native platforms
npx cap add ios
npx cap add android

Bagian iOS dan Android direktori sudah ada di projek React.js kita.

Untuk mengakses projek Android nanti, instal Android Studio. Untuk iOS, Anda memerlukan Mac dan harus menginstal Xcode.

Selanjutnya, perbarui directory web dalam aplikasi Anda capacitor.config.json seperti yang ditunjukkan di bawah:

{
  "appId": "com.example.app",
  "appName": "my-app",
  "webDir": "build",
  "bundledWebRuntime": false
}

Jalankan perintah build dan sinkronkan proyek Anda dengan Capacitor:

npm run build
npx cap sync

Perintah tersebut akan membangun proyek React.js Anda, sementara __CAPGO_KEEP_0__ akan mengatur web __CAPGO_KEEP_0__ di tempat-tempat yang tepat di platform native sehingga dapat dieksekusi dalam aplikasi. npm run build Sekarang, dengan sedikit keberuntungan dan tidak ada kesalahan, aplikasi React.js Anda seharusnya sudah siap untuk diluncurkan di perangkat! npx cap sync will align the web code in the accurate places of the native platforms so they can be executed in an app.

Membuat aplikasi iOS memerlukan

Xcode

membuat aplikasi Android memerlukan membuat aplikasi Windows memerlukanAplikasi seluler Android dan iOS memerlukan Studio AndroidJika Anda berencana untuk mendistribusikan aplikasi Anda di toko aplikasi, Anda harus mendaftar ke Apple Developer Program untuk iOS dan Google Play Console untuk Android.

Capacitor CLI memudahkan proses membuka proyek native berikut:

npx cap open ios
npx cap open android

Setelah proyek native Anda terkonfigurasi, mengdeploy aplikasi ke perangkat terhubung adalah proses yang sederhana.

Untuk Studio Android, tunggu sampai segalanya terisi dan kemudian deploy aplikasi ke perangkat terhubung.

Untuk Xcode, buat akun tanda tangan Anda untuk mengdeploy aplikasi ke perangkat nyata bukan hanya simulator. Setelah itu, cukup tekan tombol play untuk menjalankan aplikasi di perangkat terhubung, yang dapat Anda pilih di atas.

Jika semuanya berjalan lancar, Anda akan telah mengubah aplikasi web React.js Anda menjadi aplikasi mobile native!

Capacitor Live Reload

Framework pengembangan modern biasanya datang dengan hot reload, dan beruntungnya, Anda dapat memiliki hal yang sama dengan Capacitor tetapi di perangkat seluler!

Anda dapat membuat aplikasi yang dihosting secara lokal dapat diakses dengan live reload di jaringan Anda dengan memiliki aplikasi Capacitor memuat konten dari URL tertentu.

Terlebih dahulu, tentukan alamat IP lokal Anda. Pada Mac, Anda dapat melakukannya dengan menjalankan ipconfig getifaddr en0 di terminal. Pada Windows, jalankan ipconfig dan cari alamat IPv4.

After this, instruct Capacitor to load the app directly from the server by adding another parameter to your capacitor.config.ts untuk memuat aplikasi secara langsung dari server dengan menambahkan parameter lain ke file:

import { CapacitorConfig } from '@capacitor/cli';

const config: CapacitorConfig = {
  appId: 'com.example.app',
  appName: 'my-app',
  webDir: 'build',
  bundledWebRuntime: false,
  server: {
    url: 'http://192.168.x.xx:3000',
    cleartext: true
  }
};

export default config;

Pastikan untuk menggunakan IP dan port yang akurat. Jalankan npx cap copy untuk menerapkan perubahan-perubahan ini ke proyek native kita.

Setelah menginstal plugin baru, seperti kamera, Anda harus melakukan rebuild proyek native Anda. Hal ini karena file-file native telah berubah dan tidak dapat diperbarui secara langsung.

Menggunakan Plugin __CAPGO_KEEP_0__

Mari kita lihat cara menggunakan plugin Capacitor secara singkat. Mari kita instal plugin sederhana, yaitu

Let’s take a quick look at how to use a Capacitor plugin. Let’s install a simple one, the __CAPGO_KEEP_0__yang memicu dialog berbagi asli:

npm i @capacitor/share

To menggunakan itu, import paket dan panggil fungsi yang sesuai dari aplikasi kami. Pertimbangkan untuk share() Setelah menginstal plugin baru, jangan lupa untuk sinkronkan kembali proyek React Anda menggunakan Selanjutnya, Anda dapat membuat aplikasi terasa lebih asli di iOS dan Android dengan navigasi dan transisi :

import { Share } from '@capacitor/share';

function ShareButton() {
  const share = async () => {
    await Share.share({
      title: 'React App',
      text: 'Visit this React App',
      url: 'http://localhost:3000',
      dialogTitle: 'Share with...'
    });
  };

  return (
    <button onClick={share}>
      Share
    </button>
  );
}

export default ShareButton;

Antarmuka pengguna yang terasa asli dengan Navigasi dan Transisi Asli npx cap sync.

Next, you can make the app feel more native on iOS and Android with Capgo navigation and transitions, and fix common iOS layout issues that cause horizontal overflow or cropped safe areas.

Native-feeling UI with Capgo Native Navigation and Transitions

Untuk merasakan mobile native di aplikasi React + , gunakan plugin-plugin alih-alih kit UI web seperti Konsta UI: __CAPGO_KEEP_0__ __CAPGO_KEEP_1__ __CAPGO_KEEP_0__.

For a native mobile feel in a React + Capacitor app, use Capgo plugins instead of web-only UI kits like Konsta UI:

  • @capgo/capacitor-native-navigation — navigasi native, Liquid Glass tab bar di iOS, dan gaya tab bar yang diboroskan di Android. Router React Anda menjaga status jalur; plugin ini menguasai chrome native.
  • @capgo/capacitor-transitions — transisi halaman yang mirip dengan Ionic dan pengembalian ke belakang dengan gesekan samping di layer WebView, tanpa menerima UI Ionic.

Pasang kedua:

bun add @capgo/capacitor-native-navigation @capgo/capacitor-transitions
bunx cap sync

Konfigurasi navigasi native dengan mode CSS inset agar konten web menghormati bar-bar native:

import { NativeNavigation } from '@capgo/capacitor-native-navigation';

await NativeNavigation.configure({
  contentInsetMode: 'css',
  animationDuration: 360,
  glass: {
    effect: 'liquidGlass',
  },
});

Tampilkan tab bar Liquid Glass (iOS menggunakan rendering yang dimiliki sistem; Android menggunakan latar belakang WebView yang diboroskan):

await NativeNavigation.setTabbar({
  selectedId: 'home',
  labelVisibilityMode: 'labeled',
  icons: true,
  colors: { dynamic: true },
  tabs: [
    { id: 'home', title: 'Home', icon: { svg: '...' } },
    { id: 'settings', title: 'Settings', icon: { svg: '...' } },
  ],
});

await NativeNavigation.addListener('tabSelect', ({ id }) => {
  navigate(`/${id}`);
});

Tambahkan transisi halaman native di shell aplikasi Anda:

import { useEffect, useRef } from 'react';
import { useNavigate } from 'react-router-dom';
import '@capgo/capacitor-transitions';
import { initTransitions, setDirection, setupRouterOutlet } from '@capgo/capacitor-transitions/react';

initTransitions({ platform: 'auto' });

export function AppShell() {
  const navigate = useNavigate();
  const outletRef = useRef<HTMLElement>(null);

  useEffect(() => {
    if (outletRef.current) {
      setupRouterOutlet(outletRef.current, { platform: 'auto', swipeGesture: 'auto' });
    }
  }, []);

  const openSettings = () => {
    setDirection('forward');
    navigate('/settings');
  };

  return <cap-router-outlet ref={outletRef}>{/* routes */}</cap-router-outlet>;
}

Bungkus halaman yang dilalui dengan cap-router-outlet, cap-pagedan cap-contentdan panggil setDirection('forward') atau setDirection('back') sebelum berpindah. Jangan duplikat header atau footer web ketika navigasi asli menguasai permukaan tersebut.

Lihat panduan lengkap: Menggunakan @capgo/capacitor-navigasi-asli dan Menggunakan @capgo/capacitor-transisi.

Area yang aman dengan Tailwind

Untuk area yang aman perangkat di Tailwind CSS, gunakan @capgo/tailwind-capacitor (diterbitkan sebagai) tailwind-capacitor di npm. Ini menyediakan safe-areas utilitas dan plugin Tailwind lainnya yang Capacitor-ramah:

bun add -D tailwind-capacitor

Dalam src/index.css:

@import 'tailwindcss';
@plugin "@capgo/tailwind-capacitor/platform";
@plugin "@capgo/tailwind-capacitor/safe-areas";

Gunakan utilitas seperti pt-safe, pb-safe, dan px-safe daripada menambahkannya secara manual. Projek ini aktif dikembangkan — jika ada yang hilang untuk pengaturan React Anda, env(safe-area-inset-*) buka PR di __CAPGO_KEEP_0__ open a PR on GitHub.

Jika konten terlihat dipotong, bergeser, atau dapat di-scroll secara horizontal di iOS, menambahkan lebih banyak

atau mengatur tag viewport saja biasanya tidak dapat memperbaikinya. Lakukan periksaan-periksaan ini secara berurutan. overflow-x: hidden Pastikan tag meta viewport diterapkan dengan benar

Tambahkan tag meta viewport di

di dalam index.html Pengaturan Area Aman iOS dari satu wrapper root saja <head>:

<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />

Pengaturan Layout iOS dari satu wrapper root saja

Membuat sebuah shell aplikasi tunggal dan menerapkan padding area aman di sana — bukan di komponen yang terikat beberapa kali:

html,
body,
#root {
  width: 100%;
  min-height: 100%;
  margin: 0;
  padding: 0;
  overflow-x: hidden;
}

* {
  box-sizing: border-box;
}

.app-shell {
  min-height: 100dvh;
  width: 100%;
  padding-top: env(safe-area-inset-top);
  padding-right: env(safe-area-inset-right);
  padding-bottom: env(safe-area-inset-bottom);
  padding-left: env(safe-area-inset-left);
}

Mengapit semua konten halaman di dalam .app-shell. Mengulangi padding area aman di header, modal, dan pengemasan layout sering membuat UI terlihat dipotong atau terlalu besar.

Dengan @capgo/tailwind-capacitor, Anda dapat mengekspresikan padding yang sama dengan utilitas seperti pt-safe pb-safe px-safe pada shell tunggal tersebut.

Setel Capacitor iOS contentInset ke never context":"Page/area: Halaman produk update hidup. Peran: Label UI singkat atau item navigasi. Kunci pesan `live_update_dynamic_label_to` (Live Update Dynamic Label To)."

pertama capacitor.config.tsDalam contentInsetMode: 'css'Menguasai area yang aman:

const config: CapacitorConfig = {
  appId: 'com.example.myapp',
  appName: 'my-app',
  webDir: 'build',
  ios: {
    contentInset: 'never',
  },
};

Menggabungkan Capacitor’s automatic content inset dengan CSS env(safe-area-inset-*) Menggunakan padding CSS adalah penyebab umum dari jarak ganda.

Temukan elemen yang sebenarnya mengalami overflows

Biasanya, penyebabnya adalah elemen yang menggunakan 100vw, Tailwind w-screen, lebar piksel yang tetap, atau kontainer yang sangat lebar min-width.

Di Safari Web Inspector, jalankan:

[...document.querySelectorAll('*')]
  .filter(el => el.scrollWidth > document.documentElement.clientWidth)
  .map(el => ({
    el,
    tag: el.tagName,
    class: el.className,
    scrollWidth: el.scrollWidth,
    clientWidth: document.documentElement.clientWidth,
  }));

Dengan Tailwind, ganti w-screen dengan w-full ketika memungkinkan. Banyak masalah overflows horizontal berasal dari 100vw / w-screen, padding safe-area yang digandakan, atau kontainer dengan lebar tetap — bukan dari tag meta viewport itu sendiri.

Kesimpulan

Capacitor menyediakan cara yang mudah untuk membangun aplikasi native berdasarkan proyek web yang sudah ada, memberikan cara sederhana untuk berbagi code dan memiliki UI yang konsisten.

Terima kasih kepada teknologi seperti Capacitor, membangun aplikasi mobile dari aplikasi web React.js telah menjadi lebih mudah. Tingkatkan kemampuan pengembangan web Anda dengan menciptakan aplikasi mobile native yang impresif. Selamat berkode!

Untuk informasi lebih lanjut tentang bagaimana Anda dapat mempercepat proses pengembangan aplikasi Anda, Daftar diri gratis hari ini, Teruskan dari Membangun Aplikasi Mobile dengan React.js dan __CAPGO_KEEP_0__

Keep going from Building Mobile Apps with Pure React.js and Capacitor

Membangun Aplikasi Mobile dengan React.js dan __CAPGO_KEEP_0__ Building Mobile Apps with Pure React.js and Capacitor Gunakan @__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-live-activities untuk kemampuan native di Gunakan @capgo/capacitor-live-activities, for the native capability in Using @capgo/capacitor-live-activities, aktivitas-nyata-capgo/capacitor untuk detail implementasi di aktivitas-nyata-capgo/capacitor Menggunakan aktivitas-nyata-capgo/capacitor-video-player untuk kemampuan asli di Menggunakan aktivitas-nyata-capgo/capacitor-video-player aktivitas-nyata-capgo/capacitor-video-player untuk detail implementasi di aktivitas-nyata-capgo/capacitor-video-player, dan Menggunakan aktivitas-nyata-capgo/capacitor-native-navigation untuk kemampuan asli di Menggunakan aktivitas-nyata-capgo/capacitor-native-navigation.

Update Langsung untuk Aplikasi Capacitor

Ketika bug layer web masih aktif, kirimkan perbaikan melalui Capgo daripada menunggu hari-hari untuk persetujuan toko aplikasi. Pengguna mendapatkan update di latar belakang sementara perubahan native tetap dalam jalur review normal.

Dukungan Manusia dari Martin

Mulai Sekarang

Terbaru dari Blog Kami

Capgo memberikan Anda wawasan terbaik yang Anda butuhkan untuk membuat aplikasi mobile yang benar-benar profesional.