Skip to main content
MellowtelをクロスプラットフォームのElectronアプリケーションに統合し、ユーザーが未使用のインターネット帯域幅を共有して報酬やプレミアム機能を得ることができるようにします。Electron SDKはElectronが動作する場所(macOS、Windows、Linux)で動作します。
ユーザーの同意は必須です。 SDKはユーザーが明示的にオプトインした場合にのみ動作します。init()は同意が記録されていない場合、静かに早期にリターンするので、エラーなしでSDKが開始されるがトラフィックを送信しない場合、最も可能性の高い理由はユーザーがまだオプトインしていないことです。

前提条件

  • Mellowtelアカウントと設定キー(ダッシュボードから取得)。
  • メインプロセスにアクセスできるElectronアプリケーション。

インストール

1. npm認証を設定する

プロジェクトのルートディレクトリに.npmrcファイルを作成し、npmをMellowtel GitHub Packagesレジストリに向けてインストールを認証します:
YOUR_NPM_TOKENを以下のインストールトークンに置き換えます。クリックして表示し、コードブロックのコピーアイコンを使用してクリップボードにコピーします。

2. パッケージをインストールする

プロジェクトのルートからElectron SDKをインストールします:

3. コードに追加する

Electronのメインプロセスファイル(通常はmain.tsまたはmain.js)でSDKをインポートし、設定キーでインスタンス化し、ユーザーから同意を求め、その後init()を呼び出してサービスを開始します。
YOUR_CONFIGURATION_KEYをMellowtelダッシュボードからのキーに置き換えます。
各呼び出しが行うこと:
  • new Mellowtel(configurationKey, options?)はSDKをインスタンス化します。現在利用可能な唯一のオプションはdisableLogsで、デフォルトはtrueです。統合中はfalseに設定して、ターミナルで接続状態とリクエスト活動を確認できるようにします。
  • requestConsent(window, incentive)は、渡したBrowserWindowにアンカーされたネイティブElectronメッセージボックスをレンダリングします。第2引数はダイアログの目立つ見出し(例:“3ヶ月無料をゲット”)で、Mellowtelが何をするかの固定説明の上に表示されます。ユーザーが受け入れた場合はtrue、拒否またはダイアログを閉じた場合はfalse、すでに同意が記録されている場合はundefinedを返します。SDKはオプトインの決定を自動的に保持するため、その後にoptIn()を呼び出す必要はありません。
  • init()configurationKeyが空の場合のみスローします。ユーザーがオプトインしていない場合、ログを記録して静かにリターンします。そうでなければ、MellowtelのバックエンドにWebSocketを開きます。この呼び出しはレンダラーUIに対してブロックしないため、接続が確立されている間もウィンドウは応答性を保ちます。

システムダイアログの中断を防ぐ(推奨)

SDKには、システムダイアログ(オートフィルポップアップ、翻訳バー、NTLM / Kerberos認証プロンプト、パスワードマネージャーの統合、メディアオーバーレイ、初回起動ダイアログ)を抑制するためのElectronコマンドラインフラグを設定するオプションのヘルパーsetupMellowtelApp()が付属しています。これらは、Mellowtelの隠れたウィンドウがバックグラウンドでリクエストを処理する際にユーザーを中断させる可能性があります。 メインプロセスファイルのトップで、app.whenReady()の前に呼び出し、@mellowtel-inc/mellowtel-electronからのデフォルトエクスポートと一緒にインポートします。公式の使用法については上流のREADMEを参照してください。

ユーザーの同意

同意ダイアログを表示することは必須です。init()を呼び出す前にユーザーが明示的にオプトインできるようにし、いつでもオプトイン状態を管理できる方法を提供する必要があります。
同意を処理するための2つの方法があります:
  1. 組み込みのネイティブダイアログを使用する requestConsent(window, incentive)を通じて。これは最速の方法で、上記のスニペットが示しています。ネイティブのElectron dialog.showMessageBoxをレンダリングし、インセンティブのコピーを見出しとして使用し、ユーザーの決定を自動的に保持します。
  2. 独自の同意UIを構築する optIn(), optOut(), getOptInStatus()を通じてSDKを操作します。カスタムブランディング、より豊かな説明、ネイティブダイアログが提供する以上のローカリゼーションを望む場合に使用します。

同意ダイアログに含めるべき内容

1

Mellowtelが何をするかを説明する

簡単な言葉で説明します。例:“このアプリはMellowtelを使用して未使用のインターネット帯域幅を共有します。その見返りとして、[特典/機能]を得ることができます。設定でいつでもオプトアウトできます。”
2

ユーザーに明確な選択肢を与える

明確な承諾と拒否のオプションを含めます。
3

ポリシーへのリンクを含める

利用規約プライバシーポリシーへのリンクを含めます。

後でユーザーが同意を変更できるようにする

MellowtelはshowConsentSettings(window)を通じて組み込みの設定ダイアログを提供します。これは、現在の状態に一致するオプトイン/オプトアウトボタンを持つネイティブダイアログをレンダリングし、ユーザーが切り替えたときに内部的にoptIn()またはoptOut()を呼び出します。アプリのメニュー項目や設定ボタンに接続して、ユーザーが選択を再訪できるようにします。 独自の設定画面を構築したい場合は、getOptInStatus()を呼び出して現在の状態を読み取り、optIn() / optOut()を呼び出して変更します。

