Push bildirimleri

Bu dokümanda, bir kaynak değiştiğinde uygulamanızı bilgilendiren push bildirimlerini nasıl kullanacağınız açıklanmaktadır.

Genel bakış

Admin SDK API, kaynaklardaki değişiklikleri izlemenize olanak tanıyan push bildirimleri sağlar. Uygulamanızın performansını iyileştirmek için bu özelliği kullanabilirsiniz. Değişip değişip değişmediğini belirlemek için yoklama kaynaklarıyla ilgili ek ağ ve işlem maliyetlerini ortadan kaldırmanızı sağlar. İzlenen bir kaynak değiştiğinde Admin SDK API, uygulamanızı bilgilendirir.

Push bildirimlerini 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 bildirimi mesajlarını işleyen bir HTTPS sunucusudur.

  • İzlemek istediğiniz her kaynak uç noktası için bir (bildirim kanalı) oluşturun.

    Kanal, bildirim mesajları için yönlendirme bilgilerini belirtir. Kanal kurulumu sırasında, bildirimleri almak istediğiniz belirli URL'yi belirtmeniz gerekir. Bir kanalın kaynağı her değiştiğinde, Admin SDK API bu URL'ye POST isteği olarak bir bildirim mesajı gönderir.

Şu anda Admin SDK API, Etkinlikler kaynağında yapılan değişikliklerle ilgili bildirimleri desteklemektedir.

Bildirim kanalları oluşturma

Push bildirimi istemek üzere izlemek istediğiniz her kaynak için bir bildirim kanalı oluşturmanız gerekir. Bildirim kanallarınız ayarlandıktan sonra Admin SDK API, izlenen herhangi bir kaynak değiştiğinde uygulamanızı bilgilendirir.

İzleme isteğinde bulun

Her bir Admin SDK API kaynağı, aşağıdaki biçimdeki bir URI'de ilişkili bir watch yöntemine sahiptir:

https://www.googleapis.com/API_NAME/API_VERSION/RESOURCE_PATH/watch

Belirli bir kaynakta yapılan değişiklikler hakkındaki mesajlar için bildirim kanalı oluşturmak isterseniz kaynağın 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. Geçerli kullanıcı veya hizmet hesabı bu kaynağa sahip değilse ya da bu kaynağa erişim izni yoksa watch isteği başarılı olmaz.

Örnekler

Etkinlikler kaynağı için tüm izleme istekleri genel biçimdedir:

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.
}

userKey, applicationName, eventName ve filters parametrelerini kullanarak yalnızca belirli etkinlikler, kullanıcılar veya uygulamalar için bildirim alabilirsiniz.

Not: Aşağıdaki örneklerde, daha net anlaşılması için istek gövdesine yer verilmemiştir.

Tüm yönetici etkinlikleri için aşağıdaki talimatları uygulayın:

POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/admin/watch

Tüm doküman etkinlikleri için 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 izleyin:

POST https://admin.googleapis.com/admin/reports/v1/activity/users/liz@example.com/applications/admin/watch

Bir kullanıcının şifresini değiştirmek 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 izleme:

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 aşağıdaki alanları sağlamanız gerekir:

  • Projeniz içinde bu yeni bildirim kanalını benzersiz şekilde tanımlayan bir id özellik dizesi. Evrensel olarak benzersiz bir tanımlayıcı (UUID) veya benzer bir benzersiz dize kullanmanızı öneririz. Maksimum uzunluk: 64 karakter.

    Ayarladığınız kimlik değeri, bu kanal için aldığınız her bildirim mesajının X-Goog-Channel-Id HTTP üst bilgisinde tekrarlanır.

  • web_hook değerine ayarlanmış type özelliği dizesi.

  • address mülk dizesi, bu bildirim kanalının bildirimlerini dinleyip bunlara yanıt veren URL'ye ayarlanır. Bu sizin webhook geri çağırma URL'nizdir ve HTTPS kullanması gerekir.

    Admin SDK API'nin bu HTTPS adresine, yalnızca web sunucunuzda geçerli bir SSL sertifikası yüklüyse bildirim gönderebileceğ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 isteğe bağlı olarak şu alanları da belirtebilirsiniz:

  • Kanal jetonu olarak kullanılacak rastgele bir dize değeri belirten token özelliği. Bildirim kanalı jetonlarını çeşitli amaçlar için kullanabilirsiniz. Örneğin, jetonu kullanarak gelen her iletinin uygulamanızın oluşturduğu bir kanala ait olduğunu doğrulayıp bildirimin adres sahteciliğine maruz kalmadığından emin olabilir veya iletiyi, bu kanalın amacı doğrultusunda uygulamanızdaki doğru hedefe yönlendirebilirsiniz. Maksimum uzunluk: 256 karakter.

    Jeton, uygulamanızın bu kanal için aldığı her bildirim mesajında X-Goog-Channel-Token HTTP üst bilgisine dahil edilir.

    Bildirim kanalı jetonları kullanıyorsanız şunları 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.

  • expiration mülk dizesi, Admin SDK API'nin bu bildirim kanalı için mesaj göndermeyi durdurmasını istediğiniz tarih ve saati içeren bir Unix zaman damgasına (milisaniye cinsinden) ayarlanır.

    Bir kanalın geçerlilik süresi varsa uygulamanızın bu kanal için aldığı her bildirim mesajına X-Goog-Channel-Expiration HTTP üst bilgisinin değeri (insanlar tarafından okunabilir biçimde) olarak eklenir.

