blob: b72868936f0f6e177220fe1794b3eb9ad608037b [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
syntax = "proto2";
package nearby.fastpair;
import "context_fence.proto";
import "enums.proto";
import "message_set.proto";
// Information about Fast Pair. This will either contain an account key and
// discovery item bytes or an opt in status.
message FastPairInfo {
// Footprints stores data contained in the message set, see
// https://g3doc.corp.google.com/personalization/footprints/g3doc/client-docs/index.md#data-format-and-storage
extend proto2.bridge.MessageSet {
optional FastPairInfo message_set_extension = 190536965;
}
oneof info {
OptInStatus opt_in_status = 1;
FastPairDevice device = 2;
}
}
// A device that has been Fast Paired with.
message FastPairDevice {
// The account key which was written to the device after pairing completed.
optional bytes account_key = 1;
// The stored discovery item which represents the notification that should be
// associated with the device. Note, this is stored as a raw byte array
// instead of StoredDiscoveryItem because icing only supports proto lite and
// StoredDiscoveryItem is handed around as a nano proto in implementation,
// which are not compatible with each other.
optional bytes discovery_item_bytes = 3;
// SHA256 of "account key + headset's public address", this is used to
// identify the paired headset. Because of adding account key to generate the
// hash value, it makes the information anonymous, even for the same headset,
// different accounts have different values.
optional bytes sha256_account_key_public_address = 4;
// Deprecated fields.
reserved 2;
}
// Additional images for True Wireless Fast Pair devices.
message TrueWirelessHeadsetImages {
// Image URL for the left bud.
optional string left_bud_url = 1;
// Image URL for the right bud.
optional string right_bud_url = 2;
// Image URL for the case.
optional string case_url = 3;
}
message CompanionAppDetails {
// Companion app slice provider's authority.
optional string authority = 1;
// Companion app certificate value.
optional string certificate_hash = 2;
// Deprecated fields.
reserved 3;
}
// Relevance indicates how relevant the item is to the user.
message Relevance {
// REQUIRED
// Whether the item is good, ok, poor, etc. Corresponds to levels found in
// the Discoverer Notification Policy Worksheet:
// https://docs.google.com/a/google.com/spreadsheets/d/1atc1-RNLb7fAGvGdWXlh86Qy2IY9T_dj2v4gFUhdPF0/edit?usp=sharing
optional Evaluation evaluation = 1;
// To get this relevance, the item can be at most this far away.
// Note: Supported in v11+.
// TODO(jfarfel): Replace with Targeting.
optional double max_distance = 2;
// To get this relevance, the item must pass this targeting rule (if set).
// Note: Supported in v11+. Prior to v11, clients expected targeting to be
// set via field 12 on the NearbyItem.
// See go/discoverer-notification-targeting
// TODO(jfarfel): Replace with Targeting.
optional personalization.context.ContextFence targeting_fence = 3;
}
message StoredRelevance {
optional Relevance relevance = 1;
// The last time that this relevance passed targeting. A relevance with no
// targeting always passes. Null if it failed, or we haven't checked yet.
optional int64 targeting_true_millis = 2;
}
// Additional information relevant only for Fast Pair devices.
message FastPairInformation {
// When true, Fast Pair will only create a bond with the device and not
// attempt to connect any profiles (for example, A2DP or HFP).
// TODO(b/128545971): Transition this to a feature.
optional bool data_only_connection = 1;
// The type of the manufacturer (first party, third party, etc).
optional ManufacturerType manufacturer_type = 2;
// Additional images that are attached specifically for true wireless Fast
// Pair devices.
optional TrueWirelessHeadsetImages true_wireless_images = 3;
// When true, this device can support assistant function.
// TODO(b/128545971): Transition this to a feature.
optional bool assistant_supported = 4;
// Features supported by the Fast Pair device.
repeated FastPairFeature features = 5;
// Optional, the name of the company producing this Fast Pair device.
optional string company_name = 6;
// Optional, the type of device.
optional DeviceType device_type = 7;
}
message FastPairStrings {
// Required for initial pairing, used when there is a Google account on the
// device
optional string tap_to_pair_with_account = 1;
// Required for initial pairing, used when there is no Google account on the
// device
optional string tap_to_pair_without_account = 2;
// Description for initial pairing
optional string initial_pairing_description = 3;
// Description after successfully paired the device with companion app
// installed
optional string pairing_finished_companion_app_installed = 4;
// Description after successfully paired the device with companion app not
// installed
optional string pairing_finished_companion_app_not_installed = 5;
// Description when phone found the device that associates with user's account
// before remind user to pair with new device.
optional string subsequent_pairing_description = 6;
// Description when fast pair finds the user paired with device manually
// reminds user to opt the device into cloud.
optional string retroactive_pairing_description = 7;
// Description when user click setup device while device is still pairing
optional string wait_app_launch_description = 8;
// Description when user fail to pair with device
optional string pairing_fail_description = 9;
// Title to ask the user to confirm the pin code.
optional string confirm_pin_title = 10;
// Description to ask the user to confirm the pin code.
optional string confirm_pin_description = 11;
// The title of the UI to ask the user to confirm to sync contacts.
optional string sync_contacts_title = 12;
// The description of the UI to ask the user to confirm to sync contacts.
optional string sync_contacts_description = 13;
// The title of the UI to ask the user to confirm to sync SMS.
optional string sync_sms_title = 14;
// The description of the UI to ask the user to confirm to sync SMS.
optional string sync_sms_description = 15;
// The description for half sheet to ask user to setup google assistant.
optional string assistant_half_sheet_description = 16;
// The description for notification to ask user to setup google assistant.
optional string assistant_notification_description = 17;
}
// Data for a DiscoveryItem created from server response and client scan result.
// Only caching original data from scan result, server response, timestamps
// and user actions. Do not save generated data in this object.
message StoredDiscoveryItem {
enum State {
// Default unknown state.
STATE_UNKNOWN = 0;
// The item is normal.
STATE_ENABLED = 1;
// The item has been muted by user.
STATE_MUTED = 2;
// The item has been disabled by us (likely temporarily).
STATE_DISABLED_BY_SYSTEM = 3;
}
// The status of the item.
enum DebugMessageCategory {
// Default unknown state.
STATUS_UNKNOWN = 0;
// The item is valid and visible in notification.
STATUS_VALID_NOTIFICATION = 1;
// The item made it to list but not to notification.
STATUS_VALID_LIST_VIEW = 2;
// The item is filtered out on client. Never made it to list view.
STATUS_DISABLED_BY_CLIENT = 3;
// The item is filtered out by server. Never made it to client.
STATUS_DISABLED_BY_SERVER = 4;
}
enum ExperienceType {
EXPERIENCE_UNKNOWN = 0;
EXPERIENCE_GOOD = 1;
EXPERIENCE_BAD = 2;
}
// REQUIRED
// Offline item: unique ID generated on client.
// Online item: unique ID generated on server.
optional string id = 1;
// REQUIRED
optional NearbyType type = 2;
// REQUIRED
// The most recent all upper case mac associated with this item.
// (Mac-to-DiscoveryItem is a many-to-many relationship)
optional string mac_address = 4;
// REQUIRED
optional string action_url = 5;
// The bluetooth device name from advertisment
optional string device_name = 6;
// REQUIRED
// Item's title
optional string title = 7;
// Item's description.
optional string description = 8;
// The URL for display
optional string display_url = 9;
// REQUIRED
// Client timestamp when the beacon was last observed in BLE scan.
optional int64 last_observation_timestamp_millis = 10;
// REQUIRED
// Client timestamp when the beacon was first observed in BLE scan.
optional int64 first_observation_timestamp_millis = 11;
// REQUIRED
// Item's current state. e.g. if the item is blocked.
optional State state = 17;
// The resolved url type for the action_url.
optional ResolvedUrlType action_url_type = 19;
// The timestamp when the user is redirected to Play Store after clicking on
// the item.
optional int64 pending_app_install_timestamp_millis = 20;
// Beacon's RSSI value
optional int32 rssi = 22;
// Beacon's tx power
optional int32 tx_power = 23;
// Human readable name of the app designated to open the uri
// Used in the second line of the notification, "Open in {} app"
optional string app_name = 25;
// ID used for associating several DiscoveryItems. These items may be
// visually displayed together.
optional string group_id = 26;
// The timestamp when the attachment was created on PBS server. In case there
// are duplicate
// items with the same scanId/groupID, only show the one with the latest
// timestamp.
optional int64 attachment_creation_sec = 28;
// Whether the attachment is created in debug namespace
optional DiscoveryAttachmentType attachment_type = 29;
// Package name of the App that owns this item.
optional string package_name = 30;
// The average star rating of the app.
optional float star_rating = 31;
// The "feature" graphic image url used for large sized list view entries.
optional string feature_graphic_url = 32;
// TriggerId identifies the trigger/beacon that is attached with a message.
// It's generated from server for online messages to synchronize formatting
// across client versions.
// Example:
// * BLE_UID: 3||deadbeef
// * BLE_URL: http://trigger.id
// See go/discovery-store-message-and-trigger-id for more details.
optional string trigger_id = 34;
// Bytes of item icon in PNG format displayed in Discovery item list.
optional bytes icon_png = 36;
// Message written to bugreport for 3P developers.(No sensitive info)
// null if the item is valid
optional string debug_message = 37;
// Weather the item is filtered out on server.
optional DebugMessageCategory debug_category = 38;
// How relevant the message is to the user. May be used by the client to
// determine how to display the NearbyItem. >1 relevance makes sense only if
// each has targeting (e.g., a maximum distance threshold). In that case, the
// item's relevance is the maximum one where the targeting is satisfied.
repeated StoredRelevance stored_relevances = 40;
// Client timestamp when the trigger (e.g. beacon) was last lost (e.g. when
// Messages told us the beacon's no longer nearby).
optional int64 lost_millis = 41;
// The kind of expereince the user last had with this (e.g. if they dismissed
// the notification, that's bad; but if they tapped it, that's good).
optional ExperienceType last_user_experience = 42;
// The most recent BLE advertisement related to this item.
optional bytes ble_record_bytes = 43;
// An ID generated on the server to uniquely identify content.
optional string entity_id = 44;
// See equivalent field in NearbyItem.
optional bytes authentication_public_key_secp256r1 = 45;
// See equivalent field in NearbyItem.
optional FastPairInformation fast_pair_information = 46;
// Companion app detail.
optional CompanionAppDetails companion_detail = 47;
// Fast pair strings
optional FastPairStrings fast_pair_strings = 48;
// Deprecated fields.
reserved 3, 12, 13, 14, 15, 16, 18, 21, 24, 27, 33, 35, 39;
}