Bu dokümanda, bir kaynak değiştiğinde uygulamanızı bilgilendiren push bildirimlerinin nasıl kullanılacağı açıklanmaktadır.
Genel Bakış
Yönetici SDK'sı API'si, kaynaklardaki değişiklikleri izlemenize olanak tanıyan push bildirimleri sağlar. Bu özelliği kullanarak uygulamanızın performansını artırabilirsiniz. Değişip değişmediklerini belirlemek için kaynak sorgulaması ile ilgili ek ağ ve hesaplama maliyetlerini ortadan kaldırmanıza olanak tanır. İzlenen bir kaynak değiştiğinde Yönetici SDK'si API'si uygulamanızı bilgilendirir.
Push bildirimleri kullanmak için iki şey yapmanız gerekir:
Alıcı URL'nizi veya "webhook" geri çağırma alıcınızı ayarlayın.
Bu, bir kaynak değiştiğinde tetiklenen API bildirim mesajlarını işleyen bir HTTPS sunucusudur.
İzlemek istediğiniz her kaynak uç noktası için bir bildirim kanalı oluşturun.
Kanallar, bildirim mesajları için yönlendirme bilgilerini belirtir. Kanal kurulumu kapsamında, bildirim almak istediğiniz URL'yi belirtmeniz gerekir. Bir kanalın kaynağı değiştiğinde Yönetici SDK API'si, söz konusu URL'ye
POST
isteğinde bulunarak bir bildirim mesajı gönderir.
Yönetici SDK'sı API'si şu anda Etkinlikler kaynağındaki değişikliklerle ilgili bildirimleri desteklemektedir.
Bildirim kanalları oluşturma
Push bildirimleri istemek için izlemek istediğiniz her kaynak için bir bildirim kanalı oluşturmanız gerekir. Bildirim kanallarınız oluşturulduktan sonra, izlenen herhangi bir kaynak değiştiğinde Admin SDK API, uygulamanızı bilgilendirir.
İzleme isteği gönderme
İzlenebilir her Yönetici SDK'sı API kaynağının, aşağıdaki biçimteki bir URI'de ilişkili bir watch
yöntemi vardır:
https://www.googleapis.com/API_NAME/API_VERSION/RESOURCE_PATH/watch
Belirli bir kaynakta yapılan değişikliklerle ilgili mesajlar için bildirim kanalı oluşturmak isterseniz kaynak için watch
yöntemine POST
isteği gönderin.
Her bildirim kanalı hem belirli bir kullanıcıyla hem de belirli bir kaynakla (veya kaynak grubuyla) ilişkilendirilir. Mevcut kullanıcı veya hizmet hesabı bu kaynağın sahibi değilse ya da bu kaynağa erişme izni yoksa watch
isteği başarılı olmaz.
Örnekler
Activities kaynağı için tüm izleme isteklerinin genel biçimi şudur:
POST https://admin.googleapis.com/admin/reports/v1/activity/users/userKey or all/applications/applicationName/watch Authorization: Bearer auth_token_for_current_user Content-Type: application/json { "id": "01234567-89ab-cdef-0123456789ab", // Your channel ID. "type": "web_hook", "address": "https://mydomain.com/notifications", // Your receiving URL. ... "token": "target=myApp-myFilesChannelDest", // (Optional) Your channel token. "payload": true, // (Optional) Whether to include the payload (message body) in notifications. "expiration": 3600 // (Optional) Your requested channel expiration time. }
Yalnızca belirli etkinlikler, kullanıcılar veya uygulamalarla ilgili bildirim almak için userKey, applicationName, eventName
ve filters
parametrelerini kullanabilirsiniz.
Not: Aşağıdaki örneklerde daha net olması için istek gövdesi hariç tutulmuştur.
Tüm yönetici etkinliklerini izleyin:
POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/admin/watch
Tüm doküman etkinliklerini izleyin:
POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/docs/watch
Belirli bir kullanıcının yönetici etkinliğini izleme:
POST https://admin.googleapis.com/admin/reports/v1/activity/users/liz@example.com/applications/admin/watch
Kullanıcının şifresini değiştirme gibi belirli bir etkinliği izleyin:
POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/admin/watch?eventName=CHANGE_PASSWORD
Belirli bir dokümanda yapılan değişiklikleri takip edin:
POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/docs/watch?eventName=EDIT&filters==doc_id=123456abcdef
Zorunlu özellikler
Her watch
isteğiyle birlikte şu alanları sağlamanız gerekir:
-
Projenizde bu yeni bildirim kanalını benzersiz şekilde tanımlayan bir
id
mülk dizesi. Evrensel olarak benzersiz bir tanımlayıcı (UUID) veya benzer bir benzersiz dize kullanmanızı öneririz. Maksimum uzunluk: 64 karakter.Belirlediğiniz kimlik değeri, bu kanal için aldığınız her bildirim mesajının
X-Goog-Channel-Id
HTTP başlığında tekrarlanır. -
web_hook
değerine ayarlanmış birtype
mülk dizesi. -
Bu bildirim kanalının bildirimlerini dinleyen ve yanıtlayan URL'ye ayarlanmış bir
address
mülk dizesi. Bu, webhook geri çağırma URL'nizdir ve HTTPS kullanmalıdır.Yönetici SDK'sı API'sinin bu HTTPS adresine bildirim gönderebilmesi için web sunucunuzda geçerli bir SSL sertifikasının yüklü olması gerektiğini unutmayın. Geçersiz sertifikalar şunlardır:
- Kendinden imzalı sertifikalar.
- Güvenilmeyen bir kaynağın imzaladığı sertifikalar.
- İptal edilmiş sertifikalar.
- Konusu hedef ana makine adıyla eşleşmeyen sertifikalar
İsteğe bağlı özellikler
watch
isteğinizle şu isteğe bağlı alanları da belirtebilirsiniz:
-
Kanal jetonu olarak kullanılacak rastgele bir dize değeri belirten
token
özelliği. Bildirim kanalı jetonlarını çeşitli amaçlarla kullanabilirsiniz. Örneğin, gelen her mesajın uygulamanızın oluşturduğu bir kanala ait olduğunu doğrulamak (bildirimin kimliğe bürünmemesini sağlamak) veya mesajı bu kanalın amacına göre uygulamanızdaki doğru hedefe yönlendirmek için jetonu kullanabilirsiniz. Maksimum uzunluk: 256 karakter.Jeton, uygulamanızın bu kanal için aldığı her bildirim mesajındaki
X-Goog-Channel-Token
HTTP başlığına eklenir.Bildirim kanalı jetonları kullanıyorsanız aşağıdakileri yapmanızı öneririz:
URL sorgu parametreleri gibi genişletilebilir bir kodlama biçimi kullanın. Örnek:
forwardTo=hr&createdBy=mobile
OAuth jetonları gibi hassas verileri eklemeyin.
-
Admin SDK API'nin bu bildirim kanalı için mesaj göndermeyi durdurmasını istediğiniz tarih ve saatin Unix zaman damgası (milisaniye cinsinden) değerine ayarlanmış bir
expiration
mülk dizesi.Bir kanalın geçerlilik süresi varsa bu süre, uygulamanızın bu kanal için aldığı her bildirim mesajına
X-Goog-Channel-Expiration
HTTP başlığının değeri olarak (kullanıcı tarafından okunabilir biçimde) dahil edilir.
İstek hakkında daha fazla bilgi için API Referansı'ndaki Etkinlikler kaynağının watch
yöntemine bakın.
Yanıtı izle
watch
isteği başarılı bir şekilde bildirim kanalı oluşturursa HTTP 200 OK
durum kodu döndürülür.
İzleme yanıtının mesaj gövdesi, aşağıdaki örnekte gösterildiği gibi, yeni oluşturduğunuz bildirim kanalı hakkında bilgi sağlar.
{ "kind": "api#channel", "id": "reportsApiId", // ID you specified for this channel. "resourceId": "o3hgv1538sdjfh", // ID of the watched resource. "resourceUri": "https://admin.googleapis.com/admin/reports/v1/activity/userKey/applications/applicationName", // Version-specific ID of the watched resource. "token": "target=myApp-myFilesChannelDest", // Present only if one was provided. "expiration": 3600, // Actual expiration time as Unix timestamp (in ms), if applicable. }
Döndürülen bilgiler, isteğiniz kapsamında gönderdiğiniz özelliklere ek olarak bu bildirim kanalında izlenen kaynağı tanımlamak için resourceId
ve resourceUri
öğelerini de içerir.
Döndürülen bilgileri diğer bildirim kanalı işlemlerine iletebilirsiniz. Örneğin, bildirim almayı durdurmak istediğinizde bu bilgileri kullanabilirsiniz.
Yanıt hakkında daha fazla bilgi için API Referansı'ndaki Etkinlikler kaynağının watch
yöntemine bakın.
Senkronizasyon mesajı
Bir kaynağı izlemek için bildirim kanalı oluşturduktan sonra Yönetici SDK'sı API'si, bildirimlerin başladığını belirtmek için bir sync
mesajı gönderir. Bu iletilerin X-Goog-Resource-State
HTTP üst bilgisi değeri sync
. Ağ zamanlama sorunları nedeniyle, watch
yöntem yanıtını almadan önce bile sync
mesajını alabilirsiniz.
sync
bildirimini yoksayabilirsiniz ancak bu bildirimi kullanabilirsiniz. Örneğin, kanalı tutmak istemediğinize karar verirseniz X-Goog-Channel-ID
ve X-Goog-Resource-ID
değerlerini kullanarak bildirim almayı durdurabilirsiniz. Sonraki etkinliklere hazırlanmak amacıyla bazı başlatma işlemleri için sync
bildirimini de kullanabilirsiniz.
Admin SDK API'nin alıcı URL'nize gönderdiği sync
mesajlarının biçimi aşağıda gösterilmiştir.
POST https://mydomain.com/notifications // Your receiving URL. X-Goog-Channel-ID: channel-ID-value X-Goog-Channel-Token: channel-token-value X-Goog-Channel-Expiration: expiration-date-and-time // In human-readable format. Present only if the channel expires. X-Goog-Resource-ID: identifier-for-the-watched-resource X-Goog-Resource-URI: version-specific-URI-of-the-watched-resource X-Goog-Resource-State: sync X-Goog-Message-Number: 1
Senkronizasyon mesajlarının X-Goog-Message-Number
HTTP başlığı değeri her zaman 1
olur. Bu kanala yönelik sonraki her bildirimin mesaj numarası öncekinden daha büyüktür ancak mesaj numaraları sıralı değildir.
Bildirim kanallarını yenileme
Bildirim kanalının son kullanma zamanı olabilir. Bu süre, isteğinizle veya Admin SDK API'deki dahili sınırlarla ya da varsayılanlarla belirlenir (daha kısıtlayıcı değer kullanılır). Kanalın geçerlilik bitiş tarihi (varsa) watch
yöntemi tarafından döndürülen bilgilere Unix zaman damgası (milisaniye cinsinden) olarak eklenir. Ayrıca, uygulamanızın bu kanal için aldığı her bildirim mesajına X-Goog-Channel-Expiration
HTTP başlığında geçerlilik bitiş tarihi ve saati eklenir (kullanıcılar tarafından okunabilir biçimde).
Şu anda bildirim kanallarını otomatik olarak yenileme seçeneği yoktur. Kullanım süresi dolmak üzere olan bir kanalı, watch
yöntemini çağırarak yeni bir kanalla değiştirmeniz gerekir. Her zaman olduğu gibi, yeni kanalın id
özelliği için benzersiz bir değer kullanmanız gerekir. Aynı kaynak için iki bildirim kanalının etkin olduğu durumlarda, bir "örtüşme" süresinin olabileceğini unutmayın.
Bildirimleri alma
İzlenen bir kaynak değiştiğinde uygulamanıza değişikliği açıklayan bir bildirim mesajı gönderilir. Yönetici SDK'si API'si bu bildirimleri, bu bildirim kanalı için address
mülkü olarak belirttiğiniz URL'ye HTTPS POST
istekleri olarak gönderir.
Bildirim mesajı biçimini yorumlama
Tüm bildirim mesajları, X-Goog-
ön eklerine sahip bir dizi HTTP üst bilgisi içerir.
Bazı bildirim türleri mesaj gövdesi de içerebilir.
Üst bilgiler
Admin SDK API tarafından alıcı URL'nize gönderilen bildirim mesajları aşağıdaki HTTP üstbilgilerini içerir:
Başlık | Açıklama |
---|---|
Her zaman mevcut | |
|
Bu bildirim kanalını tanımlamak için sağladığınız UUID veya başka bir benzersiz dize. |
|
Bu bildirim kanalı için bu mesajı tanımlayan tam sayı. Değer, sync mesaj için her zaman 1 şeklindedir. Kanaldaki her bir sonraki mesaj için ileti sayıları artar ancak bu sayılar sıralı değildir. |
|
İzlenen kaynağı tanımlayan opak bir değer. Bu kimlik, API sürümleri genelinde sabittir. |
|
Bildirimi tetikleyen yeni kaynak durumu.
Olası değerler:
sync veya bir etkinlik adı.
|
|
İzlenen kaynak için API sürümüne özgü bir tanımlayıcı. |
Bazen mevcut | |
|
Bildirim kanalının geçerlilik süresinin sona erme tarihi ve saati (kullanıcılar tarafından okunabilir biçimde belirtilir). Yalnızca tanımlanmışsa mevcuttur. |
|
Uygulamanız tarafından ayarlanan ve bildirim kaynağını doğrulamak için kullanabileceğiniz bildirim kanalı jetonu. Yalnızca tanımlanmışsa mevcut olur. |
Etkinlikler için bildirim mesajları, istek gövdesinde aşağıdaki bilgileri içerir:
Mülk | Açıklama |
---|---|
kind |
Bu kullanıcıyı bir Etkinlik kaynağı olarak tanımlar. Değer: "admin#reports#activity " sabit dizesi. |
id |
Etkinlik kaydının benzersiz tanımlayıcısı. |
id.time |
Etkinliğin gerçekleştiği zaman. Değer, ISO 8601 tarih ve saat biçimindedir. Saat, YYYY-AA-GGTsa:dk:snTZD biçiminde tam tarih ve saat, dakika, saniyedir. Örneğin, 2010-04-05T17:30:04+01:00. |
id.uniqueQualifier |
Birden fazla etkinliğin aynı saate sahip olması durumunda benzersiz niteleyici. |
id.applicationName |
Etkinliğin ait olduğu uygulama adı. Olası değerler şunlardır: |
id.customerId |
Google Workspace hesabının benzersiz tanımlayıcısı. |
actor |
İşlemi yapan kullanıcı. |
actor.callerType |
Raporda listelenen etkinliği gerçekleştiren yazarın türü. API'nin bu sürümünde callerType , raporda listelenen işlemi gerçekleştiren USER veya OAuth 2LO varlık isteğidir . |
actor.email |
Etkinlikleri bildirilen kullanıcının birincil e-posta adresi. |
actor.profileId |
Kullanıcının benzersiz Google Workspace profil kimliği. |
ownerDomain |
Yönetici Konsolu'nun veya Dokümanlar uygulamasının doküman sahibinin alanı. Bu, raporun etkinliğinden etkilenen alandır. |
ipAddress |
İşlemi gerçekleştiren kullanıcının IP adresi. Bu, kullanıcının Google Workspace'e giriş yaparken kullandığı İnternet Protokolü (IP) adresidir. Kullanıcının fiziksel konumunu yansıtabilir veya yansıtmayabilir. Örneğin, IP adresi kullanıcının proxy sunucusunun adresi veya sanal özel ağ (VPN) adresi olabilir. API, IPv4 ve IPv6'yı destekler. |
events[] |
Rapordaki etkinlik etkinlikleri. |
events[].type |
Etkinlik türü. Bir yöneticinin değiştirdiği Google Workspace hizmeti veya özelliği, eventName özelliğini kullanarak bir etkinliği tanımlayan type mülkünde tanımlanır. |
events[].name |
Etkinliğin adı. Bu, API tarafından raporlanan etkinliğin özel adıdır. Her eventName , API'nin etkinlik türlerine göre düzenlediği belirli bir Google Workspace hizmeti veya özelliğiyle ilgilidir.
Genel olarak eventName istek parametreleri için:
|
events[].parameters[] |
Çeşitli uygulamalar için parametre değer çiftleri. |
events[].parameters[].name |
Parametrenin adı. |
events[].parameters[].value |
Parametrenin dize değeri. |
events[].parameters[].intValue |
Parametrenin tam sayı değeri. |
events[].parameters[].boolValue |
Parametrenin boole değeri. |
Örnekler
Etkinlik kaynağı etkinlikleri için bildirim mesajları genel biçimdedir:
POST https://mydomain.com/notifications // Your receiving URL. Content-Type: application/json; utf-8 Content-Length: 0 X-Goog-Channel-ID: reportsApiId X-Goog-Channel-Token: 398348u3tu83ut8uu38 X-Goog-Channel-Expiration: Tue, 29 Oct 2013 20:32:02 GMT X-Goog-Resource-ID: ret08u3rv24htgh289g X-Goog-Resource-URI: https://admin.googleapis.com/admin/reports/v1/activity/userKey/applications/applicationName X-Goog-Resource-State: eventName X-Goog-Message-Number: 10 { "kind": "admin#reports#activity", "id": { "time": datetime, "uniqueQualifier": long, "applicationName": string, "customerId": string }, "actor": { "callerType": string, "email": string, "profileId": long }, "ownerDomain": string, "ipAddress": string, "events": [ { "type": string, "name": string, "parameters": [ { "name": string, "value": string, "intValue": long, "boolValue": boolean } ] } ] }
Yönetici etkinliği etkinliği örneği:
POST https://mydomain.com/notifications // Your receiving URL. Content-Type: application/json; utf-8 Content-Length: 596 X-Goog-Channel-ID: reportsApiId X-Goog-Channel-Token: 245t1234tt83trrt333 X-Goog-Channel-Expiration: Tue, 29 Oct 2013 20:32:02 GMT X-Goog-Resource-ID: ret987df98743md8g X-Goog-Resource-URI: https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/admin?alt=json X-Goog-Resource-State: CREATE_USER X-Goog-Message-Number: 23 { "kind": "admin#reports#activity", "id": { "time": "2013-09-10T18:23:35.808Z", "uniqueQualifier": "-0987654321", "applicationName": "admin", "customerId": "ABCD012345" }, "actor": { "callerType": "USER", "email": "admin@example.com", "profileId": "0123456789987654321" }, "ownerDomain": "apps-reporting.example.com", "ipAddress": "192.0.2.0", "events": [ { "type": "USER_SETTINGS", "name": "CREATE_USER", "parameters": [ { "name": "USER_EMAIL", "value": "liz@example.com" } ] } ] }
Bildirimleri yanıtlama
Başarıyı belirtmek için aşağıdaki durum kodlarından birini döndürebilirsiniz:
200
, 201
, 202
, 204
veya
102
.
Hizmetiniz Google'ın API istemci kitaplığını kullanıyorsa ve 500
,502
, 503
veya 504
döndürüyorsa Yönetici SDK'sı API'si üsselik geri çekilme ile yeniden dener.
Diğer tüm iade durum kodları, mesaj hatası olarak değerlendirilir.
Admin SDK API bildirim etkinliklerini anlama
Bu bölümde, Yönetici SDK'sı API'si ile push bildirimleri kullanırken alabileceğiniz bildirim mesajları hakkında ayrıntılı bilgi verilmektedir.
Reports API push bildirimleri iki tür mesaj içerir: senkronizasyon mesajları ve etkinlik bildirimleri. Mesaj türü, X-Goog-Resource-State
HTTP üst bilgisinde belirtilir. Etkinlik bildirimleri için olası değerler, activities.list
yöntemiyle aynıdır. Her uygulamanın benzersiz etkinlikleri vardır:
Bildirimleri durdur
expiration
özelliği, bildirimlerin ne zaman otomatik olarak durdurulacağını kontrol eder. Belirli bir
kanal için bildirim almayı, süresi dolmadan önce durdurmak için aşağıdaki URI'da stop
yöntemini
çağırabilirsiniz:
https://www.googleapis.com/admin/reports_v1/channels/stop
Bu yöntem, aşağıdaki örnekte gösterildiği gibi en azından kanalın id
ve resourceId
özelliklerini sağlamanızı gerektirir. Admin SDK API'de watch
yöntemlerine sahip birkaç tür kaynak varsa yalnızca bir stop
yöntemi olduğunu unutmayın.
Yalnızca doğru izinlere sahip kullanıcılar bir kanalı durdurabilir. Özellikle:
- Kanal normal bir kullanıcı hesabı tarafından oluşturulduysa yalnızca kanalın oluşturulduğu istemcide bulunan ve kanalın oluşturulduğu OAuth 2.0 istemci kimlikleriyle tanımlanan kullanıcı kanalın yayınını durdurabilir.
- Kanal bir hizmet hesabı tarafından oluşturulduysa aynı müşterideki tüm kullanıcılar kanalı durdurabilir.
Aşağıdaki kod örneğinde, bildirimlerin nasıl durdurulacağı gösterilmektedir:
POST https://www.googleapis.com/admin/reports_v1/channels/stop Authorization: Bearer CURRENT_USER_AUTH_TOKEN Content-Type: application/json { "id": "4ba78bf0-6a47-11e2-bcfd-0800200c9a66", "resourceId": "ret08u3rv24htgh289g" }