Redirect App solusi terbaik saat aplikasi di suspend

بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيم
Hallo om pengguna Source Code Aliendroid, Pernah tidak merasa nyesek saat aplikasi yang sedang naik daun, banyak downlaod, iklan cpm besar dan tiba-tiba aplikasi kita di suspend oleh google. Sakit sangat! Selama ini solusi yang sering dilakukan adalah melakukan banding tapi kemungkinan aplikasi dikembalikan itu 50:50 tergantung dari pelanggaran. Atau jika tidak dikembalikan, biasanya sang developer upload aplikasi baru di akun gdev yang sama/beda.
Upload aplikasi baru memang solusi, akan tetapi kita perlu promosi ulang untuk mendapatkan downloader yang sudah pasti memakan waktu. Dari pengalaman kami dan permintaan pengguna jasa reskin aliendroid, akhirnya kami membuat metode dengan nama redirect App. Redirect App berfungsi untuk melakukan pengalihan link dan mengunci aplikasi yang sudah di suspend. Jadi jika ada pengguna 10.000 di aplikasi kita dan aplikasi di suspend, kita bisa melakukan pengalihan ke aplikasi baru kita dan aplikasi akan terkunci. Jadi mau tidak mau pengguna akan download ulang aplikasi (jika aplikasinya memang layak untuk di downlaod ulang).
Untuk melakukan redirect, kita membutuhkan Json sebagai penyimpan link dan kondisi saat suspend, serta libs Volley untuk memanggil rest Api Json ke aplikasi yang dibuat. Silahkan buat aplikasi daru dengan mempersiapkan 2 layout (acitivty_main.xml, activity_splash.xml) dan 2 activity (MainActivity.java dan SplashActivity.java).
build.gradle : Module
plugins { id 'com.android.application' } android { compileSdkVersion 30 buildToolsVersion "30.0.2" defaultConfig { applicationId "com.aliendroid.latihanredirectapp" minSdkVersion 21 targetSdkVersion 30 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' testImplementation 'junit:junit:4.13.1' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' implementation 'com.android.volley:volley:1.1.1' }
splash_activity.xml
SplashActivity.java
package com.aliendroid.latihanredirectapp; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Bundle; import android.os.CountDownTimer; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import com.android.volley.Request; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.StringRequest; import com.android.volley.toolbox.Volley; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; public class SplashActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); if (checkConnectivity()){ loadUrlData(); } new CountDownTimer(5000, 1000) { @Override public void onFinish() { Intent intent = new Intent(getBaseContext(), MainActivity.class); startActivity(intent); finish(); } @Override public void onTick(long millisUntilFinished) { } }.start(); } private void loadUrlData() { final ProgressDialog progressDialog = new ProgressDialog(SplashActivity.this); progressDialog.setMessage("Loading..."); progressDialog.show(); StringRequest stringRequest = new StringRequest(Request.Method.GET, MainActivity.URL_DATA, new Response.Listener() { @Override public void onResponse(String response) { progressDialog.dismiss(); try { JSONObject jsonObject = new JSONObject(response); JSONArray array = jsonObject.getJSONArray("Redirect"); for (int i = 0; i < array.length(); i++){ JSONObject c = array.getJSONObject(i); MainActivity.STATUS = c.getString("status"); MainActivity.LINK = c.getString("link"); } } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Toast.makeText(SplashActivity.this, "Error" + error.toString(), Toast.LENGTH_SHORT).show(); } }); RequestQueue requestQueue = Volley.newRequestQueue(SplashActivity.this); requestQueue.add(stringRequest); } private boolean checkConnectivity() { ConnectivityManager connectivityManager = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info = connectivityManager.getActiveNetworkInfo(); if ((info == null || !info.isConnected() || !info.isAvailable())) { return false; } else { return true; } } }
activity_main.xml
MainActivity.java
package com.aliendroid.latihanredirectapp; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; public class MainActivity extends AppCompatActivity { public static String URL_DATA = "http://webanda.com/inifile.json"; public static String LINK = "https://play.google.com/store/apps/details?id"; public static String STATUS = "0"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (STATUS.equals("1")) { String str = LINK; startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(str))); finish(); } } }
SplashActivity.java diperlukan sebagai media load data dari json sebelum data dikirm ke MainAcvtivity.java. Baris code public static String STATUS = "0"; adalah fungsi dari redirect, yang jika di ubah menjadi angka "1" maka akan menutup aplikasi dan mengarahkan ke link aplikasi baru dengan bantuan code public static String LINK = "https://play.google.com/store/apps/details?id". Kedua baris code ini akan berfungsi jika menggunakan Json secara online. Untuk itu anda wajib memiliki hosting untuk menyimpan json, atau bisa menggunakan media penyimpan gratis seperti archive.org, google site, dll.
Silahkan upload file redirect.json yang telah disediakan oleh penulis. Secara default gunakan "status": "0" jika aplikasi masih live, dan "status": "1" jika aplikasi anda di suspend, maka aplikai akan mati dan melakukan redirect ke link aplikasi baru. Lalu isi "link": "https://play.google.com/store/apps/details?id=" dengan link aplikasi baru anda.
redirect.json
"Redirect": [
{
"status": "0",
"link": "https://play.google.com/store/apps/details?id="
}
]
}
Sampai tahap ini pembuatan redirect app sudah selesai, selanjutnya silahkan edit bagian AndroidManifest.xml untuk konfigurasi activity awal yang muncul setelah icon di klik di Home Android.
AndroidManifest.xml
android:networkSecurityConfig="@xml/network_config" android:usesCleartextTraffic="true" android:theme="@style/Theme.LatihanRedirectApp">
Pada bagian manifest, penulis menambahkan code android:usesCleartextTraffic="true" dan android:networkSecurityConfig="@xml/network_config", kedua code ini berfungsi untuk konfigurasi Android 10 yang tidak melakukan load pada json. Silahkan anda buat folder baru dengan nama xml dengan hirarki res-xml-network_config.xml
network_config.xml
Dan tutorial pun selesai, jika anda belum punya hosting silahkan uji coba secara offline dengan cara mengubah public static String STATUS = "1". Run dan lihat hasilnya, aplikasi akan close dan melakukan redirect ke link yang anda siapkan.
Pesan Hosting Tanpa Domain
Bagi pembaca yang tidak memilik hosting dan ingin sewa tanpa beli domain, silahkan orde di https://cloud.aliendro.id/Aliencloud.
Ali Maruf
SALUT sama sampean om.. walaupun sampean jualan sc tp, sampean gak pelit berbagi yg baca comment ini pasti taulah kenapa?
3 months ago