Sunday, September 30, 2018

Cara Mudah Install React Native di Ubuntu | AMTech


Hallo Penggemar Koding Indonesia. Berjumpa kembali ditutorial membuat aplikasi android menggunakan React Native. Pada tutorial kali ini kita akan membahas tenatang Cara Mudah Install React Native di Ubuntu?. Ok, langsung saja kita mulai.

Persiapan Instalasi React Native

Berikut beberapa tahapan persiapan sebelum Install React Native di Ubuntu. Karena saya menggunakan linux ubuntu, maka pada tutorial kali ini saya akan lebih prefer pada sistem operasi yang saya gunakan, namun sebisa mungkin akan memberikan gambaran dan referensi pada sistem operasi lainnya.

Install Node JS

Sebagaimana yang tertera pada official site : https://facebook.github.io/react-native/docs/getting-started.html kita diminta untuk menginstall nodejs terlebih dahulu. Jika anda menggunakan debian/ubuntu maka jalankan command berikut :

curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs
 
atau anda bisa merujuk pada dokumentasi nodejs untuk sistem operasi lainnya : https://nodejs.org/en/download/package-manager

Install React Native CLI

Setelah nodejs berhasil diinstall, selanjutnya kita diminta untuk menginstall react native cli. Jalankan command berikut dan tunggu hingga selesai :

npm install -g react-native-cli
 
Install Android Studio & JDK
Dalam tahap development dan testing nntinya maka kita membutuhkan emulator android studio, sedangkan android studio membutuhkan JDK. Android studio sendiri membutuhkan java se development kit versi 8, silahkan download http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html sesuai sistem operasi yang kamu gunakan.
Selanjutnya adalah instalasi Android studio, silahkan download terlebih dahulu pada link berikut : https://developer.android.com/studio/index.html . Pilih “Custom” setup pada bagian installation type, dan pastikan beberapa item dibawah ini tercentang :
  • Android SDK
  • Android SDK Platform
  • Android Virtual Device
Kemudian klik next untuk menginstall semua komponen yang dibutuhkan.
Secara default, Android studio sudah terinstall android SDK versi terakhir. Akan tetapi dalam membuat app React Native dengan native code, memerlukan Android 6.0 (Marshmallow) SDK. Dan kabar baiknya SDK Android lainnya dapat di install menggunakan SDK Manager pada Android Studio.
Dari jendela “Welcome to android studio”, klik “Configure”, kemudian pilih “SDK Manager”. Kemudian pilih tab “SDK Platforms”, lalu centang “Show Package Details” disebelah pojok kanan bawah. Perhatikan item component Android 6.0 (Marshmallow) yang telah expand, dan pastikan beberapa item dibawah ini telah dicentang :
  • Google APIs
  • Android SDK Platform 23
  • Intel x86 Atom_64 System Image
  • Google APIs Intel x86 Atom_64 System Image
Kemudian pilih tab “SDK Tools dan centang kotak “Show Package Details”, Pada “Android SDK Build-Tools”, pastikan 23.0.1 sudah tercentang.
Selanjutnya, klik Apply untuk mendownload dan menginstal Android SDK dan tools yang terkait.

Konfigurasi ANDROID_HOME environment variable

React Native tools membutuhkan environment variables untuk disetting agar dapat digunakan membuat apps dengan native code. Namun ada perbedaan dalam konfigurasi ANDROID_HOME tergantung sistem operasi yang anda gunakan. Untuk linux sendiri silahkan edit .bash_profile pada directory home. Kemudian tambahkan code berikut dan pastikan path tersebut sudah sesuai dengan path android sdk :

export ANDROID_HOME=$HOME/Android/Sdk
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/platform-tools
 
Sedangkan untuk anda pengguna windows, masuk ke Control panel → System and Security → System → Change settings → Advanced System Settings → Environment variables → New, kemudian masukkan path Android Studio SDK.

Install Watchman (Optional)

Watchman adalah sebuah tool untuk melihat perubahan filesystem yang dibuat oleh Facebook. Sangat disarankan untuk menginstallnya untuk performance yang lebih baik, tapi juga dapat dilewatkan (skip). Untuk proses instalasinya dapat mengikut panduan berikut : https://facebook.github.io/watchman/docs/install.html#build-install

Membuat React Native Project

Tiba saatnya setelah proses persiapan yang panjang untuk melakukan instalasi react native dengan menggunakan command line, ketikkan perintah berikut :

react-native init NamaProject
 
tunggu hingga proses instalasi selesai, dan lama prosesnya tergantung koneksi internet kamu. Jika sudah silahkan masuk ke directory project anda menggunakan command line :

cd NamaProject
react-native run-android
 
tunggu hingga proses selesai dan Emulator android yang telah dijalankan akan tampak seperti ini
Proses instalasi dan konfigurasi react native telah selesai.


sumber:
https://daengweb.id/belajar-react-native-instalasi-dan-konfigurasi
Share:

Tuesday, September 25, 2018

React Native Tutorial : Fitur Authentication | AMTech

Apa jadinya apabila informasi yang bersifat pribadi dapat diakses secara publik yang bukan merupakan pemilik informasi tersebut? Maka dalam kondisi seperti ini, fitur authentication akan sangat dibutuhkan untuk menangani masalah permission untuk user yang akan menggunakan aplikasi kita. Melanjutkan case sebelumnya, Membuat Aplikasi Chatting.

Tahap Persiapan

Sebelum kita membuat fitur authentication menggunakan React Native, maka langkah pertama yang harus dilakukan adalah mengaktifkan service authentication di Firebase. Masih menggunakan project Firebase sebelumnya, lakukan beberapa hal berikut:
  1. Pada menu di sisi kiri, pilih Authentication

  2. Kemudian pilih tab SIGN-IN METHOD

  3. Kemudian Enable pada bagian Email/Password

Setelah kebutuhan terakait service Firebase telah diaktifkan, maka tiba saatnya untuk berinteraksi dengan React Native. Authentication, selalu berkaitan dengan Login & Sing Up, dua hal yang saling terkait satu sama lainnya. Maka pada kesempatan kali ini kita akan membuat keduanya agar dapat digunakan sebagaimana mestinya.

Login & Sign Up Screen