İstek hakkında daha fazla bilgi edinmek isterseniz API Referansı'ndaki Etkinlikler kaynağı için watch yöntemine bakın.

Yanıtı izle

watch isteği başarıyla bildirim kanalı oluşturursa bir HTTP 200 OK durum kodu döndürür.

Saat 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.
}

İsteğiniz kapsamında gönderdiğiniz özelliklere ek olarak, döndürülen bilgilerde bu bildirim kanalında izlenen kaynağı tanımlamak için resourceId ve resourceUri de bulunur.

Döndürülen bilgileri, bildirim almayı durdurmak istemeniz gibi diğer bildirim kanalı işlemlerine iletebilirsiniz.

Yanıtla ilgili daha fazla bilgi için API Referansı'ndaki Etkinlikler kaynağıyla ilgili watch yöntemine bakın.

İletiyi senkronize et

Admin SDK API, bir kaynağı izlemek için bir bildirim kanalı oluşturduktan sonra bildirimlerin başladığını belirtmek için bir sync mesajı gönderir. Bu mesajların X-Goog-Resource-State HTTP üst bilgisi değeri sync şeklindedir. Ağ zamanlaması sorunları nedeniyle, watch yöntemi yanıtını almadan önce bile sync mesajını alabilirsiniz.

sync bildirimini güvenle yoksayabilirsiniz, ancak bunu da kullanabilirsiniz. Örneğin, kanalı tutmak istemediğinize karar verirseniz bir çağrıda 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österilmektedir.

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ı her zaman 1 X-Goog-Message-Number HTTP üst bilgi değerine sahiptir. Bu kanal için bir sonraki bildirimde, öncekinden daha büyük bir mesaj numarası vardır ancak mesaj numaraları sıralı değildir.

Bildirim kanallarını yenile

Bildirim kanalının bir geçerlilik süresi olabilir. Bu süre, isteğiniz veya herhangi bir Admin SDK API dahili sınırları ya da varsayılanları tarafından belirlenen bir değerdir (daha kısıtlayıcı değer kullanılır). Kanalın geçerlilik süresi (varsa) watch yöntemi tarafından döndürülen bilgilere Unix zaman damgası (milisaniye cinsinden) olarak eklenir. Buna ek olarak, geçerlilik bitiş tarihi ve saati, uygulamanızın bu kanal için X-Goog-Channel-Expiration HTTP üst bilgisinde aldığı her bildirim mesajına eklenir (kullanıcıların okuyabileceği biçimde).

Şu anda bir bildirim kanalını yenilemenin otomatik bir yolu yoktur. Bir kanalın geçerlilik bitiş tarihi yaklaştığında, watch yöntemini çağırarak kanalı 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ı etkin olduğunda "çakışan" bir süre olabileceğini unutmayın.

Bildirim al

İzlenen bir kaynak her değiştiğinde, uygulamanız değişikliği açıklayan bir bildirim mesajı alır. Admin SDK API bu mesajları, 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 grup 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 üst bilgilerini içerir:

