Otorisasi untuk banyak aplikasi berbasis Apps Script mudah dilakukan karena proyek skrip meminta izin apa pun yang hilang yang diperlukan ketika seseorang mencoba untuk menggunakannya.
Model otorisasi untuk Add-on Editor lebih kompleks karena beberapa alasan:
Saat pengguna membuat file, semua add-on yang diinstal pengguna tercantum di menu Ekstensi, bahkan jika pengguna belum memberikan otorisasi pada add-on tersebut.
Add-on ini berfungsi pada file di Google Drive yang dapat dibagikan kepada kolaborator. Kolaborator yang tidak menginstal Add-on Editor dan melihatnya di dokumen di mana pembuat file menggunakannya.
Add-on Editor secara otomatis menjalankan
onOpen()
fungsi ketika dokumen terbuka.
Untuk melindungi data pengguna, mode otorisasi diterapkan yang membuat beberapa layanan
tidak tersedia untuk onOpen()
. Panduan ini dapat membantu Anda memahami apa kode Anda
dapat dilakukan dan kapan.
Model otorisasi
Mode otorisasi Add-on Editor bergantung pada statusnya, yang bergantung pada pengguna yang menggunakannya: pengguna yang menginstal add-on tersebut atau kolaborator.
Status Add-on Editor
Add-on Editor di menu Ekstensi diinstal, diaktifkan, atau keduanya.
- Add-on diinstal untuk pengguna tertentu setelah mereka atau administratornya mendapatkannya dari Google Workspace Marketplace dan memberikan otorisasi untuk mengakses data Google mereka.
- Add-on diaktifkan di dokumen, formulir, presentasi, atau {i>spreadsheet <i}saat siapa pun menggunakannya.
- Saat orang berkolaborasi pada sebuah file dan salah satunya menggunakan add-on, add-on ini diinstal untuk satu pengguna, dan diaktifkan untuk file tersebut.
Tabel berikut merangkum perbedaan antara diinstal dan diaktifkan. Perhatikan bahwa saat menguji skrip sebagai add-on, Anda dapat menjalankan pengujian dalam salah satu atau kedua status ini.
Diinstal | Aktif | |
---|---|---|
Berlaku untuk | Pengguna | Dokumen, formulir, presentasi, atau spreadsheet |
Disebabkan oleh | Mendapatkan add-on dari toko | Mendapatkan add-on dari toko saat menggunakan
dokumen, formulir, presentasi, atau spreadsheet itu, atau Menggunakan {i>add-on<i} yang sebelumnya dipasang di dokumen, formulir, presentasi, atau spreadsheet |
Menu yang terlihat oleh | Hanya pengguna tersebut, di semua dokumen, formulir, presentasi, atau spreadsheet yang mereka buka atau buat | Semua kolaborator pada dokumen, formulir, presentasi, atau spreadsheet tersebut |
Mode otorisasi untuk onOpen() |
AuthMode.NONE (kecuali jika juga diaktifkan, dalam hal ini AuthMode.LIMITED) |
AuthMode.LIMITED |
Mode otorisasi
Fungsi onOpen()
Add-on Editor dijalankan secara otomatis saat pengguna membuka dokumen, formulir, presentasi, atau spreadsheet.
Untuk melindungi data, Apps Script membatasi
dapat dilakukan oleh fungsi onOpen()
. Status Add-on Editor
menentukan mode otorisasi mana yang digunakan untuk menjalankan fungsi onOpen()
.
Jika Add-on Editor diaktifkan dalam file,
formulir, presentasi, atau spreadsheet, onOpen()
berjalan dalam
AuthMode.LIMITED
. Jika add-on tidak diaktifkan dan
hanya diinstal, onOpen()
akan berjalan di AuthMode.NONE
.
Di AuthMode.NONE
, add-on tidak dapat dijalankan
layanan hingga pengguna berinteraksi dengan add-on dengan
mengklik atau menjalankan
fungsi kustom. Jika
add-on akan mencoba menggunakan layanan ini di onOpen()
,
onInstall()
, atau lingkup global, izin gagal dan panggilan lainnya, seperti
mengisi menu, berhenti. Bantuan adalah satu-satunya opsi yang didukung.
Untuk menjalankan panggilan layanan yang dibatasi, Anda harus menggunakan mode
otorisasi AuthMode.FULL
. Fungsi interaksi pengguna, seperti mengklik opsi menu,
hanya dapat dijalankan
dalam mode ini. Setelah kode dijalankan dalam mode AuthMode.FULL
, add-on dapat menggunakan semua cakupan yang diotorisasi pengguna.
Apps Script meneruskan mode otorisasi
sebagai properti authMode
Apps Script
parameter peristiwa, e
; nilai dari
e.authMode
sesuai dengan konstanta di Apps Script
enum ScriptApp.AuthMode
.
Mode otorisasi berlaku untuk semua metode eksekusi Apps Script,
termasuk menjalankan dari editor skrip, dari item menu, atau dari panggilan google.script.run
Apps Script. Namun,
properti e.authMode
hanya dapat diperiksa jika skrip berjalan sebagai hasilnya
dari pemicu seperti onOpen()
, onEdit()
atau onInstall()
. Fungsi kustom di Google Spreadsheet menggunakan mode otorisasinya sendiri, AuthMode.CUSTOM_FUNCTION
, yang mirip dengan LIMITED
, tetapi memiliki batasan yang sedikit berbeda. Untuk semua
dalam kasus lain, skrip berjalan di AuthMode.FULL
, seperti yang dijelaskan dalam
tabel sementara.
NONE |
LIMITED |
CUSTOM_FUNCTION |
FULL |
|
---|---|---|---|---|
Terjadi selama | onOpen() (jika pengguna telah menginstal add-on, tetapi tidak mengaktifkannya dalam dokumen, formulir, presentasi, atau spreadsheet) |
onOpen() (lainnya)onEdit() (hanya di Spreadsheet) |
Fungsi kustom | Semua waktu lainnya, termasuk: pemicu yang dapat diinstal onInstall() google.script.run |
Akses ke data pengguna | Hanya lokal | Hanya lokal | Hanya lokal | Ya |
Akses ke dokumen, formulir, presentasi, atau spreadsheet | Tidak | Ya | Ya — hanya baca | Ya |
Akses ke antarmuka pengguna | Menambahkan item menu | Menambahkan item menu | Tidak | Ya |
Akses ke Properties |
Tidak | Ya | Ya | Ya |
Akses ke Jdbc , UrlFetch |
Tidak | Tidak | Ya | Ya |
Layanan lainnya | Logger Utilities |
Setiap layanan yang tidak mengakses data pengguna | Setiap layanan yang tidak mengakses data pengguna | Semua layanan |
Siklus proses otorisasi Add-on Editor
Saat add-on diinstal untuk pengguna saat ini
atau diaktifkan dalam file saat ini, add-on tersebut
akan dimuat untuk dokumen, formulir, presentasi,
atau spreadsheet saat file tersebut dibuka. Add-on tersebut
tercantum di menu Extensions dan mulai memproses
pemicu sederhana onInstall()
,
onOpen()
, dan onEdit()
. Jika pengguna mengklik
item menu Extensions, item tersebut akan berjalan.
Add-on Editor telah diinstal
Ketika Add-on Editor diinstal dari toko,
Fungsi onInstall()
berjalan di AuthMode.FULL
. Dalam mode otorisasi ini,
add-on dapat menjalankan rutinitas penyiapan yang kompleks. Anda juga harus
gunakan onInstall()
untuk membuat item menu, karena dokumen, formulir, presentasi,
atau spreadsheet sudah terbuka dan fungsi onOpen()
Anda belum berjalan.
Contoh berikut menunjukkan cara memanggil fungsi onOpen()
dari fungsi onInstall()
:
function onInstall(e) {
onOpen(e);
// Perform additional setup as needed.
}
Add-on Editor dibuka
Saat dokumen, formulir, presentasi, atau spreadsheet dibuka, dokumen, formulir, presentasi, atau spreadsheet tersebut akan memuat setiap Add-on Editor yang telah diinstal pengguna saat ini atau yang telah diaktifkan oleh kolaborator dalam file, dan memanggil setiap fungsi onOpen()
-nya. Mode otorisasi yang dijalankan onOpen()
bergantung pada apakah add-on
diinstal atau diaktifkan.
Jika add-on hanya membuat menu dasar, mode ini
tidak masalah. Contoh berikut menunjukkan fungsi onOpen()
dasar:
function onOpen(e) {
SpreadsheetApp.getUi().createAddonMenu() // Or DocumentApp.
.addItem('Insert chart', 'insertChart')
.addItem('Update charts', 'updateCharts')
.addToUi();
}
Untuk menambahkan item menu dinamis berdasarkan Apps Script yang disimpan properties, untuk membaca konten file saat ini, atau untuk melakukan tugas lanjutan lainnya, Anda harus mengidentifikasi mode otorisasi dan menanganinya dengan tepat.
Contoh berikut menunjukkan fungsi onOpen()
lanjutan yang mengubah
tindakan berdasarkan mode otorisasi:
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();
}
Perlu diketahui bahwa add-on tidak dapat membuka sidebar atau dialog saat dijalankan di
AuthMode.LIMITED
. Anda dapat menggunakan item menu
untuk membuka sidebar dan dialog karena berjalan di AuthMode.FULL
.
Pengguna menjalankan Add-on Editor
Saat pengguna mengklik item menu Ekstensi,
Apps Script terlebih dahulu memeriksa apakah pengguna telah menginstal
{i>add-on<i}, dan
meminta mereka untuk
melakukannya jika belum. Jika pengguna telah memberikan otorisasi pada add-on, skrip akan menjalankan fungsi yang sesuai dengan item menu di AuthMode.FULL
. Add-on akan diaktifkan di dokumen, formulir, presentasi, atau spreadsheet jika belum diaktifkan.
Memecahkan masalah menu add-on yang tidak dirender
Menu add-on mungkin tidak dirender jika kode Anda tidak mengelola mode otorisasi dengan benar. Contoh:
Add-on mencoba menjalankan layanan Apps Script yang tidak didukung oleh mode otorisasi saat ini.
Add-on mencoba menjalankan panggilan layanan sebelum pengguna berinteraksi dengannya.
Untuk menghapus atau mengatur ulang panggilan layanan yang menyebabkan error izin di
AuthMode.NONE
, coba tindakan berikut:
- Buka project Apps Script untuk add-on Anda dan temukan
fungsi
onOpen()
. - Telusuri fungsi
onOpen()
untuk menemukan sebutan layanan atau objek Apps Script yang terkait dengannya, sepertiPropertiesService
,SpreadsheetApp
, atauGmailApp
. - Jika layanan digunakan untuk hal
lain selain membuat elemen UI,
menghapusnya atau menggabungkan dalam blok komentar.
Hanya biarkan metode ini:
.getUi()
,.createMenu()
,.addItem()
, dan.addToUi()
. Temukan dan hapus juga layanan apa pun yang berada di luar fungsi. - Identifikasi fungsi yang dapat berisi baris kode yang dikomentari atau dihapus pada langkah sebelumnya, terutama yang menggunakan informasi yang dihasilkannya, dan pindahkan panggilan layanan ke fungsi yang membutuhkannya. Atur ulang atau tulis ulang codebase Anda untuk mengakomodasi perubahan yang dilakukan pada langkah sebelumnya.
Simpan kode dan buat deployment pengujian.
Saat Anda membuat deployment pengujian, pastikan kolom Config Diinstal untuk pengguna saat ini dan teks di bawah kotak Konfigurasi menyatakan Uji di
AuthMode.None
Luncurkan deployment pengujian dan buka menu Ekstensi.
Jika semua item menu ditampilkan, masalah telah diperbaiki. Jika Anda hanya melihat menu Bantuan, kembali ke langkah 1. Anda mungkin melewatkan panggilan layanan.