多くの 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 へのアクセス |
いいえ | ○ | ○ | ○ |
Jdbc 、UrlFetch へのアクセス |
いいえ | × | ○ | ○ |
その他のサービス | 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
さん、次の操作をお試しください。
- アドオンの Apps Script プロジェクトを開き、
onOpen()
関数を使用します。 onOpen()
関数で Apps Script への言及を検索する サービスやオブジェクトに関連するPropertiesService
、SpreadsheetApp
、またはGmailApp
。- UI 要素の作成以外の目的でサービスを使用する場合は、
コメントブロックで囲むこともできます
メソッド
.getUi()
、.createMenu()
、.addItem()
、 および.addToUi()
。 また、関数の外部にあるサービスを見つけて削除します。 - コメントまたは削除されたコード行を含む可能性のある関数を特定する 特に、生成する情報を使用するもの、 必要な関数にサービス呼び出しを移動します並べ替えまたは書き換え コードベースを更新して、前のステップで行った変更に対応できるようにします。
コードを保存し、テストデプロイを作成します。
テストデプロイを作成する場合は、[Config] フィールドが 現在のユーザーにインストールされており、かつ [Config] ボックスの下のテキストに [Installed for current user] と表示されていること。
AuthMode.None
でのテストテストデプロイを起動し、[拡張機能] メニューを開きます。
すべてのメニュー項目が表示される場合、問題は解決しています。 [ヘルプ] メニューしかない場合は、ステップ 1 に戻ります。 サービスコールにつながらなかった可能性があります。