エディタのアドオン承認

多くの Apps Script ベースのアプリの認証は、 スクリプト プロジェクトは、権限が不足している場合に、 必要ありません。

この認証モデルでは、 エディタのアドオン: 複雑になりますが、その理由はいくつかあります。

  • ユーザーがファイルを作成すると、すべてのアドオンがインストールされます。 [拡張機能] メニューに表示されます。 ユーザーがまだそのアドオンを承認していない場合。

  • これらのアドオンは、 共同編集者と共有できる Google ドライブ。利用していない共同編集者 エディタのアドオンがインストールされていて、ドキュメントに表示される 場所を記録します。

  • エディタ アドオンは自動的に onOpen() を実行します ドキュメントを開いたときに行われます。

ユーザーデータを保護するために、一部のサービス onOpen() には公開できません。このガイドは、Google Cloud でデプロイされている いつ、どのようなことができるのかを考えます。

認可モデル

エディタのアドオンの承認モードは、 状態は誰がそれを使用しているか、そのアドオンをインストールしたユーザー、 共有することもできます。

エディタのアドオンのステータス

[拡張機能] メニューの [エディタ アドオン] は、 インストール、有効化、またはその両方です。

  • 特定の特定の環境にアドオンがインストールされている場合 ユーザーまたは管理者が Google データへのアクセスを承認します。
  • アドオンがドキュメント、フォーム、デバイスで有効になっている プレゼンテーションやスプレッドシートで使用できるようになります。
  • 複数のユーザーがファイルを共同編集していて、そのうちの 1 人が 1 人のユーザーにインストールされていること、かつ 有効になっている

次の表は、「インストール済み」と「有効」の違いをまとめたものです。 注: スクリプトをアドオンとしてテストする この状態のいずれか、または両方の状態でテストを実行できます。

インストール済み 有効
適用対象 ユーザー ドキュメント、フォーム、プレゼンテーション、スプレッドシート
原因 ストアからアドオンを取得する 使用中にストアからアドオンを取得する そのドキュメント、フォーム、プレゼンテーション、スプレッドシートに
以前にインストールしたアドオンを ドキュメント、フォーム、プレゼンテーション、スプレッドシート
メニューの表示対象 そのユーザーのみが、すべてのドキュメント、フォーム、プレゼンテーション、 スプレッドシートを開いて そのドキュメント、フォーム、プレゼンテーション、 スプレッドシート
onOpen() の認証モード AuthMode.NONE
(ただし、有効になっている場合は除きます。 AuthMode.LIMITED)
AuthMode.LIMITED

認証モード

エディタ アドオンの onOpen() 関数が実行される ユーザーがドキュメント、フォーム、プレゼンテーション、スプレッドシートを開いたときに自動的に設定されるように設定できます。 ユーザーの個人情報をApps Script では、 onOpen() 関数では実行できます。エディタ アドオンの状態 onOpen() 関数を実行する認証モードを決定します。

ファイル内でエディタ アドオンが有効になっている場合は、 フォーム、プレゼンテーション、スプレッドシートがあり、onOpen() の実行場所 AuthMode.LIMITED。アドオンが有効ではなく、 インストールのみの場合、onOpen()AuthMode.NONE で実行されます。

AuthMode.NONE で、アドオンが特定の ユーザーが Google Cloud でアドオンを操作できるようになるまで、 カスタム関数のクリックや実行などですお使いの アドオンが onOpen() でこれらのサービスを使用しようとした場合に、 onInstall()(グローバル スコープ)の場合、権限が失敗し、 メニューの入力や停止などの操作を行えます。サポートされているオプションはヘルプのみです。

制限付きサービスの呼び出しを実行するには、AuthMode.FULL 認証を使用する必要があります。 モードです。メニュー オプションのクリックや このモードでのみ実行されます。コードを AuthMode.FULL モードで実行すると、 ユーザーが承認したすべてのスコープを使用できます。

Apps Script は認証モードを渡します Apps Script の authMode プロパティとして指定する イベント パラメータe;価値 e.authMode は Apps Script の定数に対応します。 ScriptApp.AuthMode 列挙値。

認証モードは、Apps Script のすべての実行方法に適用されます。 スクリプト エディタ、メニュー項目、Apps Script からの実行など、 google.script.run 呼び出し。ただし、 e.authMode プロパティは、スクリプトが結果として実行された場合にのみ検査できます。 トリガーonOpen()onEdit() など) または onInstall()カスタム関数 Google スプレッドシートでは、独自の認証モードである AuthMode.CUSTOM_FUNCTION を使用します。 これは LIMITED に似ていますが、制限が少し異なります。すべての役職向け その他のケースでは、以下で説明するように、スクリプトは AuthMode.FULL で実行されます。 表します

NONE LIMITED CUSTOM_FUNCTION FULL
発生期間 onOpen()(ユーザーが ドキュメント、フォーム、 プレゼンテーション、スプレッドシートなど) onOpen()(上記以外の時間帯)
onEdit()(スプレッドシートのみ)
カスタム関数 上記以外のすべての時間帯:
インストール可能なトリガー
onInstall()
google.script.run
ユーザーデータへのアクセス 言語 / 地域のみ 言語 / 地域のみ 言語 / 地域のみ
ドキュメント、フォーム、プレゼンテーション、スプレッドシートへのアクセス いいえ ○ - 読み取り専用
ユーザー インターフェースへのアクセス メニュー アイテムを追加する メニュー アイテムを追加する いいえ
Properties へのアクセス いいえ
JdbcUrlFetch へのアクセス いいえ ×
その他のサービス Logger
Utilities
ユーザーデータにアクセスしないサービス ユーザーデータにアクセスしないサービス すべてのサービス

