Push bildirimleri

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ış bir type 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
X-Goog-Channel-ID Bu bildirim kanalını tanımlamak için sağladığınız UUID veya başka bir benzersiz dize.
X-Goog-Message-Number 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.
X-Goog-Resource-ID İzlenen kaynağı tanımlayan opak bir değer. Bu kimlik, API sürümleri genelinde sabittir.
X-Goog-Resource-State Bildirimi tetikleyen yeni kaynak durumu. Olası değerler: sync veya bir etkinlik adı.
X-Goog-Resource-URI İzlenen kaynak için API sürümüne özgü bir tanımlayıcı.
Bazen mevcut
X-Goog-Channel-Expiration 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.
X-Goog-Channel-Token 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:
  • eventName belirtilmezse rapor, eventName için mümkün olan tüm örnekleri döndürür.
  • Bir eventName istediğinizde API'nin yanıtı, bu eventName'yi içeren tüm etkinlikleri döndürür. Döndürülen etkinliklerde, istenen eventName özelliğine ek olarak başka eventName özellikleri olabilir.
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"
}