Sebelum beranjak pada topik sub heading diatas, kita akan mengatur route terlebih dahulu yang akan bertindak sebagai navigasi dalam aplikasi yang akan kita bangun. Oleh karena itu, buka file src/config/routes.js kemudian modifikasi menjadi seperti berikut:
import React from 'react';
import Login from '../screens/Login';
import Signup from '../screens/Signup';
import Home from '../screens/Home';
import ChatScreen from '../screens/ChatScreen';
​
const routes = {
    login: { screen: Login },
    signup: { screen: Signup },
    home: { screen: Home },
    chat: { screen: ChatScreen }
}
​
export default routes;
Cara kerja dari code diatas masih sama, yakni mengatur navigasi untuk berpindah antar screen. Perlu diperhatikan, kita meng-import dua screen tambahan (baca: Login dan Singup), maka buat file tersebut satu persatu. Pertama, buat file Login.js di dalam folder screens kemudian ketikkan code berikut:
import React from 'react'; 
import { login } from '../services/api';
import { View, StyleSheet, Image, ScrollView, TextInput, Button, Text, TouchableOpacity } from 'react-native';
import SplashScreen from '../components/SplashScreen';
import { NavigationActions } from 'react-navigation';
​
export default class Login extends React.Component {

 
    render() {
        return(
            <View style={styles.container}>
                <Image
                    style={[ styles.logo ]}
                    source={require('../assets/img/whatsapplogo.png')} />
                <ScrollView style={styles.container}>
                    <TextInput
                        ref={(textInput) => this._user = textInput }
                        style={styles.inputField}
                        value={this.state.text}
                        onChangeText={(user) => this.setState({user})}
                        onSubmitEditing={(event) => this._password.focus()}
                        onFocus={ () => this.clearValidationErrors() }
                        editable={true}
                        maxLength={40}
                        multiline={false}
                        placeholder="Masukkan Email"
                    />
                    <TextInput
                        ref={(textInput) => this._password = textInput }
                        style={styles.inputField}
                        value={this.state.text}
                        onChangeText={(password) => this.setState({password})}
                        onSubmitEditing={(event) => this.submit()}
                        editable={true}
                        secureTextEntry={true}
                        maxLength={40}
                        multiline={false}
                        placeholder="Masukkan Password"
                    />
                    { this.state.error &&
                        <View style={styles.validationErrors}>
                            <Text style={styles.error}>{this.state.error}
                            </Text>
                        </View>
                    }
                    <View style={styles.buttonStyle}>
                    { this.state.loading ? 
                    <SplashScreen /> :
                    <Button
                        onPress={() => this.submit()} 
                        title="Masuk" />
                    }
                    </View>
                    <View style={styles.redirectLink}>
                        <Text>Tidak punya akun? </Text>
                        <TouchableOpacity onPress={() =>
                        this.props.navigation.navigate('signup')}>
                        <Text style={styles.link}>Daftar</Text>
                        </TouchableOpacity>
                    </View>
                    <View style={styles.copyright}>
                    <Text style={{fontSize: 18, color: '#19B5FE'}}>https://daengweb.id</Text>
                    </View>
                </ScrollView>
            </View>
        );
    }
}
​
const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: 'white'
  },
  logo: {
    width: '100%',
    height: 200
  },
  inputField: {
    marginTop: 20,
    alignSelf: 'center',
    height: 55,
    width: '80%',
    backgroundColor: '#FAFAFA',
    borderWidth: 1,
    paddingHorizontal: 10,
    borderRadius: 10,
    borderColor: "#CACACA"
  },
  redirectLink: {
    marginTop: 20,
    flex: 1,
    flexDirection: 'row',
    alignSelf: 'center'
  },
  link: {
    color: 'blue'
  },
  validationErrors: {
    flexDirection: 'row',
    justifyContent: 'center',
  },
  error: {
    marginTop: 10,
    textAlign: 'center',
    color: 'red'
  },
  buttonStyle: {
    marginTop: 15,
    flex: 1
  },
  copyright: {
    marginTop: 15,
    flex: 1,
    alignSelf: 'center'
  }
})
Penjelasan: Pada layer pertama akan me-load gambar menggunakan Image component dari directory src/assets/img/whatsapplogo.png yang dapat kamu download di Github. Pada layer kedua, kita memiliki dua buah TextInput component yang diapit oleh ScrollView component agar pada device yang tidak dapat me-load component secara penuh dapat di-scroll. Adapun properti yang mengikuti TextInput masih sama seperti sebelumnya, yang membedakan hanya pada bagian TextInput untuk password terdapat prop secureTextEntry yang berfungsi untuk mengatur apakah text pada input field akan ditampilkan atau tidak.
Pada layer selanjutnya yang terletak dibawah input field, terdapat bagian yang akan menampilkan errors yang diperoleh dari Firebase:
{ this.state.error &&
    <View style={styles.validationErrors}>
        <Text style={styles.error}>{this.state.error}
        </Text>
    </View>
}
Kita juga memiliki sebuah Buttonyang menggunkan event onpress, dimana ketika tombol tersebut ditekan maka akan memicu submit function. Sedangkan untuk function submit akan kita tambahkan nanti sebab memiliki penjelasan tersendiri agar tidak kebingungan. Kemudian di layer terakhir, kita memiliki memiliki tombol untuk berpindah ke Sign Up screen.
Masih di dalam file Login.js, tambahkan code berikut yang merupakan function submit:
async submit(){
  try {
     const response = await login(this.state.user, this.state.password);
     if (response) {
      this.setState({loading: true})
      setTimeout(() => {
        this.clearAndNavigate('home')
      }, 1000);
     }
  } catch ({ message }) {
     this.setState({
       error: message
     })
  }
}
Penjelasan: Kita menggunakan method login yang didapatkan dari service/api.js dengan mengirimkan parameter state user dan password. Apabila response bernilai true, maka state loading akan diset ke true, kemudian dalam waktu satu menit kedepan akan mengirimkan parameter home ke clearAndNavigate function. Apabila authentication gagal, maka state error akan diset dengan value message (baca: message ini berisi pesan error yang didapatkan dari Firebase).
Buat function berikutnya yang bernama clearAndNavigate:
clearAndNavigate(screen) {
    this.setState({
        user: '',
        password: ''
    })
    Keyboard.dismiss();
    this.isAuthenticated = true;
    this.props.navigation.dispatch(
        NavigationActions.reset({
            index: 0,
            actions: [
                NavigationActions.navigate({ routeName: 'home' })
            ]
        })
    );
}
Penjelasan: Function ini berfungsi untuk membersihkan state username dan password menggunakan setState. Kemudian, kita menutup keyboard dan menentukan nilai dari state isAuthenticated menjadi true, kemudian kita me-replace navigation screen dengan home screen. Kondisi yang diharapkan adalah dimana user tidak diizinkan untuk kembali ke Login atau SignUp screen, jadi kita menggunakan teknik dispatch navigation actions untuk mengimplementasikannya.
Ada yang ketinggalan, pada TextInput username, kita mengatur prop onFocus dengan memanggil method clearValidationErrors, maka tambahkan function berikut yang berfungsi untuk menghapus error:
clearValidationErrors(){
  this.setState({
     error: false
  })
}
Karena kita membutuhkan beberapa state, diantaranya: username, password, error, isAuthenticated, loading. Maka kita tetapkan nilai defaultnya terlebih dahulu, tambahkan code berikut:
state = {
  user: '',
  password: '',
  error: false,
  isAuthenticated: false,
  loading: false
}
Pada screen ini, kita tidak membutuhkan sebuah header, maka navigationOptions akan diset null:
static navigationOptions = {
  header: null
}