Başlık Açıklama
Her zaman göster
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ı. sync mesajları için değer her zaman 1 olur. Kanalda gösterilen her mesajda mesaj sayısı artar ancak bu sayılar sıralı değildir.
X-Goog-Resource-ID İzlenen kaynağı tanımlayan opak bir değerdir. Bu kimlik, API sürümlerinde sabittir.
X-Goog-Resource-State Bildirimi tetikleyen yeni kaynak durumu. Olası değerler: sync veya etkinlik adı.
X-Goog-Resource-URI İzlenen kaynak için API sürümüne özgü bir tanımlayıcı.
Bazen gösterilir
X-Goog-Channel-Expiration Bildirim kanalının süresinin dolma tarihi ve saati (kullanıcıların okuyabileceği biçimde belirtilir). Yalnızca tanımlanmışsa mevcut.
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 mevcuttur.

Etkinlikler için bildirim mesajları, istek gövdesinde aşağıdaki bilgileri içerir:

Özellik Açıklama
kind Bunu 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şme zamanı. Bu değer ISO 8601 tarih ve saat biçimindedir. Saat, tam tarihin yanı sıra YYYY-AA-GGTsa:dk:snTZD biçiminde saat, dakika ve saniyedir. Örneğin, 2010-04-05T17:30:04+01:00.
id.uniqueQualifier Birden fazla etkinlik aynı zamana sahipse benzersiz niteleyicidir.
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ıdır.
actor İşlemi yapan kullanıcı.
actor.callerType Raporda listelenen etkinliği gerçekleştiren yazar 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 raporlanan kullanıcının birincil e-posta adresi.
actor.profileId Kullanıcının benzersiz Google Workspace profili kimliği.
ownerDomain Yönetici konsolunun alan adı veya Dokümanlar uygulamasının doküman sahibi. Bu, raporun etkinliğinden etkilenen alandır.
ipAddress İşlemi yapan kullanıcının IP adresi. Bu, Google Workspace'e giriş yapan kullanıcının İ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 bir sanal özel ağ (VPN) adresi olabilir. API, IPv4 ve IPv6'yı destekler.
events[] Rapordaki etkinlik etkinlikleri.
events[].type Etkinliğin 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 bildirilen etkinliğin adıdır. Her eventName, API'nin etkinlik türleri halinde düzenlediği belirli bir Google Workspace hizmeti veya özelliğiyle ilişkilidir.
Genel olarak eventName istek parametresi için:
  • eventName özelliği verilmezse rapor, tüm olası eventName örneklerini döndürür.
  • Bir eventName isteğinde bulunduğunuzda API'nin yanıtı, bu eventName öğesini içeren tüm etkinlikleri döndürür. Döndürülen etkinlikler, istenene ek olarak başka eventName özelliklerine de sahip olabilir.
events[].parameters[] Çeşitli uygulamalara ilişkin 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 ö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

İşlemin başarılı olduğunu belirtmek için şu durum kodlarından herhangi 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 Admin SDK API, üstel geri yükleme ile yeniden deneme gerçekleştirir. Diğer tüm iade durum kodları bir mesaj hatası olarak kabul edilir.

Admin SDK API bildirim etkinliklerini anlama

Bu bölümde, Admin SDK API ile push bildirimlerini kullanırken alabileceğiniz bildirim mesajlarıyla ilgili ayrıntılar sunulmaktadır.

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 bildirimlerine ilişkin 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 duracağını kontrol eder. Belirli bir kanal için bildirim almayı, süresi dolmadan önce durdurmayı seçebilirsiniz. Bunun 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'deki watch yöntemlerine sahip çeşitli kaynaklar varsa yalnızca bir stop yöntemi bulunur.

Yalnızca doğru izne sahip kullanıcılar bir kanalı durdurabilir. Özellikle:

  • Kanal normal bir kullanıcı hesabı tarafından oluşturulmuşsa yalnızca kanalı oluşturan aynı istemcideki kullanıcı (yetkilendirme jetonlarındaki OAuth 2.0 istemci kimlikleriyle tanımlanır) kanalı durdurabilir.
  • Kanal bir hizmet hesabı tarafından oluşturulduysa aynı istemcideki herhangi bir kullanıcı kanalı durdurabilir.

Aşağıdaki kod örneğinde bildirim almayı nasıl durduracağınız 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"
}