Bukan Materi Pelajaran yang Sulit, tapi Memulai Untuk Belajar itu yang Sulit.

Notifikasi Android Menggunakan Firebase

10:31 AM Posted by Unknown No comments
Hallo semua,, ini gw buat dokumentasi sekaligus tutorial Notifikasi Android Menggunakan Firebase (FCM)

Lumayan agak RIBET setting-annya.

1. Login akun Gmail kamu, kemudian kunjungi link  ini : https://firebase.google.com/

2. Pergi ke Menu console => Kemudian Buat Proyek.





3. Pilih "Tambahkan Firebase ke Aplikasi Android Anda"

4. Isi Nama Package Aplikasi anda, untuk "Nama pendek" dan "Sertifikat SHA-1" di tutorial ini di abaikan saja.




5. Selanjutnya download file "google-services.json" untuk di simpan ke dalam folder app, seperti panduan pada gambar di bawah ini.



6. Tambahkan classpath ke Project-level build.gradle dan plugin ke App-level build.gradle, seperti gambar di bawah:



7. Jika masih ada Error di FirebaseMessagingService  tambahkan library berikut. 


dependencies {
    ...
    compile 'com.google.firebase:firebase-messaging:9.6.0'}


8. Buat 3 packages folder dengan nama  appservice and utils di dalam project utama,  seperti contoh gambar berikut:




9. Download  notification.mp3 dan simpan ke dalam folder res ⇒ raw. jika kamu punya pesan suara yang lain di ganti juga ngga apa2.
10. Kemudian buat class dengan nama Config.java, fungsinya untuk constant value yang nantinya akan di gunakan oleh activity yang lain.

Config.java
 
package com.uneh.notif.app;

/**
 * Created by macbookpro on 10/11/17.
 */

public class Config {
    // global topic to receive app wide push notifications
    public static final String TOPIC_GLOBAL = "global";

    // broadcast receiver intent filters
    public static final String REGISTRATION_COMPLETE = "registrationComplete";
    public static final String PUSH_NOTIFICATION = "pushNotification";

    // id to handle the notification in the notification tray
    public static final int NOTIFICATION_ID = 100;
    public static final int NOTIFICATION_ID_BIG_IMAGE = 101;

    public static final String SHARED_PREF = "ah_firebase";
}


11. Buat class baru dengan nama NotificationUtils.java di dalam folder package utils

 
package com.uneh.notif.until;

import android.app.ActivityManager;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Build;
import android.support.v4.app.NotificationCompat;
import android.text.Html;
import android.text.TextUtils;
import android.util.Patterns;

import com.uneh.notif.R;
import com.uneh.notif.app.Config;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * Created by macbookpro on 10/11/17.
 */

public class NotificationUtils {
    private static String TAG = NotificationUtils.class.getSimpleName();

    private Context mContext;

    public NotificationUtils(Context mContext) {
        this.mContext = mContext;
    }

    public void showNotificationMessage(String title, String message, String timeStamp, Intent intent) {
        showNotificationMessage(title, message, timeStamp, intent, null);
    }

    public void showNotificationMessage(final String title, final String message, final String timeStamp, Intent intent, String imageUrl) {
        // Check for empty push message
        if (TextUtils.isEmpty(message))
            return;


        // notification icon
        final int icon = R.mipmap.ic_launcher;

        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        final PendingIntent resultPendingIntent =
                PendingIntent.getActivity(
                        mContext,
                        0,
                        intent,
                        PendingIntent.FLAG_CANCEL_CURRENT
                );

        final NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
                mContext);