Authentication Logic

Izinkan saya untuk beranjak ke tahap authentication logic terlebih dahulu, sedangkan untuk SignUp screen kita skip dulu dan akan dilanjutkan kemudian. Jika kita perhatikan, pada Login.js terdapat code untuk meng-import SplashScreen, maka buat file SplashScreen.js di dalam folder src/components kemudian masukkan code berikut:
import React from 'react';
import { View, ActivityIndicator } from 'react-native';
​
export default function SplashScreen(){
  return (
    <View style={{ flex: 1, justifyContent: 'center'}}>
      <ActivityIndicator
        animating={true}
        style={[styles.centering, {height: 80}]}
        size="large"
      />
    </View>
  )
}
​
const styles = {
  centering: {
    alignItems: 'center',
    justifyContent: 'center',
    padding: 8
  }
}
Tak ada yang perlu dijelaskan dari code di atas, karena hanya sebuah component biasa yang di dalamnya terdapat ActivityIndicator yang akan memicu efek loading. Langkah berikutnya adalah dengan membuat service API, buka file api.js yang terdapat di dalam folder src/services, kemudian modifikasi menjadi seperti ini:
import { setListener, pushData, initialize, signup, login } from './firebase';
export const initApi = () => initialize();
​
export const getMessages = (updaterFn) => setListener('messages', updaterFn);
export const postMessage = (message) => {
    if (Boolean(message)) {
        pushData('messages', {
            incoming: false,
            message
        })
    }
}
​
export {
    login,
    signup
}
Pada file firebase.js, tambahkan function login dan signup berikut:
export const login = (email, pass) =>
    firebase.auth()
    .signInWithEmailAndPassword(email, pass)
​
export const signup = (email, pass) =>
    firebase.auth().createUserWithEmailAndPassword(email, pass);
Penjelasan: Masing-masing dari function diatas menerima value email dan password, dimana akan dikirimkan ke Firebase untuk melakukan otentikasi baik berupa login maupun signup.
Sampai pada tahap ini fitur login telah selesai dan siap digunakan, adapun tampilannya tampak seperti dibawah ini

Karena kita belum memiliki user, maka buat file Signup.js di dalam folder src/screens, kemudian masukkan code berikut:
import React from 'react';
import { signup } from '../services/api';
import { View, StyleSheet, Image, ScrollView, TextInput, Button, Text, Keyboard, TouchableOpacity } from 'react-native';
import { NavigationActions } from 'react-navigation';
​
export default class Login extends React.Component {
    static navigationOptions = {
        header: null
    }
​
    state = {
        user: '',
        password: '',
        isAuthenticated: false
    }
​
    async submit() {
        try {
            const response = await signup(this.state.user, this.state.password)
            this._user.clear();
            this._password.clear();
            Keyboard.dismiss();
            this.isAuthenticated = true;
            this.props.navigation.dispatch(
                NavigationActions.reset({
                    index: 0,
                    actions: [
                        NavigationActions.navigate({ routeName: 'home' })
                    ]
                })
            );
        } catch ({ message }) {
            this.setState({
                error: message
            })
        }
    }
    render() {
        return (
            <View
                style={styles.container}>
                <Image
                    style={[ styles.logo ]}
                    source={require('../assets/img/whatsapplogo.png')} />
                <ScrollView style={styles.container}>
                    <TextInput
                        ref={(textInput) =>this._user = textInput }
                        style={styles.inputField}
                        value={this.state.text}
                        onChangeText={(user) => this.setState({user})}
                        onSubmitEditing={(event) => this._password.focus()}
                        editable={true}
                        maxLength={40}
                        multiline={false}
                        placeholder="Masukkan Email"
                    />
                    <TextInput
                        ref={(textInput) =>this._password = textInput }
                        style={styles.inputField}
                        value={this.state.text}
                        onChangeText={(password) => this.setState({password})}
                        onSubmitEditing={(event) => this.submit()}
                        editable={true}
                        secureTextEntry={true}
                        maxLength={40}
                        multiline={false}
                        placeholder="Masukkan Password"
                    />
                    { this.state.error &&
                        <View style={styles.validationErrors}>
                            <Text style={styles.error}>{this.state.error}</Text>
                        </View>
                    }
                    <View style={styles.buttonStyle}>
                        <Button
                            onPress={() => this.submit()} 
                            title="Daftar" />
                    </View>
                    <View style={styles.redirectLink}>
                        <Text>Sudah punya akun? </Text>
                        <TouchableOpacity onPress={() =>
                        this.props.navigation.navigate('login')}>
                        <Text style={styles.link}>Masuk</Text>
                        </TouchableOpacity>
                    </View>
                    <View style={styles.copyright}>
                        <Text style={{fontSize: 18, color: '#19B5FE'}}>https://daengweb.id</Text>
                    </View>
                </ScrollView>
            </View>
        );
    }
}
​
const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: 'white'
  },
  logo: {
    width: '100%',
    height: 200
  },
  inputField: {
    marginTop: 20,
    alignSelf: 'center',
    height: 55,
    width: '80%',
    backgroundColor: '#FAFAFA',
    borderWidth: 1,
    paddingHorizontal: 10,
    borderRadius: 10,
    borderColor: "#CACACA"
  },
  redirectLink: {
    flex: 1,
    flexDirection: 'row',
    alignSelf: 'center'
  },
  link: {
    color: 'blue'
  },
  validationErrors: {
    flexDirection: 'row',
    justifyContent: 'center',
  },
  error: {
    marginTop: 10,
    textAlign: 'center',
    color: 'red'
  },
  buttonStyle: {
    marginTop: 15,
    flex: 1
  },
  copyright: {
    marginTop: 15,
    flex: 1,
    alignSelf: 'center'
  }
})
Tak ada yang perlu dijelaskan dari code diatas, karena hampir mirip dengan Login.js. Adapun tampilannya tampak seperti ini:


sumber:
https://daengweb.id/fitur-authentication-react-native
Share:

React Native Tutorial : Membuat Aplikasi Chatting | AMTech

Tahap Persiapan

Hallo Penggemar Koding Indonesia. Berjumpa kembali ditutorial membuat aplikasi android menggunakan React Native. Pada tutorial kali ini kita akan membuat aplikasi android menggunakan React Native Expo yaitu Membuat Aplikasi Chat.
Sebelum kita bergelut dengan React Native, tahap awal yang akan kita lakukan terlebih dahulu adalah mempersiapkan service Firebase.
  1. Buat akun Firebase menggunakan akun Google kamu : https://firebase.google.com
  2. Setelah itu kamu dapat meng-klik GET STARTED atau GO TO CONSOLE, dan kamu akan diarahkan ke dalam Firebase console, dimana kamu dapat membuat konfigurasi Firebase.

  3. Klik Add Project untuk membuat service baru yang akan digunakan nantinya, kemudian masukkan informasi yang diminta pada form yang disediakan (Baca: isi project name dan Country or Region)
  4. Setelah itu kamu akan diarahkan kedalam console dashboard yang tampak seperti berikut:

Pada dashboard di atas terdapat banyak sekali opsi yang dapat digunakan sebagaimana yang telah disinggung sebelumnya. Kamu dapat mengecek setiap opsi yang terdapat di-dashboard tersebut dan membaca tentangnya. Namun pada artikel kali ini, kita tidak akan membahas secara keseluruhan karena kita hanya akan berfokus pada opsi yang akan menunjang pembelajaran kita dengan case membuat aplikasi chatting.

Membuat Real-time Database

Dalam artikel sebelumnya yang membahas tentang React Native Navigation, kita telah membuat sebuah screen untuk chatting dan kemudian kita akan melanjutkannya dengan menggunakan Firebase real-time database agar chat yang akan ditampilkan bersifat dinamis. Namun, sebelum kita berinteraksi dengan source code React Native, masih terdapat tahapan yang harus diselesaikan terlebih dahulu, yakni membuat database.
Pada menu yang terdapat didalam console Firebase, pilih Database dan kemudian akan menampilkan halaman Realtime Database dengan database yang masih kosong. Karena Firebase real-time database menyimpan data kedalam JSON format, maka untuk mempermudah memasukkan data dummy berikut struktur yang akan digunakan, kita akan menggunakan file json. Buat data.json kemudian masukkan baris berikut:
{
  "messages" : [ {
    "incoming" : true,
    "message" : "Halo Nuge"
  }, {
    "incoming" : false,
    "message" : "Halo Juga"
  }, {
    "incoming" : true,
    "message" : "Ngumpul yuk, udah lama nih nggak bareng"
  }, {
    "incoming" : false,
    "message" : "Males ah, karena ngumpul itu hanya sebuah mitos yang akan angker pada waktunya"
  } ]
}
Masih dalam halaman Real Time Database, klik icon titik tiga pada sudut kanan kemudian klik Import JSON lalu pilih file JSON yang telah dibuat.

Setelah proses Import selesai, maka halaman database dalam console Firebase akan tampak seperti berikut ini:

Karena kita belum memasuki pembelajaran tentang authentication, maka RULES akan kita set agar dapat diakses secara public tanpa melalui proses otentikasi dan untuk melakukannya, pilih tab RULES kemudian masukkan code berikut:
{
  "rules": {
    ".read": "true",
    ".write": "true"
  }
}

Kolaborasi React Native & Firebase

Tahap persiapan dan segala hal yang dibutuhkan untuk dikonfigurasi didalam Firebase telah selesai, maka tahap selanjutnya adalah membuat konfigurasi agar dapat menggunakan Firebase dengan React Native:
  1. Kembali ke Dashboard dengan meng-klik tombol Overview dan pilih Add Firebase to Your Web App

  2. Setelah itu kamu akan mendapatkan code konfigurasi dari Firebase. Di dalam folder src, buat folder services yang didalam terdapat file firebase.js (path lengkapnya: src/services/firebase.js), kemudian masukkan code berikut:
    import * as firebase from "firebase";
    ​
    export const initialize = () => firebase.initializeApp({
        apiKey: "AIzaSyAsq5_Bz7k0NvHwgkujU5rsFdltIiKx42s",
        authDomain: "dwauth-a7b5e.firebaseapp.com",
        databaseURL: "https://dwauth-a7b5e.firebaseio.com",
        projectId: "dwauth-a7b5e",
        storageBucket: "dwauth-a7b5e.appspot.com",
        messagingSenderId: "913864115277"
    });
    Note: ganti code konfigurasi diatas (baca: mulai dari apiKey sampai messagingSenderId) dengan code konfigurasi yang kamu dapatkan dari Firebase console.
  3. Karena kita meng-import module firebase, maka install module tersebut dengan command:
    npm install firebase --save
  4. Masih didalam folder services, buat file api.js kemudian masukkan code berikut yang berfungsi untuk meng-export function initialize dari Firebase dengan nama initApi.
    import { initialize } from './firebase';
    export const initApi = () => initialize();
  5. Kemudian buka file App.js pada root directory kemudian lakukan perubahan pada file tersebut menjadi seperti ini:
    import React from 'react';
    import { StackNavigator } from 'react-navigation';
    import routes from './src/config/routes';
    import { initApi } from './src/services/api';
    ​
    const AppNavigator = StackNavigator(routes);
    ​
    export default class extends React.Component {
      componentWillMount(){
        initApi();
      }
    ​
      render() {
        return (
          <AppNavigator />
        );
      }
    }
    Penjelasan: Karena function initialize telah di-export dengan nama initApi maka pada code diatas kita meng-import initApi dari src/service/api.js kemudian me-load-nya kedalam componentWillMount lifecycle hook yang akan dijalankan sebelum component di-load.