エディタ アドオンの承認ライフサイクル

現在のユーザーにアドオンがインストールされたとき 有効になっていない場合は、 アドオンが読み込まれるドキュメント、フォーム、プレゼンテーション、 そのファイルを開いたときに テキストやスプレッドシートを表示できますアドオンは [Extensions] メニューに一覧表示され、 シンプルなトリガー onInstall() onOpen()onEdit()。ユーザーが 拡張機能のメニュー項目です。実行します。

エディタのアドオンがインストールされました

エディタ アドオンをストアからインストールすると、 onInstall() 関数は AuthMode.FULL で実行されます。この認可モードでは、 複雑な設定ルーティンを実行できます。また、 メニュー項目を作成するには onInstall() を使用します。ドキュメント、フォーム、プレゼンテーション、 またはスプレッドシートがすでに開いていて、onOpen() 関数が実行されていません。 次のサンプルは、onOpen() 関数を呼び出す方法を示しています。 onInstall() 関数から:

function onInstall(e) {
  onOpen(e);
  // Perform additional setup as needed.
}

エディタのアドオンが開きます

ドキュメント、フォーム、プレゼンテーション、スプレッドシートを開くと、 現在のユーザーがインストールしたエディタ アドオン、または そのファイルで共同編集者が有効にしていることを確認し、 それぞれの onOpen() 関数を使用します。onOpen() を行う認証モード 適用されるかどうかは、アドオンが インストールまたは有効になっている

基本メニューのみを作成するアドオンの場合、このモードは 関係ありません。次のサンプルは、基本的な onOpen() 関数を示しています。

function onOpen(e) {
  SpreadsheetApp.getUi().createAddonMenu() // Or DocumentApp.
      .addItem('Insert chart', 'insertChart')
      .addItem('Update charts', 'updateCharts')
      .addToUi();
}

保存されている Apps Script に基づいて動的メニュー項目を追加するため properties: 行の内容を読み取り、 他の高度なタスクを実行するには、 認証モードを特定して適切に処理する必要があります。

次のサンプルは、高度な onOpen() 関数を示しています。この関数は、 認可モードに応じてアクションを制御します。

function onOpen(e) {
  var menu = SpreadsheetApp.getUi().createAddonMenu(); // Or DocumentApp.
  if (e && e.authMode == ScriptApp.AuthMode.NONE) {
    // Add a normal menu item (works in all authorization modes).
    menu.addItem('Start workflow', 'startWorkflow');
  } else {
    // Add a menu item based on properties (doesn't work in AuthMode.NONE).
    var properties = PropertiesService.getDocumentProperties();
    var workflowStarted = properties.getProperty('workflowStarted');
    if (workflowStarted) {
      menu.addItem('Check workflow status', 'checkWorkflow');
    } else {
      menu.addItem('Start workflow', 'startWorkflow');
    }
  }
  menu.addToUi();
}

注: アドオンは、 AuthMode.LIMITEDメニュー項目を使用できます を使用してサイドバーとダイアログを開くことができます。これらは AuthMode.FULL で実行されるためです。

ユーザーがエディタのアドオンを実行した

ユーザーが [拡張機能] メニュー項目をクリックすると、 Apps Script ではまず、ユーザーがソフトウェアをインストールしたかどうかを確認します。 アドオン、 ない場合は、同意を求めるメッセージが表示されます。ユーザーがサービス アカウントを 追加する場合、このスクリプトは、 AuthMode.FULL のメニュー項目に対応します。「 アドオンが有効になっているドキュメント、フォーム、 プレゼンテーション、スプレッドシートを作成できます。

アドオン メニューが表示されない問題のトラブルシューティング

コードが入力されている場合、アドオン メニューがレンダリングされないことがあります 認証モードが正しく管理されていません。例:

  • アドオンが Apps Script を実行しようとする 現在の認証モードでサポートされていないサービス アカウントが使用されます。

  • アドオンがユーザーより前にサービス呼び出しを実行しようとする やり取りできます。

権限エラーの原因となっているサービス呼び出しを AuthMode.NONE さん、次の操作をお試しください。

  1. アドオンの Apps Script プロジェクトを開き、 onOpen() 関数を使用します。
  2. onOpen() 関数で Apps Script への言及を検索する サービスやオブジェクトに関連する PropertiesServiceSpreadsheetApp、または GmailApp
  3. UI 要素の作成以外の目的でサービスを使用する場合は、 コメントブロックで囲むこともできます メソッド .getUi().createMenu().addItem()、 および .addToUi()。 また、関数の外部にあるサービスを見つけて削除します。
  4. コメントまたは削除されたコード行を含む可能性のある関数を特定する 特に、生成する情報を使用するもの、 必要な関数にサービス呼び出しを移動します並べ替えまたは書き換え コードベースを更新して、前のステップで行った変更に対応できるようにします。
  5. コードを保存し、テストデプロイを作成します。

    テストデプロイを作成する場合は、[Config] フィールドが 現在のユーザーにインストールされており、かつ [Config] ボックスの下のテキストに [Installed for current user] と表示されていること。 AuthMode.None でのテスト

  6. テストデプロイを起動し、[拡張機能] メニューを開きます。

  7. すべてのメニュー項目が表示される場合、問題は解決しています。 [ヘルプ] メニューしか表示されない場合は、ステップ 1 に戻ります。 サービスコールにつながらなかった可能性があります。