        final Uri alarmSound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE
                + "://" + mContext.getPackageName() + "/raw/notification");

        if (!TextUtils.isEmpty(imageUrl)) {

            if (imageUrl != null && imageUrl.length() > 4 && Patterns.WEB_URL.matcher(imageUrl).matches()) {

                Bitmap bitmap = getBitmapFromURL(imageUrl);

                if (bitmap != null) {
                    showBigNotification(bitmap, mBuilder, icon, title, message, timeStamp, resultPendingIntent, alarmSound);
                } else {
                    showSmallNotification(mBuilder, icon, title, message, timeStamp, resultPendingIntent, alarmSound);
                }
            }
        } else {
            showSmallNotification(mBuilder, icon, title, message, timeStamp, resultPendingIntent, alarmSound);
            playNotificationSound();
        }
    }


    private void showSmallNotification(NotificationCompat.Builder mBuilder, int icon, String title, String message, String timeStamp, PendingIntent resultPendingIntent, Uri alarmSound) {

        NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();

        inboxStyle.addLine(message);

        Notification notification;
        notification = mBuilder.setSmallIcon(icon).setTicker(title).setWhen(0)
                .setAutoCancel(true)
                .setContentTitle(title)
                .setContentIntent(resultPendingIntent)
                .setSound(alarmSound)
                .setStyle(inboxStyle)
                .setWhen(getTimeMilliSec(timeStamp))
                .setSmallIcon(R.mipmap.ic_launcher)
                .setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), icon))
                .setContentText(message)
                .build();

        NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(Config.NOTIFICATION_ID, notification);
    }

    private void showBigNotification(Bitmap bitmap, NotificationCompat.Builder mBuilder, int icon, String title, String message, String timeStamp, PendingIntent resultPendingIntent, Uri alarmSound) {
        NotificationCompat.BigPictureStyle bigPictureStyle = new NotificationCompat.BigPictureStyle();
        bigPictureStyle.setBigContentTitle(title);
        bigPictureStyle.setSummaryText(Html.fromHtml(message).toString());
        bigPictureStyle.bigPicture(bitmap);
        Notification notification;
        notification = mBuilder.setSmallIcon(icon).setTicker(title).setWhen(0)
                .setAutoCancel(true)
                .setContentTitle(title)
                .setContentIntent(resultPendingIntent)
                .setSound(alarmSound)
                .setStyle(bigPictureStyle)
                .setWhen(getTimeMilliSec(timeStamp))
                .setSmallIcon(R.mipmap.ic_launcher)
                .setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), icon))
                .setContentText(message)
                .build();

        NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(Config.NOTIFICATION_ID_BIG_IMAGE, notification);
    }

    /**
     * Downloading push notification image before displaying it in
     * the notification tray
     */
    public Bitmap getBitmapFromURL(String strURL) {
        try {
            URL url = new URL(strURL);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input = connection.getInputStream();
            Bitmap myBitmap = BitmapFactory.decodeStream(input);
            return myBitmap;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    // Playing notification sound
    public void playNotificationSound() {
        try {
            Uri alarmSound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE
                    + "://" + mContext.getPackageName() + "/raw/notification");
            Ringtone r = RingtoneManager.getRingtone(mContext, alarmSound);
            r.play();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Method checks if the app is in background or not
     */
    public static boolean isAppIsInBackground(Context context) {
        boolean isInBackground = true;
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) {
            List runningProcesses = am.getRunningAppProcesses();
            for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
                if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                    for (String activeProcess : processInfo.pkgList) {
                        if (activeProcess.equals(context.getPackageName())) {
                            isInBackground = false;
                        }
                    }
                }
            }
        } else {
            List taskInfo = am.getRunningTasks(1);
            ComponentName componentInfo = taskInfo.get(0).topActivity;
            if (componentInfo.getPackageName().equals(context.getPackageName())) {
                isInBackground = false;
            }
        }

        return isInBackground;
    }

    // Clears notification tray messages
    public static void clearNotifications(Context context) {
        NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.cancelAll();
    }

    public static long getTimeMilliSec(String timeStamp) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            Date date = format.parse(timeStamp);
            return date.getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return 0;
    }
}

12. Buat class baru dengan nama MyFirebaseInstanceIDService.java didalam folder package service.


package com.uneh.notif.service;

import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v4.content.LocalBroadcastManager;
import android.util.Log;

import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.FirebaseInstanceIdService;
import com.uneh.notif.app.Config;