Karena aplikasi chatting bersifat real-time, maka kita perlu membuat sebuah fitur yang berfungsi untuk meng-update state setiap kali terjadi perubahan database.
  1. Buka file firebase.js kemudian tambahkan code berikut:
    export const setListener = (endpoint, updaterFn) => {
        firebase.database().ref(endpoint).on('value', updaterFn);
        return () => firebase.database().ref(endpoint).off();
    }
    Penjelasan: Function diatas akan melakukan dua hal, pertama, setelah mem-passing endpoint dan updaterFn sebagai argumen, kita akan mengakses data kedalam database menggunakan firebase.database().ref(endpoint). Kemudian dengan firebase.database().ref(endpoint).off() yang digunakan untuk menghapus attached listener.
  2. Buka file api.js, kemudian kita akan membuat function getMessages dan menggunakan setListener yang telah dibuat sebelumnya:
    export const getMessages = (updaterFn) => setListener('messages', updaterFn);
    Note: Jangan lupa untuk memperbaharui bagian import dari Firebase mejadi:
    import { setListener, initialize } from './firebase';
  3. Kemudian import function getMessages dari src/services/api ke dalam src/screens/ChatScreen.js:
    import { getMessages } from '../services/api';
    Masih di dalam ChatScreen.js, tambahkan code berikut:
    componentDidMount() {
        this.unsubscribeGetMessages = getMessages((snapshot) => {
            this.setState({
                messages: Object.values(snapshot.val())
            })
        })
    }
    componentWillUnmount() {
        this.unsubscribeGetMessages();
    }
    Penjelasan: Kita menggunakan Object.values dalam Firebase snapshot.val() karena FlatList menggunakan array dan Firebase menghasilkan object. Ketika getMessages dipanggil maka setListener akan me-return sebuah function untuk menghapus listener menggunakan firebase.database().ref(endpoint).off(). Kemudian kita dapat menyimpan hasil dari getMessages ke dalam this.unsubscribeGetMessages yang kemudian dapat digunakan kembali ke dalam componentWillUnmount lifecycle hook yang akan dijalankan kembali sebelum component unmounted dan destroyed.
  4. Masih bekerja menggunakan file ChatScreen.js, pada render method ubah menjadi seperti:
    render() {
         return (
             <ImageBackground
        style={[ styles.container, styles.backgroundImage ]}
        source={require('../assets/img/background.png')}>
        <FlatList
            style={styles.container}
            data={this.state.messages}
            renderItem={Message}
            keyExtractor={(item, index) => (`message-${index}`)}
        />
        <Compose submit={postMessage} />
    </ImageBackground>
         )
     }
    Penjelasan:
    Karena kita memanggil component ImageBackground & FlatList maka import terlebih dahulu:
    import { ImageBackground, StyleSheet, FlatList } from 'react-native';
    Adapun style yang digunakan dari kedua component diatas harus didefinisikan juga, maka tambahkan code berikut:
    const styles = StyleSheet.create({
        container: {
            flex: 1,
            backgroundColor: 'transparent'
        },
        listItem: {
            width: '70%',
            margin: 10,
            padding: 10,
            backgroundColor: 'white',
            borderColor: '#979797',
            borderStyle: 'solid',
            borderWidth: 1,
            borderRadius: 10
        },
        incomingMessage: {
            alignSelf: 'flex-end',
            backgroundColor: '#E1FFC7'
        } 
    })
    Pada component ImageBackground kita menggunakan props source yang akan me-load gambar, maka gambarnya dapat kamu download disini : github. Component FlatList, pada props data menggunakan state messages: this.state.messages, maka tambahkan code berikut diluar render method:
    state = {
        messages: []
    }
    Sedangkan props renderItem mengakses component Message, maka pada folder src buat folder components yang didalamnya terdapat file Message.js, lalu masukkan code berikut:
    import React from 'react';
    import { View, StyleSheet, Text } from 'react-native'const Message = ({ item }) => (
      <View style={[
          styles.message, item.incoming &&
          styles.incomingMessage
        ]}>
        <Text>{item.message}</Text>
      </View>
    )
    ​
    const styles = {
      message: {
        width: '70%',
        margin: 10,
        padding: 10,
        backgroundColor: 'white',
        borderColor: '#979797',
        borderStyle: 'solid',
        borderWidth: 1,
        borderRadius: 10
      },
      incomingMessage: {
        alignSelf: 'flex-end',
        backgroundColor: '#E1FFC7'
      }
    }
    ​
    export default Message;
    Tidak ada yang perlu dijelaskan dari code diatas karena hanya sebuah component biasa yang menerima props item yang akan menampilkan message kedalam component Text.
  5. Karena kita memanggil component Compose, maka buat file Compose.js didalam folder src/components, kemudian masukkan code berikut:
    import React from 'react';
    import { View, StyleSheet, Keyboard, Button, TextInput } from 'react-native';
    ​
    class Compose extends React.Component {
        constructor(props) {
            super(props);
            this.submit = this.submit.bind(this);
        }
    ​
        //Membuat state text 
        state = {
            text: ''
        }
    ​
        //submit method yang berfungsi ketika tombol ditekan
        submit() {
            //mengirim nilai ke database berdasarkan state text yang diterima
            this.props.submit(this.state.text);
            //mengatur state text menjadi kosong
            this.setState({
                text: ''
            })
            //menutup keyboard
            Keyboard.dismiss();
        }
    ​
        render(){
            return (
                <View style={styles.compose}>
                    <TextInput
                        style={styles.composeText}
                        //value diatur berdasarkan nilai dari state text
                        value={this.state.text}
                        //ketika text berubah maka akan melakukan set text
                        onChangeText={(text) => this.setState({text})}
                        //Ketika user memasukkan text dan meng-klik return pada phone keyboard maka akan disubmit.
                        onSubmitEditing={(event) => this.submit()}
                        editable = {true}
                        maxLength = {40}
                    />
                    <Button
                        //ketika tombol ditekan maka akan memanggil method submit
                        onPress={this.submit}
                        title="Send"
                    />
                </View>
            )
        }
    } 
    ​
    const styles = StyleSheet.create({
      composeText: {
        width: '80%',
        paddingHorizontal: 10,
        height: 40,
        backgroundColor: 'white',
        borderColor: '#979797',
        borderStyle: 'solid',
        borderWidth: 1,
      },
      compose: {
        flexDirection: 'row',
        alignItems: 'center',
        justifyContent: 'space-between',
        margin: 10
      }
    });
    ​
    export default Compose;
    Karena Message.js dan Compose.js telah dibuat, buka file ChatScreen.js kemudian import kedua file tersebut:
    import Message from '../components/Message';
    import Compose from '../components/Compose';
  6. Pada step ke-4 bagian <Compose submit={postMessage} />, kita mengirimkan props submit menggunakan function postMessage. Maka buka file api.js kemudian tambahkan code berikut:
    export const postMessage = (message) => {
        if (Boolean(message)) {
            pushData('messages', {
                incoming: false,
                message
            })
        }
    }
    Penjelasan: Jika ada data yang diterima maka kita akan akan mengirim nilai pushData dengan name messages yang berisi data incoming = false dan message itu sendiri. Karena kita menggunakan function pushData, maka perbaharui import from Firebase menjadi:
    import { setListener, pushData, initialize } from './firebase';
  7. Buka file firebase.js kemudian tambahkan code berikut untuk membuat function pushData:
    export const pushData = (endpoint, data) => {
        return firebase.database().ref(endpoint).push(data);
    }
    Penjelasan: Code diatas berfungsi untuk melakukan push data ke dalam database Firebase dengan menerima value yang dikirimkan.
