Sunday, August 19, 2018

Bagaimana menyimpan API KEY di Android?

Sebelumnya saya selalu menyimpan API Key dalam suatu class di android pada field tertentu. Ternyata hal ini sangat tidak dianjurkan dalam best practice pengembangan aplikasi Android. Kenapa? 

Karena saat kita menaruh code program kita di suatu repository, misal Github, maka orang lain akan bisa mengakses API Key milik kita, dimana jika ada orang yang menyalahgunakan akan berakibat kerugian dari kita sendiri.

Berikut ini caranya supaya API Key kita tetap aman meskipun code kita dishare melalui repository:
  1. Setelah membuat project dan diintegrasikan dengan version control, misalnya git. Tambahkan file /gradle.properties pada gitignore dari project tersebut. Seperti pada baris ke-11 file .gitignore dibawah ini:
    *.iml
    .gradle
    /local.properties
    /.idea/libraries
    /.idea/modules.xml
    /.idea/workspace.xml
    .DS_Store
    /build
    /captures
    .externalNativeBuild
    /gradle.properties
    
  2. Tambahkan baris kode API berikut pada file project:gradle.properties. Pada contoh berikut saya gunakan 2 API Key dari TheMovieDB dan OpenWeather:
    #API KEY
    TheMovieDBApi = 4b5017168cac6677269cxxxxxx
    TheOpenWeatherApi = 4de4dd041e499ca8axxxxxx
    
  3. Selanjutnya buka file app: build.gradle, tambahkan code seperti pada baris ke-3 sampai dengan baris ke-6 dan code pada baris ke-17 sampai dengan baris ke-20 seperti dibawah ini:
    apply plugin: 'com.android.application'
    
    // Define Variable API Key
    def STRING = 'String'
    def THEMOVIEDB_API_KEY = '"' + TheMovieDBApi + '"' ?: '"Define your The Movie DB API Key!"'
    def OPENWEATHER_API_KEY = '"' + TheOpenWeatherApi + '"' ?: '"Define your The Openweather API Key!"'
    
    android {
        compileSdkVersion 28
        defaultConfig {
            applicationId "net.ariflaksito.katalogfilm"
            minSdkVersion 15
            targetSdkVersion 28
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
            each { type ->
                type.buildConfigField STRING, 'TheMovieDBApi', THEMOVIEDB_API_KEY
                type.buildConfigField STRING, 'TheOpenWeatherApi', OPENWEATHER_API_KEY
            }
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'com.android.support:appcompat-v7:28.+'
        implementation 'com.android.support.constraint:constraint-layout:1.0.2'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'com.android.support.test:runner:1.0.1'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    }
    
  4. Setelah itu anda bisa memanggil API Key tersebut melalui class di Android.
    static String MOVIE_API = BuildConfig.TheMovieDBApi;
    static String WEATHER_API = BuildConfig.TheMovieDBApi;
Alhamdulillah mendapatkan ilmu ini dari masukan reviewer di submission pertama pada project kelas MADE di dicoding, yang belum tau dicoding bisa menuju ke artikel saya yang ini.

Semoga bermanfaat yaa.. 

No comments:

Post a Comment