/**
 * Created by macbookpro on 10/11/17.
 */

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
    private static final String TAG = MyFirebaseInstanceIDService.class.getSimpleName();

    @Override
    public void onTokenRefresh() {
        super.onTokenRefresh();
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();

        // Saving reg id to shared preferences
        storeRegIdInPref(refreshedToken);

        // sending reg id to your server
        sendRegistrationToServer(refreshedToken);

        // Notify UI that registration has completed, so the progress indicator can be hidden.
        Intent registrationComplete = new Intent(Config.REGISTRATION_COMPLETE);
        registrationComplete.putExtra("token", refreshedToken);
        LocalBroadcastManager.getInstance(this).sendBroadcast(registrationComplete);
    }

    private void sendRegistrationToServer(final String token) {
        // sending gcm token to server
        Log.e(TAG, "sendRegistrationToServer: " + token);
    }

    private void storeRegIdInPref(String token) {
        SharedPreferences pref = getApplicationContext().getSharedPreferences(Config.SHARED_PREF, 0);
        SharedPreferences.Editor editor = pref.edit();
        editor.putString("regId", token);
        editor.commit();
    }
}

13. Buat lagi class di dalam folder package service dengan nama file: MyFirebaseMessagingService.java. 


 
package com.uneh.notif.service;

import android.content.Context;
import android.content.Intent;
import android.support.v4.content.LocalBroadcastManager;
import android.text.TextUtils;
import android.util.Log;

import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
import com.uneh.notif.MainActivity;
import com.uneh.notif.app.Config;
import com.uneh.notif.until.NotificationUtils;

import org.json.JSONException;
import org.json.JSONObject;

/**
 * Created by macbookpro on 10/11/17.
 */

public class MyFirebaseMessagingService extends FirebaseMessagingService{
    private static final String TAG = MyFirebaseMessagingService.class.getSimpleName();

    private NotificationUtils notificationUtils;

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        Log.e(TAG, "From: " + remoteMessage.getFrom());

        if (remoteMessage == null)
            return;

        // Check if message contains a notification payload.
        if (remoteMessage.getNotification() != null) {
            Log.e(TAG, "Notification Body: " + remoteMessage.getNotification().getBody());
            handleNotification(remoteMessage.getNotification().getBody());
        }

        // Check if message contains a data payload.
        if (remoteMessage.getData().size() > 0) {
            Log.e(TAG, "Data Payload: " + remoteMessage.getData().toString());

            try {
                JSONObject json = new JSONObject(remoteMessage.getData().toString());
                handleDataMessage(json);
            } catch (Exception e) {
                Log.e(TAG, "Exception: " + e.getMessage());
            }
        }
    }

    private void handleNotification(String message) {
        if (!NotificationUtils.isAppIsInBackground(getApplicationContext())) {
            // app is in foreground, broadcast the push message
            Intent pushNotification = new Intent(Config.PUSH_NOTIFICATION);
            pushNotification.putExtra("message", message);
            LocalBroadcastManager.getInstance(this).sendBroadcast(pushNotification);

            // play notification sound
            NotificationUtils notificationUtils = new NotificationUtils(getApplicationContext());
            notificationUtils.playNotificationSound();
        }else{
            // If the app is in background, firebase itself handles the notification
        }
    }

    private void handleDataMessage(JSONObject json) {
        Log.e(TAG, "push json: " + json.toString());

        try {
            JSONObject data = json.getJSONObject("data");

            String title = data.getString("title");
            String message = data.getString("message");
            boolean isBackground = data.getBoolean("is_background");
            String imageUrl = data.getString("image");
            String timestamp = data.getString("timestamp");
            JSONObject payload = data.getJSONObject("payload");

            Log.e(TAG, "title: " + title);
            Log.e(TAG, "message: " + message);
            Log.e(TAG, "isBackground: " + isBackground);
            Log.e(TAG, "payload: " + payload.toString());
            Log.e(TAG, "imageUrl: " + imageUrl);
            Log.e(TAG, "timestamp: " + timestamp);


            if (!NotificationUtils.isAppIsInBackground(getApplicationContext())) {
                // app is in foreground, broadcast the push message
                Intent pushNotification = new Intent(Config.PUSH_NOTIFICATION);
                pushNotification.putExtra("message", message);
                LocalBroadcastManager.getInstance(this).sendBroadcast(pushNotification);

                // play notification sound
                NotificationUtils notificationUtils = new NotificationUtils(getApplicationContext());
                notificationUtils.playNotificationSound();
            } else {
                // app is in background, show the notification in notification tray
                Intent resultIntent = new Intent(getApplicationContext(), MainActivity.class);
                resultIntent.putExtra("message", message);

                // check for image attachment
                if (TextUtils.isEmpty(imageUrl)) {
                    showNotificationMessage(getApplicationContext(), title, message, timestamp, resultIntent);
                } else {
                    // image is present, show notification with image
                    showNotificationMessageWithBigImage(getApplicationContext(), title, message, timestamp, resultIntent, imageUrl);
                }
            }
        } catch (JSONException e) {
            Log.e(TAG, "Json Exception: " + e.getMessage());
        } catch (Exception e) {
            Log.e(TAG, "Exception: " + e.getMessage());
        }
    }

    /**
     * Showing notification with text only
     */
    private void showNotificationMessage(Context context, String title, String message, String timeStamp, Intent intent) {
        notificationUtils = new NotificationUtils(context);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        notificationUtils.showNotificationMessage(title, message, timeStamp, intent);
    }

    /**
     * Showing notification with text and image
     */
    private void showNotificationMessageWithBigImage(Context context, String title, String message, String timeStamp, Intent intent, String imageUrl) {
        notificationUtils = new NotificationUtils(context);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        notificationUtils.showNotificationMessage(title, message, timeStamp, intent, imageUrl);
    }
}

