Buka konsol

Mengirim dan Menerima Firebase Invites dari Aplikasi Android

Sebelum memulai

  1. Jika Anda belum menghubungkan aplikasi ke project Firebase, lakukanlah dari Firebase console. Saat menghubungkan aplikasi, pastikan Anda menentukan kunci penandatanganan SHA-1.
  2. Jika Anda belum mengaktifkan Firebase Dynamic Links, lakukanlah dari Firebase console dengan membuka bagian Dynamic Links, lalu menyetujui persyaratan layanan jika diminta. Karena Firebase Invites dibangun pada Firebase Dynamic Links, Anda harus mengaktifkan Firebase Dynamic Links agar dapat menggunakan Firebase Invites.
  3. Tambahkan Firebase ke project Android Anda.
  4. Tambahkan dependensi untuk Firebase Invites ke file build.gradle tingkat aplikasi:
    implementation 'com.google.firebase:firebase-invites:16.1.1'
    

Mengirim undangan

Mulailah dengan membuat Intent menggunakan class AppInviteInvitation.IntentBuilder:

Java
Android

private void onInviteClicked() {
    Intent intent = new AppInviteInvitation.IntentBuilder(getString(R.string.invitation_title))
            .setMessage(getString(R.string.invitation_message))
            .setDeepLink(Uri.parse(getString(R.string.invitation_deep_link)))
            .setCustomImage(Uri.parse(getString(R.string.invitation_custom_image)))
            .setCallToActionText(getString(R.string.invitation_cta))
            .build();
    startActivityForResult(intent, REQUEST_INVITE);
}

Kotlin
Android

private fun onInviteClicked() {
    val intent = AppInviteInvitation.IntentBuilder(getString(R.string.invitation_title))
            .setMessage(getString(R.string.invitation_message))
            .setDeepLink(Uri.parse(getString(R.string.invitation_deep_link)))
            .setCustomImage(Uri.parse(getString(R.string.invitation_custom_image)))
            .setCallToActionText(getString(R.string.invitation_cta))
            .build()
    startActivityForResult(intent, REQUEST_INVITE)
}

Menyesuaikan undangan

Saat membuat Intent undangan, Anda harus menetapkan judul dialog undangan dan pesan undangan yang akan dikirimkan. Anda juga bisa menyesuaikan gambar dan URL deep link yang dikirimkan dalam undangan, seperti pada contoh di atas, serta menetapkan HTML untuk mengirimkan undangan email lengkap, yang direkomendasikan. Lihat Firebase Invites: Praktik Terbaik.

MetodeSaluranDeskripsi
setMessage Email & SMS Menetapkan pesan default yang dikirimkan bersama undangan. Pesan ini dapat diedit oleh pengirim dalam dialog undangan. Tidak boleh melebihi 100 karakter.
setDeepLink Email & SMS Menyetel link ke dalam aplikasi Anda yang dikirim bersama undangan. Tentukan hal ini untuk berbagi konten tertentu dengan penerima, atau untuk menampilkan pengalaman kustom saat pengguna membuka aplikasi Anda dari undangan.
setCustomImage Email Menyetel URL gambar kustom untuk disertakan dalam undangan email. Gambar harus berbentuk persegi dan berukuran sekitar 600x600 piksel. Ukuran gambar tidak boleh lebih besar dari 4000x4000 piksel.
setCallToActionText Email Menetapkan teks pesan ajakan pada tombol yang dirender dalam undangan email. Tidak boleh melebihi 32 karakter.
setEmailHtmlContent Email Direkomendasikan: Menetapkan isi undangan email. Tentukan isi undangan untuk mengirimkan undangan email HTML lengkap. HTML Anda harus menyertakan string placeholder %%APPINVITE_LINK_PLACEHOLDER%%, yang akan diganti dengan URL yang dibuka penerima untuk menerima undangan. Jika Anda menetapkan pesan email kustom, metode setDescription, setCustomImage, dan setCallToActionText tidak berpengaruh.
setEmailSubject Email Harus ada jika setEmailHtmlContent digunakan. Menetapkan baris subjek undangan email.

Jika aplikasi Anda tersedia dalam versi iOS dan Anda ingin mengirim undangan yang dapat dibuka di iOS serta Android, kirimkan ID klien OAuth 2.0 dari aplikasi iOS ke setOtherPlatformsTargetApplication ketika membuat intent undangan aplikasi. ID klien untuk aplikasi iOS dapat dilihat dalam file GoogleService-Info.plist yang Anda download dari Firebase console. Misalnya:

Java
Android

Intent intent = new AppInviteInvitation.IntentBuilder(getString(R.string.invitation_title))
        // ...
        .setOtherPlatformsTargetApplication(
                AppInviteInvitation.IntentBuilder.PlatformMode.PROJECT_PLATFORM_IOS,
                IOS_APP_CLIENT_ID)
        // ...
        .build();