メソッドリファレンス

Mellowtelクラスは以下のパブリックメソッドを公開しています。すべて、new Mellowtel(configurationKey, options?)で作成したインスタンスで利用可能です。 ライフサイクル
  • init(): Promise<void>は、ユーザーがオプトインしている場合にサービスを開始し、そうでない場合は静かに早期にリターンします。設定キーが空の場合のみスローします。
  • requestConsent(window: BrowserWindow, incentive: string): Promise<boolean | undefined>は、組み込みのネイティブ同意ダイアログを表示し、結果を保持します。承諾時にtrue、拒否または閉じた場合にfalse、すでに同意が与えられている場合にundefinedを返します。
  • showConsentSettings(window: BrowserWindow): Promise<void>は、組み込みの同意管理ダイアログを表示します。ユーザーが選択を切り替えたときに、SDKは内部的にオプトイン/オプトアウトの遷移を処理します。
手動オプトイン制御
  • optIn(): Promise<void>は、ダイアログを表示せずにユーザーをオプトインとしてフラグします。独自のUIを通じて同意を収集した後にのみ使用します。
  • optOut(): Promise<void>は、ユーザーをオプトアウトとしてフラグし、アクティブなWebSocket接続を閉じます。
  • getOptInStatus(): boolean | undefinedは、現在のオプトイン状態を返します。ユーザーが選択をしたことがない場合はundefinedを返します。
  • getNodeId(): stringは、このインストールのMellowtelノード識別子を返します。サポートチケットを提出する際に便利です。
リクエストカウンター リクエスト数はelectron-storeを通じてローカルに保持され、アプリの再起動後も持続します。ユーザーにオプトインの影響を示したい場合は、独自のUIで表示します。
  • getTotalRequestCount(): numberは、インストール以来処理された総リクエスト数を返します。
  • getDailyRequestCount(): numberは、今日処理されたリクエスト数を返します。
  • getRequestCountForDate(date: string): numberは、特定の日付YYYY-MM-DDのカウントを返します。
  • getDailyRequestsHistory(): { [date: string]: number }は、すべての日別カウントをマップとして返します。
  • getRequestCountsInRange(startDate: string, endDate: string): { [date: string]: number }は、日付範囲のカウントを返します。
  • getRequestCounts(): { total: number; daily: number; dailyHistory: { [date: string]: number } }は、3つのカウンターすべてを1回の呼び出しで返します。

シャットダウンとライフサイクル

Electron SDKは独自のbefore-quitまたはwill-quitハンドラを登録しません。Electronプロセスが終了すると、バックグラウンドのWebSocket接続も一緒に終了し、明示的なクリーンアップは不要です。 セッション中にMellowtelを切断したい場合(例えば、アプリ内で「一時停止」設定をユーザーが切り替えたとき)、optOut()を呼び出します。これにより、オプトインフラグがクリアされ、アクティブな接続が閉じられます。再接続するには、optIn()init()を続けて呼び出します。

同意の持続性

オプトイン状態は、プラットフォームデフォルトのelectron-store設定パスに保存されます:
  • macOS: ~/Library/Application Support/<YourAppName>/config.json
  • Windows: %APPDATA%\<YourAppName>\config.json
  • Linux: ~/.config/<YourAppName>/config.json
状態はアプリの更新後も持続します。アプリをアンインストールしても、アンインストーラーがアプリの設定ディレクトリを明示的に削除しない限り、自動的にはクリアされません。

トラブルシューティング

  1. .npmrcがプロジェクトのルートにあり、package.jsonの隣にあることを確認します。
  2. トークンに前後の空白がないことを確認します。
  3. npmキャッシュをクリアし、npm cache clean --forceを実行した後にnpm installを再試行します。
  1. .npmrc内のトークンが正しくアクティブであることを確認します。不明な場合は、info@mellowtel.comから新しいトークンをリクエストします。
  2. @mellowtel-inc:registry行が存在し、https://npm.pkg.github.com/を指していることを確認します。
  1. app.whenReady()が解決された後に、有効で破棄されていないBrowserWindow参照でrequestConsentを呼び出していることを確認します。
  2. setupMellowtelApp()を使用する場合は、app.whenReady()前に呼び出していることを確認します。
これは設計によるものです。ユーザーがオプトインしていない場合、init()は静かに早期にリターンします。getOptInStatus()を確認してください。undefinedまたはfalseを返す場合は、まずrequestConsentを実行します。内部の「ユーザーがオプトインしていない」ログは、disableLogsがデフォルトのままの場合には抑制されるため(下記「ログが静か」参照)、ターミナルはフラグを反転するまでどちらの信号も与えません。
disableLogsコンストラクタオプションはデフォルトでtrueです。統合中は、接続状態とリクエスト活動をターミナルに表示するために、コンストラクタの第2引数として{ disableLogs: false }を渡します。これは「オプトインしていない」静かなノーオペ(上記参照)と実際の接続失敗を区別する最速の方法でもあります。

完了までの推定時間:10〜15分。 ヘルプが必要な場合やフィードバックがある場合は、info@mellowtel.comまでご連絡いただくか、Discordコミュニティに参加してください。