14. Buka AndroidManifest.xml dan tambahkan service Firebase untuk class MyFirebaseMessagingService dan MyFirebaseInstanceIDService, seperti contoh di bawah:
 



    

    
        
            
                

                
            
        
    

    
    
        
            
        
    

    
        
            
        
    
    




15. Kemudian edit main_activiy untuk menampilkan reg_id firebase pada layout. buka layout file acitivy_main.xml kemudian ubah code seperti contoh di bawah ini:
 



    

    
 
16. Selanjutnya buka MainActivity.java gunakan kode seperti di bawah ini.

 
package com.uneh.notif;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

import com.google.firebase.messaging.FirebaseMessaging;
import com.uneh.notif.app.Config;
import com.uneh.notif.until.NotificationUtils;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = MainActivity.class.getSimpleName();
    private BroadcastReceiver mRegistrationBroadcastReceiver;
    private TextView txtRegId, txtMessage;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        txtRegId = (TextView) findViewById(R.id.txt_reg_id);
        txtMessage = (TextView) findViewById(R.id.txt_push_message);

        mRegistrationBroadcastReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if (intent.getAction().equals(Config.REGISTRATION_COMPLETE)) {
                    // gcm successfully registered
                    // now subscribe to `global` topic to receive app wide notifications
                    FirebaseMessaging.getInstance().subscribeToTopic(Config.TOPIC_GLOBAL);

                    displayFirebaseRegId();

                } else if (intent.getAction().equals(Config.PUSH_NOTIFICATION)) {
                    // new push notification is received

                    String message = intent.getStringExtra("message");

                    Toast.makeText(getApplicationContext(), "Push notification: " + message, Toast.LENGTH_LONG).show();

                    txtMessage.setText(message);
                }
            }
        };
        displayFirebaseRegId();
    }
    private void displayFirebaseRegId() {
        SharedPreferences pref = getApplicationContext().getSharedPreferences(Config.SHARED_PREF, 0);
        String regId = pref.getString("regId", null);

        Log.e(TAG, "Firebase reg id: " + regId);

        if (!TextUtils.isEmpty(regId))
            txtRegId.setText("Firebase Reg Id: " + regId);
        else
            txtRegId.setText("Firebase Reg Id is not received yet!");
    }

    @Override
    protected void onResume() {
        super.onResume();

        // register GCM registration complete receiver
        LocalBroadcastManager.getInstance(this).registerReceiver(mRegistrationBroadcastReceiver,
                new IntentFilter(Config.REGISTRATION_COMPLETE));

        // register new push message receiver
        // by doing this, the activity will be notified each time a new message arrives
        LocalBroadcastManager.getInstance(this).registerReceiver(mRegistrationBroadcastReceiver,
                new IntentFilter(Config.PUSH_NOTIFICATION));

        // clear the notification area when the app is opened
        NotificationUtils.clearNotifications(getApplicationContext());
    }

    @Override
    protected void onPause() {
        LocalBroadcastManager.getInstance(this).unregisterReceiver(mRegistrationBroadcastReceiver);
        super.onPause();
    }
}

