そこにいるインディーマック開発者への質問:
30日間のタイムトライアルを非悪意のない方法で実装するにはどうすればよいですか?月に1回設定をワイプすることは平均的なユーザーにとって問題ではないので、設定にカウンターを置くことはオプションではありません。カウンターを隠しファイルのどこかに置くと、少しおかしな話に聞こえます。ユーザーとして、アプリがランダムなファイルでハードドライブに散らばっているとき、私は嫌いです。何か案は?
この問題はcocoa-devメーリングリストで繰り返し発生し、コンセンサスの答えは常に可能な限り最も単純なことを行うことです。断固としたハッカーは、最も過剰に設計されたソリューションを除いてすべてを壊します。そして、彼らはとにかくソフトウェアにお金を払う可能性は低いです。 80/20ソリューションの場合:20%の労力で80%の効果が得られる簡単なソリューション。この場合、〜/ Library/Application Support/your.app.com /に何かを置きます。少し難読化したい場合は、ファイルに無害な名前を付けます。ユーザーデフォルトの使用も簡単です。
何をするにせよ、MACアドレスや他のハードウェアIDを使用しないでください。ネットワークのホームディレクトリを持つユーザー(ラボの共有設定など)は嫌いです。ハードウェアIDの使用は悪です。
誰かがあなたのプログラムに夢中すぎて、彼らがあなたの試用の制限を破る気があるなら、彼らに任せてください。無料のソフトウェアはあなたに何も費用をかけず、彼らの善意(そしておそらく他の人への推薦)は多くの価値があります。
最後に、人々が使いたいソフトウェアを作成し、その価値に応じて価格を決定します。あなたの価格が良い値である場合andpeople wantそれを使用するために、ほとんどの人がそれを支払います。
煩わしさが少なく、通常のユーザーが1か月ごとにアンインストールまたは購入することを回避できるものをいくつか実装することをお勧めします。
さらに、これらを構成ファイルに実装します。
タイムスタンプのロギングを行うことにより、次の回避策を回避できます。
アプリが設定ファイルなしで実行されないことを確認してください。つまり、暗号化されたシリアル番号をファイルで送信するか、シリアル番号を入力するとファイルを作成できます。シリアル番号にはすでに有効期限があるため、ユーザーはシリアル番号を再利用することもできません。
アプリが毎回サーバーに接続しようとすると、人々は腹を立てるので、私はインターネットの方法を提案しません。さらに、ユーザーの個人データをサーバーに送信しようとしていることが疑わしいかもしれません。
私が言いたいことの1つは、あなたが使用する海賊版対策技術がどれほど強力であっても、誰かがそれを破るのは当然です。あなたはそれらの人のためにあなたのアプリを作っているのではありません。あなたはあなたのソフトウェアを望んでいて、それを幸せに購入する人々のためにあなたのアプリを作っています。試用期間中にアプリケーションを煩わしくしすぎないようにして、真の顧客を失うことなく、著作権侵害対策を制限します。また、ソフトウェアがクラックされた場合、それは人気が高まっていることを意味するとも考えています。繰り返しになりますが、意見は異なる場合があり、これらの問題については説明しません。
このことを考慮。あなたのソフトウェアの潜在的なユーザーは何人いますが、次の30日間しっかりと使用するのはかゆいですか?
私ははるかに通常のケースが疑われます:ユーザーは、lifehacker.comのようなサイトでhadの問題を解決する新しいソフトウェアパッケージに遭遇します。ソフトウェアはダウンロードされ、簡単に遊んだ後、脇に置きます。おそらく、そのmp3リッピングソフトウェアと、その時点でリッピングするCDはありません。または、彼らはその日忙しいだけですが、そのソフトウェアを「すぐに」レビューするために回ります。
30日が経過します。おそらくもっと。それから、彼らはCDを購入し、ある種の「問題」に遭遇し、「ああ、私がダウンロードしたその体験版があることを覚えていますか!」もう一度どこに置いたの?」それは問題ではありません。これまで使用されていなかったため、「試用版」はタイムアウトしました。
そのバケツに落ちたソフトウェアツールの数を数えることはできません。ソフトウェアが推奨される日、lifehackerについて肯定的なレビューが表示される日は、ダウンロードしてインストールしたプログラムを実際に使用/分析する必要がある日ではありません。
ソフトウェアが30暦日後に期限切れになるのは悪いことです。誰かがそれをダウンロードして1回実行し、その後1か月後に評価することにしたからです。彼らが次にそれを起動するとき、1か月後、それはそれが期限切れであると言うでしょう。
私はそれを14回の起動、または120分のようなものに制限することにします。
実装に関しては、難読化された名前が付いた、ユーザーのPreferencesフォルダー内のファイル(非表示かどうか)が最適な方法のようです。ファイルはハードドライブにランダムに配置されるわけではありませんが、ユーザーはどのファイルを削除するか簡単に判断できません。
最も邪悪な方法は、ユーザーに1か月後にプログラムを削除するか、その代金を支払うよう依頼することです;)
ダウンロード時に、試用版のシリアル番号を提供してください。ユーザーがシリアル番号を入力したら、サーバーに接続して有効期限情報を取得してもらいます(追加の「テレフォンホーム」通話を防ぐためにローカルに保存および暗号化されています)。
このようにすると、有効期限がサーバーに永続的に保存されるため、30日間のウィンドウを回避するのがかなり難しくなります。キーを削除して再入力すると、アプリケーションがサーバーに再度接続し、以前と同じ有効期限をダウンロードするように設定できます。
または、WinZipと同じように実行できます(または実行するために使用しましたか?):30日間の試用版を提供し、すべての負荷で画面をポップアップして、それを使用した期間と購入へのリンクを表示します。
これは、クライアントアプリケーションの1つに対して実行しました。これはWindowsの.NETで行われたものですが、同じ原理をMACにも適用できます。
Eckesickleが述べたように、ユーザーがインターネットにアクセスできる(またはアクセスする必要がある)場合は、ホストコンピューターから一意のIDを開始日のトライアル(MACアドレスは適切なもの)で登録するWebサービスを利用できます。これにより、ユーザーは毎月自分のネットワークカードを使用しない限り、プログラムを実際にだますことはできません。
これで、ユーザーが何らかの理由でインターネットにアクセスできない場合は、ユーザーが接続するまでプログラムをシャットダウンするか、猶予期間を使用できます。このファイルは、アプリが最後に開かれた時間を記録します。インターネットにアクセスできない場合は、時間の書き込みを停止します(ユーザーがファイルが更新されていないことに気付かないように、インターネットに何かを書き込みます)。
このファイルに情報が含まれていることにユーザーが気づき、それを削除した場合(またはユーザーが持っているコピーを使用して変更した場合)は、これに対抗する方法が必要です。別の構成ファイルに他の値(常に暗号化されている)を設定して、整合性を確認できます。ユーザーがチートしようとしていることを発見した場合の対処法はあなた次第ですが、ユーザーがインターネットに接続して機能するように強制します。
プログラムにとってはやり過ぎかもしれませんが、確実に機能します。
以前は、ユーザーが自分のコンピューターにダウンロードできるエクスポートデータファイルにインストール日とさまざまな記録日を埋め込んだiOSアプリの30日間のライトエディションを提供していました。
ユーザーが安価なユーザーで、ライトエディションを再インストールしてデータを再インポートしようとした場合、ロジックは、日付の少なくとも1つが30日より古いことを認識し、アプリはインストール日をこのような最も早い日付に設定します。ファイル、レンダリングされて再び期限切れ。
完全有料版では、このロジックは存在せず、データファイルを簡単にインポートできました。
このデータ移行では人々をサポートするのが面倒でした(アプリは互いに完全にサンドボックス化されているため)。一部のユーザーは、ライトエディションで十分なので、アップグレードすることはありませんでした。
それ以来、ライトエディションの提供を中止し、フルエディションの価格を下げました。現在、潜在的な顧客は、小額を支払うか、競合するソフトウェアを見つけに行く必要があります。
全体として、それは有料ユーザーを獲得するための最良の戦略でした。
一部のハードウェアコンポーネントからUUIDを読み取り、プログラムの起動時にソフトウェアがすでに30日間インストールされているかどうかをWebサービスに対してチェックしますか?