先日、rutrackerロックをバイパスするアプリケーションを作成しましたが、さまざまな理由でGoogleから2回ハングアップしました。 これは非常に動揺し、疑問が生じました-何をすべきか? ハブを検索したところ、非常に多くの人がそのような問題を抱えていたことが判明しました(1、2、3、4 ...数千)。
また、禁止に加えて、アプリケーションがGoogle Playの「オーバーボード」である理由は他にもたくさんあります。たとえば、会社内、友人、または別のサークルでのみ使用する場合です。 また、アプリケーション自体がアプリケーションインストーラーである場合など、定義上、アプリケーションをGoogle Playにアップロードできない可能性もあります。
私はこのトピックに関する完成した記事を見つけられなかったので、それを理解して自分の記事を書くのは良い決断だと思いました。 したがって、2つの基本的なオプションしかありません。
1.代替アプリケーションストアを使用します
ここはかなりリッチです。 Amazon App Shop、Samsung Apps、Yandex.Store、blackmart、謙虚なバンドル、F-Droid ...一般的には悪くありません。 それらのうち、私は今のところYandex.Storeを試しただけです。 5分でアプリケーションを登録して公開することが判明しました-既に利用可能です。 確かに、当惑は、Yandex.Storeにアプリケーションをインストールするためのリンクを何らかの形で提供することはまったく不可能です。 たぶん私は盲目ですが、「共有」ボタンはそこにありません。 まあ、ウェブインターフェースはありません。ただモバイルです。 ところで、Yandexの代表者への質問-Yandex.Storeはまだ生きていますか? Twitterの最後の投稿は2014年に遡ります。
長所:
- Google Playで慣れ親しんでいるいくつかの機能の存在-自動更新、統計、請求など(これらのすべてがもちろん利用できるわけではありません)。
- 少なくとも一部の出版社の権限は、アプリケーションがGoogle Playにあった場合よりも悪いですが、何もないよりはましです。
- 個々の機能-たとえば、F-Droidはオープンソースアプリケーションのみを公開します。
短所:
- 画像の損失。 すべてのユーザーは、アプリケーションがGoogle Playからダウンロードする必要があることに慣れています。 彼がそこにいなければ、何かがおかしい。 たとえば、Google PlayにはYandex.Storeはありませんが。 そして、あなたは非常に愚かな方法でそれをダウンロードする必要があります...
- ユーザーは、特定の「左」のアプリケーションストアをインストールする必要があります。 Androidの登場以来、Googleプレイ以外に何もありませんでした。インストールするつもりはありませんでした。 デバイスを操作するためのフル機能を備えた別の「ビッグブラザー」を自分でインストールするのはかなり馬鹿げています。
- それらのどれもクラッシュ情報を持たないようです。 さらに、課金を含むGoogle Playのその他の機能。
2.独立した決定
どんなに恐ろしく聞こえても、実際、ここでは通常のデスクトップソフトウェアの類似物になります。 プログラム自体は、いつどのように更新するかを知っており、それについて話し、支払いオプションと収益化を統合します。 あなたは広告と宣伝に従事しています。 ホラー、ホラー! しかし、実際、私たちはただ甘やかされました。 あなたは正しい道を見つける必要があります。 たとえば、テーマ別のブログやフォーラムでアプリケーションを宣伝できます-w3bsit3-dns.comを含め、対象ユーザーの規模が非常に良い場合。 または、ハブで
ちなみに、アプリケーションがGoogle Playで正常に公開された場合でも、安全にプレイし、少なくともその中に独自の更新アルゴリズムを作成することは理にかなっています。たとえば、アプリケーションが長時間更新されていない場合にアクティブになります。 サーバーの禁止を確認するか、Google Playで直接確認します。 それ以外の場合、しばらく禁止されていると、ユーザーはアプリケーションを更新できません。 また、バックアップオプションがある場合-損傷は著しく少なくなります。
長所
アプリケーションをブロックすることはほとんど不可能です-更新と情報を保持するリソースと一緒にのみ。
短所
- できることはすべて、手動で行う必要があります。
- 画像の損失。これについては、前述のとおりです。 奇妙なことに、特定のアプリケーションストアを使用する場合よりも少ない可能性があります。
だからあなたは何をしなければなりません:
ダウンロード用のアプリケーションのホスティング
実際、これは、APKを信頼できる場所に置く必要があることを意味するだけです。 それらの数はそれほど多くありません-同じw3bsit3-dns.comを使用できます。リリースをgithubに直接配置したり、サイトに配置したりできます...多くのオプション。
エラーデバッグ
はい、私たちは良いことに慣れています-Googleはエラーをキャッチし、その場所、ユーザーのデバイスなどについてすべてを伝えます。 しかし... ...それを自分で実現するのに問題はありません。 最も単純なオプションとして-すべての実行をキャッチし、HTTPまたはメールを介してサーバーに送信します。
統計収集
残念ながら、私はアプリケーション統計に興味がありませんでしたが、少なくともダウンロード統計を実装する必要があることは明らかです。
複雑なライブラリ
実際、Google Playが提供するすべての複雑で良いことを忘れなければなりません。 ただし、わずかではありますが、同じことがアプリケーションストアにも当てはまります。
更新する
更新には基本的に3つのオプションがあります。
- スーパーユーザー権限での自動更新。 これはかなり馬鹿げていますが、理解できます-詳細に検討しません。
- 自動ダウンロード後の手動更新。 悪くはありませんが、データを書き込む権限が必要です。 アプリケーションで計画されていない場合、追加のアクセス許可を設定するのは悪です。 サードパーティのソースからプログラムをインストールするためのユーザー許可が必要です。
- リンクをたどるときの手動更新。 ただし、単純なオプションでは、ユーザーがAPKファイルをダウンロードして開く必要があります。 まあ、2番目のオプションと同様に、サードパーティのソースからプログラムをインストールするユーザーの許可が必要です。
それがいかに簡単かを示すために、3番目のオプションの基本的な実装を示します。
申請のために1時間でやった。
1.アプリケーションの現在のバージョンをどこかに追加します。 build.gradleのGithubのソースに直接配置します。
2.アプリケーションのリリースをどこかに公開します。 githubにも次の形式であります
3.実際の更新アルゴリズムを作成します。
3.1 MainActivity.OnCreateで検証呼び出しを追加します。
3.2確認する簡単なクラスを作成します。
3.3ユーザーがこのリリースを無視することにした情報を保存するクラスを追加します。
3.4ユーザーに遷移提案のダイアログを表示する関数を追加します。
// releaseVersionCode 5
2.アプリケーションのリリースをどこかに公開します。 githubにも次の形式であります
String url="https://github.com/jehy/rutracker-free/releases/download/" + version+"/app-release.apk";
3.実際の更新アルゴリズムを作成します。
3.1 MainActivity.OnCreateで検証呼び出しを追加します。
new Updater().execute(this);
3.2確認する簡単なクラスを作成します。
class Updater extends AsyncTask<MainActivity, Void, Void> { private Exception exception; protected Void doInBackground(MainActivity... activity) { checkUpdates(activity[0]); return null; } Integer getLastAppVersion() { try { // Create a URL for the desired page URL url = new URL("https://raw.githubusercontent.com/jehy/rutracker-free/master/app/build.gradle"); // Read all the text returned by the server BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); String str; while ((str = in.readLine()) != null) { int f = str.indexOf("releaseVersionCode"); if (f != -1) { str = str.substring(f + ("releaseVersionCode").length()).trim(); Log.d("Rutracker free", "Last release version: " + str); return Integer.parseInt(str); } } in.close(); Log.d("Rutracker free", "Failed to get last release version!"); } catch (Exception e) { Log.d("Rutracker free", "Failed to get last release version:"); e.printStackTrace(); } return null; } void checkUpdates(final MainActivity activity) { final Integer lastAppVersion = getLastAppVersion(); if (lastAppVersion == null) return; if (lastAppVersion <= BuildConfig.VERSION_CODE) { Log.d("Rutracker free", "App version is okay, skipping update"); return; } String li = SettingsManager.get(activity, "LastIgnoredUpdateVersion"); if (li != null) { Integer liInt = Integer.parseInt(li); if (liInt >= lastAppVersion) return; } activity.Update(lastAppVersion); } }
3.3ユーザーがこのリリースを無視することにした情報を保存するクラスを追加します。
public class SettingsManager { static String get(Context mContext, String key) { SharedPreferences settings = PreferenceManager .getDefaultSharedPreferences(mContext); String data = settings.getString(key, null); if (data == null) Log.d("SettingsManager", "No settings " + key + " is stored! "); else Log.d("SettingsManager", "Got settings " + key + " equal to " + data); return data; } @SuppressLint("CommitPrefEdits") static void put(Context mContext, String key, String value) { SharedPreferences settings = PreferenceManager .getDefaultSharedPreferences(mContext); SharedPreferences.Editor editor = settings.edit(); editor.putString(key, value); Log.d("SettingsManager", "Saved setting " + key + " equal to " + value); editor.commit(); } }
3.4ユーザーに遷移提案のダイアログを表示する関数を追加します。
public void Update(final Integer lastAppVersion) { runOnUiThread(new Runnable() { @Override public void run() { AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setMessage(" rutracker free " + lastAppVersion + " - ? " + " - APK ," +" .") .setCancelable(true) .setPositiveButton("", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { Intent intent = new Intent(Intent.ACTION_VIEW); String apkUrl = "https://github.com/jehy/rutracker-free/releases/download/" + lastAppVersion + "/app-release.apk"; //intent.setDataAndType(Uri.parse(apkUrl), "application/vnd.android.package-archive"); intent.setData(Uri.parse(apkUrl)); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); dialog.dismiss(); } }) .setNegativeButton("", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { SettingsManager.put(MainActivity.this, "LastIgnoredUpdateVersion", lastAppVersion.toString()); dialog.cancel(); } }); AlertDialog alert = builder.create(); alert.show(); } }); }
出来上がり! これで、更新されたアプリケーションができました。 また、ユーザーが持っているGoogle Playまたは別のアプリケーションストアに表示される場合は、そこからも更新できます。
結論
一番下の行は何ですか-私はGoogle Playなしであなたが生きることができると思います。 そして、それが可能であるだけでなく、それが必要です、市場に独占者を持つことの欠点は明らかです。 含む、少なくともいくつかの有意義な競争があった場合-おそらく、空のテンプレートを購読解除するのではなく、技術サポートとのコミュニケーションが少なくとも適切なものになるでしょう。
また、読者から意見を聞きたいです。
- そして、アプリケーションの禁止の問題をどのように解決しますか?
- 別のアプリストアを使用していますか?
- apkを使用して他のサイトからアプリケーションをインストールしますか?
- 5年後にどのようにアプリケーションをデバイスにインストールしますか?