Sekarang kita sudah selesai meng-integrasikan firebase cloud messaging. sekarang jalankan project aplikasi nya, kemudian kamu lihat reg id pada logCat




ok

Konfigurasi Koltin dan Contoh Source Code Menggunakan Bahasa Koltin

kotlin merupakan Bahasa Pemrograman modern yang bersifat statically-typed yang dapat di jalankan di atas platform Java Virtual Machine(JVM). Kotlin juga dapat di kompilasi (compile) ke dalam bentuk JavaScript. Lalu, siapakah tim di balik pengembangan bahasa tersebut ? ya, tidak lain adalah JetBrains yang juga mengembangkan salah satu tools pemrograman (IDE) yang saat ini di adopsi oleh google untuk di gunakan sebagai toolspengembangan aplikasi di Android (Android Studio).

Lalu, apa saja sih kelebihan dari kotlin tersebut dibandingkan dengan bahasa pemrogaman lainnya (dalam hal ini Java) ? Jika kita lihat dari penjelasan yang tertulis pada website kotlin, maka dapat di simpulkan ke dalam poin-poin berikut ini;
  • Concise : Kotlin mampu mengurangi boilerplate of code atau tingkat kerumitan dari kode yang biasa kita tulis, ketika menggunakan bahasa Java
  • Safe : Kotlin mampu menjamin bahwa setiap syntax yang kita tulis secara proses kompilasi dapat mencegah kemungkinan terjadinya error, misalnya mampu mencegah terjadinya NullPointerExceptions ketika kita coding menggunakan bahasa Java
  • Versatile : Kotlin sejatinya sama seperti Java, karena memang kotlin itu sendiri di turunkan dari bahasa induknya, yaitu Java. Sehingga kotlin juga dapat di pakai dalam pengembangan aplikasi di Web maupun Mobile
  • Interoperable : Kotlin tidak sama seperti bahasa Java turunan lainnya (misal; Scala ataupun Clojure) yang tidak dapat dijalankan bersamaan dengan kode yang kita tulis menggunakan Java. Kotlin mampu membaca kode lama atau library yang kita gunakan atau kita tulis dengan bahasa Java dan begitupun sebaliknya
Lalu, apa hubungannya dengan Android ? Tentu saja berhubungan, sebab Android di tulis menggunakan bahasa pemrograman Java, meskipun Android memiliki lifecycle sendiri. Karena Android di tulis menggunakan bahasa pemrograman Java, maka otomatis Kotlin pun juga dapat digunakan untuk membuat aplikasi di Android :)
So, Saya akan coba memberikan contoh sederhana bagaimana kotlin dapat di implementasikan di Android…
Sebelum kita mulai menulis kode dengan kotlin, kita perlu menambahkan plugin dari Android Studio yang tentu saja akan digunakan dalam menulis bahasa pemrograman dengan Kotlin. Buka Android Studio, lalu pilih menu configure -> plugins. Kemudian klik tombol “Browse repositories…” dan ketikkan kata “Kotlin” lalu klik “Install”






Install Plugin Kotlin Pada Android Studio

Setelah terinstall, silahkan di restart Android Studio nya ya :)
Langkah selanjutnya adalah kita perlu menambahkan plugin pada file gradlekita terlebih dahulu, yaitu di dalam root project kita, agar kotlin dapat di kompilasi dan di jalankan di atas platform Android
dependencies {
    classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.0.6'
}
Dan jangan lupa di tambahkan juga pada module utama dari project kita ya :)
apply plugin: 'kotlin-android'
dependencies {
    compile 'org.jetbrains.kotlin:kotlin-stdlib:1.0.6'
}
Seperti biasa, kita buat terlebih dahulu tampilan utama dari aplikasi kita dengan nama activity_main.xml
 



    

        

        