Sampai pada tahap ini, aplikasi chatting whatsapp clone telah berhasil dibuat dan dapat berjalan sebagaimana mestinya. Saat aplikasi di-load maka akan tampak seperti ini :

Kemudian klik Navigate ke ChatScreen, maka akan tampak seperti ini:

Kemudian saat mengisi text lalu tekan send maka data pada chatscreen akan diperbaharui

Sekian case sederhana tentang bagaimana cara berinteraksi dengan database secara real-time dimana pada case kali ini kita memanfaatkan service dari Firebase. Buat kamu yang masih kebingungan meyatukan potongan code diatas harap dibaca secara perlahan atau bisa dengan menyalin repository github. Semoga bermanfaat.
sumber:
https://daengweb.id/membuat-aplikasi-chatting-react-native
Share:

React Native Template | AMTech

React Native tengah mendapat popularitas untuk alasan yang cukup jelas: ini mengizinkan para developer menulis kode secara lintas sistem operasi mobile yang berbeda. Ini berarti mereka tidak perlu lagi untuk membangun aplikasi yang sama untuk iOS dan Android dari awal atau dengan menspesialisasikannya dalam satu atau sistem operasi lainnya Sekarang Anda bisa menulis kode aplikasi untuk kedua platform dengan teknologi JavaScript powerful yang sama yang Anda gunakan untuk membuat aplikasi web
Dipelopori oleh Facebook dan dirilis sebagai open source, React Native saat ini digunakan oleh aplikasi seperti Facebook, Instagram, Netflix, Airbnb, dll, dan hanya akan terus bertambah kuat.
Itu mengapa kami membuat daftar 10 templates aplikasi React Native terbaik yang saat ini tersedia di CodeCanyon
Salah satu templates aplikasi React Native yang paling populer tersedia di CodeCanyon, MStore Pro memungkinkan pengguna untuk mengkonversi toko online mereka yang sudah ada menjadi aplikasi toko online mobile.


MStore Pro
Template ini tidak membutuhkan kemampuan koding dan sangat mudah untuk dikostumisasi. Template ini bisa dengan mudah di integrasikan dengan WordPress dan WooCommerce, mendukung PayPal, Stripe, dan COD, dan mengizinkan pengguna untuk login menggunakan akun Facebook mereka.
Reviewer produk ini jandosul mengatakan template ini:
"Template ini persis seperti yang saya butuhkan. Tidak perlu tahu secara dalam mengenai Java dll. untuk membuat aplikasi mobile. hanya dasar dari React Native dan sedikit kesabaran."
Jika Anda sedang mencari template aplikasi konversi mata uang secara langsung, Anda akan sangat senang dengan Currency Converter. Template aplikasi React Native ini mengizinkan pengguna untuk dengan cepat dan dengan mudah untuk membuat aplikasi mobile konversi mata uang untuk negara manapun di seluruh dunia.


Currency Converter
Desain telah termasuk didalamnya bendera dari semua negara, dan aplikasi ini menyediakan kurs harga pasar dari setiap mata uang. Aplikasi ini juga mampu menampilkan tingkat konversi dari satu mata uang ke dua mata uang lainnya dalam satu waktu.
BeoNews telah menjadi populer sejak muncul di pasar pada akhir tahun 2016. Saat ini bisa dikatakan salah satu template dengan rating terbaik di kategori ini, aplikasi ini mengizinkan pengguna untuk mengkonversi konten apapun di situs WordPress mereka, seperti video, foto, dan blog, kedalam aplikasi mobile. BeoNews menyimpan data pengguna pada Firebase dan tersinkornisasi di semua devices.


BeoNews
Seorang pengulas bull-tech mengatakan tentang template ini:
"Dukungan yang luar biasa! Kodenya sangat baik dan jelas. Projek WordPress ke React Native terbaik di pasar."
Dengan pekerjaan yang menuntut dan kehidupan keluarga yang sibuk, tak mengherankan jika aplikasi produktivitas adalah aplikasi mobile yang paling populer.


Tudu
Template aplikasi React Native bernama Tudu secara cerdik dan tepat bertujuan untuk membantu pengembang membuat aplikasi produktivitas sederhana dan efisien yang akan menarik bagi banyak pengguna. Aplikasi ini memiliki splashscreen, penyimpanan offline, tindakan swipe untuk menyelesaikan atau menghapus item, grafik wawasan, dan banyak lagi.
Track Money adalah salah satu template aplikasi React Native terbaru yang tersedia di CodeCanyon. Ini dirancang untuk membantu pengguna melacak arus pendapatan dan pengeluaran mereka.