Kotlin
Android

val intent = AppInviteInvitation.IntentBuilder(getString(R.string.invitation_title))
        // ...
        .setOtherPlatformsTargetApplication(
                AppInviteInvitation.IntentBuilder.PlatformMode.PROJECT_PLATFORM_IOS,
                IOS_APP_CLIENT_ID)
        // ...
        .build()

Peluncuran intent AppInviteInvitation akan membuka pemilih kontak, yaitu tempat pengguna dapat memilih kontak yang akan diundang. Undangan dikirim melalui email atau SMS. Setelah pengguna memilih kontak dan mengirim undangan, aplikasi Anda menerima callback ke onActivityResult:

Java
Android

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Log.d(TAG, "onActivityResult: requestCode=" + requestCode + ", resultCode=" + resultCode);

    if (requestCode == REQUEST_INVITE) {
        if (resultCode == RESULT_OK) {
            // Get the invitation IDs of all sent messages
            String[] ids = AppInviteInvitation.getInvitationIds(resultCode, data);
            for (String id : ids) {
                Log.d(TAG, "onActivityResult: sent invitation " + id);
            }
        } else {
            // Sending failed or it was canceled, show failure message to the user
            // ...
        }
    }
}

Kotlin
Android

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    Log.d(TAG, "onActivityResult: requestCode=$requestCode, resultCode=$resultCode")

    if (requestCode == REQUEST_INVITE) {
        if (resultCode == Activity.RESULT_OK) {
            // Get the invitation IDs of all sent messages
            val ids = AppInviteInvitation.getInvitationIds(resultCode, data!!)
            for (id in ids) {
                Log.d(TAG, "onActivityResult: sent invitation $id")
            }
        } else {
            // Sending failed or it was canceled, show failure message to the user
            // ...
        }
    }
}

Menerima undangan

Saat menerima undangan dan jika belum menginstal aplikasi, pengguna dapat memilih untuk menginstal aplikasi dari Google Play Store. Selanjutnya, setelah diinstal atau jika sudah terinstal, aplikasi akan berjalan dan menerima URL ke kontennya jika Anda mengirimkannya. Untuk menerima URL ke konten aplikasi Anda, panggil metode getDynamicLink:

Java
Android

@Override
protected void onCreate(Bundle savedInstanceState) {
    // ...

    // Check for App Invite invitations and launch deep-link activity if possible.
    // Requires that an Activity is registered in AndroidManifest.xml to handle
    // deep-link URLs.
    FirebaseDynamicLinks.getInstance().getDynamicLink(getIntent())
            .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
                @Override
                public void onSuccess(PendingDynamicLinkData data) {
                    if (data == null) {
                        Log.d(TAG, "getInvitation: no data");
                        return;
                    }

                    // Get the deep link
                    Uri deepLink = data.getLink();

                    // Extract invite
                    FirebaseAppInvite invite = FirebaseAppInvite.getInvitation(data);
                    if (invite != null) {
                        String invitationId = invite.getInvitationId();
                    }

                    // Handle the deep link
                    // ...
                }
            })
            .addOnFailureListener(this, new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Log.w(TAG, "getDynamicLink:onFailure", e);
                }
            });
}

Kotlin
Android

override fun onCreate(savedInstanceState: Bundle?) {
    // ...

    // Check for App Invite invitations and launch deep-link activity if possible.
    // Requires that an Activity is registered in AndroidManifest.xml to handle
    // deep-link URLs.
    FirebaseDynamicLinks.getInstance().getDynamicLink(intent)
            .addOnSuccessListener(this, OnSuccessListener { data ->
                if (data == null) {
                    Log.d(TAG, "getInvitation: no data")
                    return@OnSuccessListener
                }

                // Get the deep link
                val deepLink = data.link

                // Extract invite
                val invite = FirebaseAppInvite.getInvitation(data)
                val invitationId = invite.invitationId

                // Handle the deep link
                // ...
            })
            .addOnFailureListener(this) { e -> Log.w(TAG, "getDynamicLink:onFailure", e) }
}

Anda harus memanggil getDynamicLink() di setiap aktivitas yang mungkin diluncurkan oleh link tersebut, meskipun link mungkin tersedia dari intent yang menggunakan getIntent().getData(). Memanggil getDynamicLink() akan mengambil link dan ID undangan, serta membersihkan data sehingga hanya akan diproses satu kali oleh aplikasi Anda.

Anda biasanya memanggil getDynamicLink() di aktivitas utama serta aktivitas apa pun yang diluncurkan oleh filter intent yang cocok dengan link tersebut.