Lalu kita buat implementasi dari layout tersebut dengan bahasa pemrograman kotlin seperti berikut…
 
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val root = findViewById(R.id.cl_main) as CoordinatorLayout

        val toolbar = findViewById(R.id.toolbar_main) as Toolbar
        toolbar.title = title
        setSupportActionBar(toolbar)

        val message = resources.getString(R.string.message)
        val button = findViewById(R.id.btn_main) as Button
        button.setOnClickListener { view -> Snackbar.make(root, message, Snackbar.LENGTH_SHORT).show() }
    }
}
Sebelum dijalankan, jangan lupa di registrasikan class activity yang sudah kita buat pada file AndroidManifest ya :)
Berikut sumber artikel :
Sumber Code :  On Github

Mengenal Bahasa Pemograman Android Kotlin

7:54 AM Posted by Unknown , , No comments
#Pemograman Android Kotlin Lebih Sederhana
Salam satu ayat buat semuanya.. 
Ini ada info terbaru seputar Pengembangan Aplikasi Berbasis Android dari event Google I/O tahun ini, Google kini telah memberikan dukungan penuh untuk bahasa pemrograman Kotlin. Android Studio 3.0 yang akan segera diluncurkan dalam waktu dekat nantinya akan langsung mendukung bahasa pemrograman Kotlin.
Mungkin bagi sebagian developer aplikasi Android sudah tahu tentang Kotlin. Nah bagi yang belum tahu apa itu Kotlin sederhananya Kotlin adalah bahasa pemrograman yang merupakan “penyempurnaan” dari bahasa pemrograman Java untuk pengembangan aplikasi Android.
Kotlin awalnya dikembangkan oleh JetBrains, perusahaan dibalik IntelliJ IDEA. Setelah melalui banyak perkembangan, JetBrains merilis Kotlin secara open sourcedan kini setelah perkembangannya semakin maju, Google mendukung penuh Kotlin untuk pengembangan aplikasi Android.
Developer tidak perlu khawatir proyek Android-nya yang menggunakan Java akan menjadi tidak bisa digunakan ketik ketika menggunakan Kotlin karena Java dan Kotlin bisa digunakan berbarengan. Dan karena Kotlin mirip dengan Java, developer akan dapat dengan mudah bahasa pemrograman Kotlin.
Contoh Kodingan KotlinContoh kodingan Kotlin, jauh lebih sederhana dibanding Java
Berikut ini adalah beberapa perbaikan dari Java yang ada di Kotlin:
  • Null reference kini dikontrol oleh type system.
  • Tidak ada raw type
  • Array di Kotlin tidak pernah berubah
  • Kotlin memiliki function type yang layak
  • Use-site variance tanpa perlu wildcard
  • Kotlin tidak memiliki checked exception
Untuk mengetahui lebih lanjut tentang Kotlin, bisa mengunjungi situs resminya di kotlinlang.org.

Hacker Gunakan Teknologi Gelombang Otak Untuk Curi Password

6:04 PM Posted by Unknown No comments

Hacker benar-benar memiliki segudang cara untuk meretas serta mendapatkan password dan informasi berharga milik korbannya.

Bagaimana tidak, dalam sebuah studi yang dipublikasikan baru-baru ini, hacker disebut-sebut mampu mencuri password dengan cara menganalisis sinyal gelombang otak.

Para peneliti dari University of Alabama di Birmingham dan University of California Riverside mengumpulkan data dari headset electroencephalography (EEG) terkait dengan adanya aktivitas di otak seseorang.

Biasanya, aktivitas otak yang terpantau dari headset EEG ini berasal dari kalangan gamer. Sebab, mereka diketahui sebagai pihak paling sering memakai headset tersebut. Para gamer mengendalikan karakter yang dimainkan dengan memakai sinyal otak mereka. Rupanya, headset EEG juga memonitor gelombang otak seseorang saat ia sedang tidak bermain gim.

Para peneliti menemukan, gamer yang sedang berhenti main gim, tetapi tetap menggunakan headset EEG dan memasukkan password ke akun pribadi mereka bisa sangat rentan jadi sasaran hacker.

Setelah para gamer ini memasukkan 200 karakter, sebuah algoritma yang dibuat oleh para peneliti rupanya bisa menebak PIN, dengan tingkat kesuksesan hingga 43,3 persen. Sementara, untuk menebak password 6 huruf, tingkat akurasinya mencapai 37,3 persen.