Track Money
Aplikasi ini memungkinkan pengguna mengatur pendapatan dan pengeluaran berdasarkan kategori dan menyediakan dokumentasi dan video tutorial yang bagus.
Jika Anda mencari template untuk membantu membuat aplikasi perpesanan yang dapat digunakan untuk grup keanggotaan, Real Time Chat bisa menjadi pilihan tepat untuk Anda.


Real Time Chat
Template aplikasi React Native ini memungkinkan pengguna untuk mendaftar dengan nama, email dan kata sandi mereka, dan memungkinkan mereka mulai mengobrol dengan anggota lain dalam grup. Seperti template lainnya yang disertakan di sini, template aplikasi Real Time Chat mencakup dokumentasi dan video tutorial yang bagus.
Basic Pairs Memory Game adalah permainan memori sederhana untuk anak-anak dengan empat tingkat kesulitan. Tujuannya adalah untuk menguji dan memperbaiki ingatan dengan meminta pemain menemukan tiles yang sama.


Basic Pairs Memory Game
Template aplikasi React Native ini membuatnya sangat mudah untuk menyesuaikan semua aspek dari game termasuk latar belakang, gambar yang digunakan, teks dan warna.
Kesan pertama sangatlah berarti. Jadi, perbagus lah penampilan halaman awal aplikasi Anda dengan BeOnboard, sebuah koleksi 18 template aplikasi React Native yang dirancang untuk digunakan dengan aplikasi apa pun untuk menjelaskan fungsionalitas aplikasi kepada pengguna baru.


BeOnboard
Mudah untuk di ubahsuaikan dan digunakan, template ini bertujuan untuk menyediakan tampilan antarmuka dan pengalaman pengguna yang luar biasa
BeoUI adalah template aplikasi React Native untuk e-commerce. Template berfokus pada pembuatan antarmuka pengguna yang menarik yang mudah digunakan.


BeoUI
Fitur terbaiknya adalah halaman intro dengan menggunakan efek parallax, pilihan tampilan list atau dua kolom, slideshow produk, pilihan kategori, dan halaman profile dimana pembeli bisa melacak order mereka, menerima notifikasi, atau membuat daftar keinginan.
Advertisement
Jika Anda ingin mengubah situs WordPress atau Shopify menjadi aplikasi mobile yang professional dan berkerja dengan penuh secara cepat dan mudah, template aplikasi React Native gikApp sangatlah ideal.


gikApp
Pengembang mereka menyediakan video instruksi secara langkah demi langkah, dan jika Anda tidak yakin apabila aplikasi tersebut yang terbaik untuk Anda, Anda bisa mengambil keuntungan dari penawaran percobaan gratis dan mencobanya terlebih dahulu sebelum memutuskan untuk membelinya.

sumber:
https://code.tutsplus.com/articles/best-react-native-app-templates--cms-29602
Share:

Sunday, September 23, 2018

React Native Tutorial : Cara Membuat Sig Up dan Log In React Native | AMTech


membuat login react native dengan firebase
Hallo Penggemar Koding Indonesia. Berjumpa kembali ditutorial membuat aplikasi android menggunakan React Native. Pada tutorial kali ini kita akan membuat aplikasi android menggunakan React Native Expo yaitu Sign Up & Log in (User Authentication) menggunakan firebase. Untuk mempersingkat waktu mari kita langsung saja memulai membuat projectnya.

Step 1: Membuat Akun Firebase

Pertama kali yang harus dilakukan tentunya membuat akun Firebase, tetapi untuk yang memiliki email Gmail maka tidak perlu membuat akun, tinggal login saja menggunakan Email dan Password dari akun Gmail yang dimiliki disini.

Step 2: Membuat Project Pada Firebase

Pertama pilih Link “GO TO CONSOLE” yang terdapat pada bagian kanan atas sebelah poto profil dari Email Gmail kita.




Setelah itu pilih “Tambahkan Proyek”

Setelah menambahkan proyek, selanjutnya silahkan beri nama untuk proyek firebase yang akan kita buat seperti di bawah ini:

Setelah itu maka proyek baru yang telah dibuat akan segera terbuka. Setelah halaman proyek selesai terbuka, selanjutnya silahkan pilih menu Authentication > Metode Masuk > Email/Sandi dan aktifkan metode masuk menggunakan email dan sandi. Lebih jelasnya silahkan perhatikan dua gambar di bawah ini :





Selanjutnya kita akan membuat akun Expo XDE.

Step 3: Membuat Aplikasi React Native Menggunakan Expo XDE

Pada tahap kali ini kita akan membuat Aplikasi React Native Menggunakan Expo XDE menggunakan Template Tab Navigation. Jika belum memiliki aplikasi dari Expo XDE silahkan download disini.
Catatan : Pada bagian Expo XDE Pilih sesuai dengan Sistem Operasi yang digunakan maka secara otomatis akan mengunduh aplikasi Expo XDE yang sesuai dengan Sistem Operasi yang kita pilih. Setelah itu silahkan install.
Selanjutnya buka aplikasi Expo XDE maka akan muncul halaman Login seperti di bawah ini :

Jika belum memiliki akun Expo silahkan Melakukan registrasi atau bisa registrasi menggunakan akun github. Setelah melakukan Login maka akan muncul halaman seperti berikut ini:

Pada Gambar di atas silahkan pilih Create New Project dan beri nama sesuai yang kalian inginkan serta pilih pada bagian template yaitu Tab Navigation. Perhatikan gambar di bawah ini:

Setelah itu tunggu hingga project berhasil dibuat. Setelah project berhasil dibuat maka pada Expo XDE akan seperti berikut ini :

Untuk menjalankan bisa menggunakan aplikasi Expo yang dipasang pada smartphone Android maupun Iphone dengan cara pilih “Share” pada bagian kanan atas, maka akan muncul Barcode dan scan menggunakan aplikasi Expo pada Smartphone.

Atau bisa juga menggunakan Genymotion dengan cara buka Genymotion dan jalankan salah satu Device Emulator Android, setelah emulator berjalan pada bagian aplikasi Expo XDE pilih (Device > Open on Android)

Setelah dijalankan maka hasilnya akan seperti ini untuk pertama kali :




Selanjutnya kita akan belajar membuat kode program.

Step 4: Membuat Kode Program

Selanjutnya mari kita mulai membuat programnya. Silahkan buka project yang telah kita buat menggunakan Teks Editor (Visual Studio Code, Atom, Sublime, Dll).
Setelah project terbuka selanjutnya silahkan buat File baru pada folder Screens dengan nama LoginScreen.js