Para peneliti pun mengatakan, sudah meminta kepada manufaktur headset EEG untuk mulai mengacaukan sinyal saat pengguna masuk ke akun-akun pribadi mereka.

Aplikasi Menghitung Index Masa Tubuh (Kalkulator IMT)

6:19 PM Posted by Unknown No comments

Indeks massa tubuh (IMT) adalah rasio standar berat terhadap tinggi, dan sering digunakan sebagai indikator kesehatan umum. IMT dihitung dengan membagi berat badan (dalam kilogram) dengan kuadrat tinggi badan (dalam meter). IMT juga merupakan cara termudah untuk memperkirakan obesitas serta berkolerasi tinggi dengan massa lemak tubuh, selain itu juga penting untuk mengidentifikasi pasien obesitas yang mempunyai risiko komplikasi medis (Pudjiadi et ai,2010).

Nahh itu adalah penjelasan mengenai IMT/BMI, sebelumnya gw pernah membuat artikel yang memuat rumus untuk menentukan jumlah IMT/BMI seseorang (bisa dilihat di sini : Apakah Tubuh Anda Ideal..? Cek Sekarang.! ) dan kali ini gw sudah mendigitalkan Rumus IMT tersebut kedalam aplikasi Mobile, kalian bisa download di Play Store GRATISS... selanjutnya ini penampakan Aplikasi Calculator BMI Asian.










Silahkan untuk yg ingin Download Tersedia di Play Store.



Debuging Project Android Menggunakan Wifi

4:48 PM Posted by Unknown No comments


Halloo Semua....

Kali ini gw mau berbagi tentang apa yang gw tahu dan gw lakukan,
So, saat membuat aplikasi Android di IDE Android Studio, kita butuh perangkat Smartphone, biasa nya kita menghubungkan Komputer dengan Prangkat Smartphone itu menggunakan Kabel USB untuk Debuging Aplikasi Android.

Ada beberapa khasus yg gw alami coding pake kabel USB:,
1. Port USB gw terbatas.
2. Kabel USB Rusak.
3. Ribet sering cabut - colok hp.

tapi itu semua bukan masalah buat gw...  tapi gw juga mau yang lebih efisien dari penggunaan USB, akhirnya gw coba Debug lewat Wifi atau ADB Wifi, dan ini menurut gw lebih baik.

di bahan ini cara yg gw lakuin untuk setting dan koneksi komputer ke hp untuk debuging.

* pastikan komputer sudah terinstall android studio
* pastikan Komputer dan Smartphone terhubung dalam satu jaringan Wifi.

STEP 1

Hubungkan Smartphone ke Komputer menggunakan Kabel USB.

STEP 2

Buka Terminal kemudian direct ke  folder penyimpanan abd file.

1
2
3
4
5
$ cd /Users/macbookpro/Library/Android/sdk/platform-tools
 <enter>

STEP 3

Kemudian lanjutkan dengan command berikut untuk memastikan Device/smartphone terhubung dengan komputer.


1
2
3
4
5
$ adb usb
restarting in USB mode
$ adb devices
List of devices attached
ZX1D63HX9R  device

STEP 4

Restart adb in tcpip mode dengan  command berikut:
1
2
$ adb tcpip 5556
restarting in TCP mode port: 5556

STEP 5

Cari IP Address smartphone kamu yang terhubung wifi, cara cek nya:
  • Go to Settings -> About phone/tablet -> Status -> IP address.
  • Go to the list of Wi-fi networks available. The one to which you’re connected, tap on that and get to know your IP.
Jika sudah mengetahui IP Smarphone kamu, lajutkan dengan Command berikut untuk menghubungkan Smarphone kamu Ke Komputer menggunakan IP Address
1
2
3
4
5
6
$ adb connect 192.168.0.102:5556
already connected to 192.168.0.102:5556
$ adb devices
List of devices attached
ZX1D63HX9R  device
192.168.0.102:5556  device


pada List Device ada 2, ZX1D63HX9R  device dan 192.168.0.102:5556  device,

silahkan anda cabut Kabel usb,  itu ga apa2 karena smartphone sudah terhubung ke komputer menggunakan Wifi. kamu udah bisa Debuging / Running Project android.

Terima Kasih sudah berkunjung.