Setelah itu silahkan buka Terminal atau Cmd, arahkan ke project yang baru kita buat, atau bisa menggunakan Integrated Terminal yang terdapat pada Visual Studio Code dengan cara pilih tab View > Integrated Terminal atau juga bisa dengan menekan Alt + F12 maka terminal pada Visual Studio Code akan terbuka dibagian bawah.

Tampilan Terminal pada Visual Studio Code


Setelah terminal atau cmd terbuka, silahkan tuliskan perintah berikut di terminal :


dan


Kedua perintah di atas diperlukan karena kita akan menggunakan Firebase dan juga React Native Elements untuk memperindah view aplikasi kita.
Setelah itu silahkan tuliskan program berikut pada file LoginScreen.js yang sebelumnya telah kita buat :
 

Nilai dari “firebase.initializeApp” didapatkan dari Project Firebase yang sebelumnya kita buat di Console Firebase. silahkan perhatikan gambar berikut:


Setelah dipilih seperti yang ditunjuk pada gambar di atas, maka akan keluar Pop-Up seperti gambar di bawah ini, setelah itu silahkan Copy dan simpan di bagian LoginScreen.js sesuai dengan contoh program sebelumnya di atas.




Setelah itu pada bagian RootNavigator.js tambahkan Variabel Login untuk membuka Screen Login, sehingga programnya menjadi seperti berikut:


 
Baris yang ditambahkan adalah sebagai berikut :


Jika sudah maka aplikasi kita telah selesai, silahkan jalankan programnya maka akan diarahkan ke Menu Login :
Silahkan lakukan Sign Up (Masukkan Email dan Password).  Jika kita perhatikan pada Console Firebase di website, pada bagian Authentication akan bertambah Email sesuai yang kita masukan saat Sign Up serta Password yang telah terenkripsi.
Setelah itu Lakukan Login dengan email dan Password yang tadi kita buat. Jika berhasil dan sesuai, kita akan diarahkan ke Halaman Home/Main sesuai saat pertama kita coba Run Aplikasinya.
Demikin tutorial mengenai Sign Up & Login Firebase User Authentication .

sumber:
http://www.kodingindonesia.com/react-native-expo-sign-up-login-user-authentication-menggunakan-firebase/

Share:

React Native Navigation Tutorial : Drawer Navigator Stack & Tab Navigator Inside | AMTech




Hallo Penggemar Koding Indonesia. Berjumpa kembali ditutorial membuat aplikasi android menggunakan React Native. Pada pertemuan kali ini kita akan membahas lanjutan dari materi Navigasi. Pada tutorial ini kita tetap menggunakan library React Navigation.
Yang akan kita pelajari pada tutorial ini adalah:
– Jawaban dari test kemarin (menggabungkan Stack Navigation dengan Tab Navigation)
– Drawer Navigator
– Stack & Tab Navigator Inside Drawer Navigator
Oke, agar tidak mengulur waktu mari langsung saja kita mulai.
Pertama: Membuka project React Native sebelumnya
Pada langkah pertama ini kita tidak akan membuat project baru melainkan menggunakan project yang sudah ada sebelumnya yaitu project “Navigasi”. Bagi yang belum mengikuti bisa diikuti disini.
Silahkan buka project sebelumnya di text editor dan selanjutnya coba jalankan projectnya dengan perintah seperti biasa:


Jika project masih berjalan atau berfungsi maka kita akan membuat program yang pertama yaitu (Menggabungkan Stack Navigation dengan Tab Navigation), program ini merupakan program dari jawaban test kecil-kecilan yang kita lakukan pada tutorial Navigasi yang pertama bagi yang mengikuti.
Stack Navigator Inside Tab Navigator
Sekarang kita akan mencoba membuat sebuah tab navigator yang di dalamnya terdapat Stack Navigator.
Caranya :
Pertama silahkan tuliskan kode program berikut pada file App.js :




Setelah itu jalankan programnya, maka akan menjadi seperti ini :
        



Selanjutnya kita akan membuat Aplikasi Drawer Navigator.


Drawer Navigator
Untuk bagian Drawer Navigator sebenarnya tidak terlalu berbeda dengan Stack Navigator maupun Tab Navigator, kita hanya perlu import DrawerNavigator dari react-navigator. Sebagai bayangan berikut ini cara import tiap Navigator (Stack, Tab, dan Drawer).
import Tab Navigator


import Stack Navigator

import Drawer Navigator

Untuk mencoba membuat Drawer Navigator sederhana silahkan tuliskan kode program berikut pada file App.js :


Setelah itu silahkan jalankan programnya. Hasilnya seperti berikut :

          
Untuk membuka Drawer silahkan geser layar dari sisi ujung kiri ke kanan. Untuk mempercantik silahkan tambahkan icon dan lainnya.
Selanjutnya kita akan membuat Stack Navigator dan Tab Navigator di dalam Drawer Navigator


Sebenarnya untuk tahap ini bisa kalian coba sendiri, tapi mungkin belum kebayang maka kita akan coba bersama-sama hanya untuk Stack Navigator di Dalam Drawer Navigator, untuk yang Stack & Tab Navigator di dalam Drawer Navigator bisa kalian coba sendiri sebagai bahan latihan.


Stack Navigator Inside Drawer Navigator
silahkan tuliskan kode program berikut ini pada file App.js :


Setelah itu silahkan jalankan programnya maka akan seperti berikut :
  
Tampilan Awal Sebelum Drawer Dibuka  
Setelah Drawer digeser (kanan ke kiri)    
Jika kalian perhatikan program di atas sama dengan program Stack Navigator Inside Tab Navigator hanya saja berbeda dibagian Tab Navgator yang dirubah menjadi Drawer Navigator.
Tambahan :
jika kita ingin menambahkan icon pada aplikasi kita, kita bisa menggunakan Library, antara lain yaitu react-native-vector-icons atau juga bisa react-native-elements. Kalian bisa lihat langsung di website documentationnya bagaimana cara instalasinya.


Demikin tutorial mengenai React Navigation.

sumber:
http://www.kodingindonesia.com/drawer-navigator-stack-tab-navigator-inside-drawer-navigator/



Share:

Popular Posts

Recent Posts

Unordered List

Pages

Powered by Blogger.