附件資料格式

想要新增鄰近分享通知,最簡單的方法是使用 Google 信標資訊主頁。或者,您也可以使用 Proximity Beacon API 和下文所述的附件資料格式。

鄰近通知功能的附件必須使用 com.google.nearby 命名空間,以及由兩個字母組成的語言代碼和選用的 -debug 後置字串類型。

附件必須使用 JSON 格式。例如:

    {
      "title": "Example",
      "url": "https://www.example.com"
    }

JSON 格式可讓您選擇更具體的指定目標,如下所示:

    {
      "title": "Example",
      "url": "https://www.example.com",
      "targeting":[
        {
          "startDate": "2017-01-01",
          "endDate": "2017-01-31",
          "startTimeOfDay": "9:00",
          "endTimeOfDay": "17:00",
          "anyOfDaysOfWeek": [1, 2, 3, 4, 5, 6, 7],
          "anyOfAppInstallStates": ["INSTALLED", "NOT_INSTALLED"]
        }
      ]
    }

地點:

  • title:內容標題。title 的長度必須少於 40 個字元,且必須少於 50 個字元。理想情況下,您應該提供行動號召。例如,Order with your phone, skip the lineSet up your thermostatLearn more about sea otters
  • 網址 - 應用程式、網站或服務的網址。
  • target:指定規則,能夠根據裝置情況限制通知的瀏覽權限。

網址格式

「鄰近分享」通知支援三種網址格式:

網址

確切網址,就是一般網址。收到網址時,系統會提示使用者在預設瀏覽器中開啟網址。無需進行特殊的應用程式設定。網址必須使用 HTTPS,且採用一般網址的格式:

  https://www.example.com

如果您的網址無法觸發通知,最有可能的原因如下:

  • 使用 HTTP 而非 HTTPS
  • 不得連結至 play.google.com 等應用程式商店。網頁應各自獨立,且直接在到達網頁中提供實用資訊或操作。

應用程式意圖

應用程式意圖網址會用於在應用程式中觸發意圖。當應用程式意圖網址收到時,如果對應的應用程式意圖篩選器有回應,相關應用程式就會回應網址中所含的參數。如果使用者尚未安裝應用程式,系統會將他們帶往 Play 商店安裝應用程式。安裝完成後,使用者就能啟動應用程式,繼續前往開發人員指定的功能。應用程式意圖網址的格式如下:

  intent://host/path#Intent;scheme=yourscheme;package=com.yourapp.ui;end;

如要進一步瞭解如何設定意圖網址的格式,請參閱使用 Chrome 執行 Android 意圖一文。 請注意,系統不會傳遞意圖額外項目。

您也可以建立意圖,然後使用 intent.toUri(Intent.URI_INTENT_SCHEME) 來正確建構網址,如下所示:

    Intent intent = new Intent()
        .setData(new Uri.Builder()
            .scheme("yourscheme")
            .authority("host")
            .appendPath("path")
            .build())
        .setPackage("com.yourapp.ui");
    Log.i(TAG, "Use this intent url: " + intent.toUri(Intent.URI_INTENT_SCHEME));

任意形式的應用程式意圖

這個選項適用於無法比對配置、路徑和套件名稱格式的應用程式意圖。只有在您確定意圖網址的格式正確時,才能使用這個選項。

如果應用程式並未安裝 S.browser_fallback_url 參數,您可以選擇在不安裝應用程式的情況下,將使用者傳送至指定網址,而非 Play 商店:

intent://host/path#Intent;scheme=yourscheme;package=com.yourapp.ui; \
  S.browser_fallback_url=http%3A%2F%2Fm.yoursite.com%2Fpath%2F%;end;

內容比對

規則

「鄰近分享」通知支援四種指定規則:

日期

dateStartdateEnd 是用來指定顯示附件的日期範圍,採 ISO 8601 格式。以下範例顯示 2017 年 1 月的通知:

    {
      "title": "January 2017",
      "url": "https://www.example.com",
      "targeting":[
        {
          "startDate": "2017-01-01",
          "endDate": "2017-01-31"
        }
      ]
    }

使用時段

「timeOfDayStart」和「timeOfDayEnd」可用於指定附件顯示的每日時間範圍,採用 ISO 8601 格式。以下範例會顯示每天早上 9 點到下午 5 點的通知:

    {
      "title": "Work time",
      "url": "https://www.example.com",
      "targeting":[
        {
          "startTimeOfDay": "9:00",
          "endTimeOfDay": "17:00"
        }
      ]
    }

星期幾

「anyOfDaysOfWeek」可用來指定能夠顯示附件的星期幾。格式為 1(星期一) 到 7(星期日),採 ISO 8601 格式。 以下是週六和週日的通知範例:

    {
      "title": "Weekends",
      "url": "https://www.example.com",
      "targeting":[
        {
          "anyOfDaysOfWeek": [6, 7]
        }
      ]
    }

應用程式安裝狀態

「anyOfAppInstallStates」是用來根據應用程式安裝狀態設定附件瀏覽權限。這個代碼僅適用於應用程式意圖網址。以下範例顯示在未安裝應用程式的情況下的通知。

    {
      "title": "App not installed",
      "url": "intent://host/path#Intent;package=com.example",
      "targeting":[
        {
          "anyOfAppInstallStates": ["NOT_INSTALLED"]
        }
      ]
    }

規則組合

每個附件可以有多項指定目標規則。同一個指定物件的規則會以 AND 進行 AND 運算。以下範例顯示了週六到週日上午 9 點到下午 5 點的通知。

    {
      "title": "Weekend and work time",
      "url": "https://www.example.com",
      "targeting":[
        {
          "startTimeOfDay": "9:00",
          "endTimeOfDay": "17:00"
          "anyOfDaysOfWeek": [6, 7]
        }
      ]
    }

不同指定物件的規則會以 OR 結合 OR。以下範例顯示了每天早上 9 點至下午 5 點的通知,以及整天的週六和週日。

    {
      "title": "Weekend or work time",
      "url": "https://www.example.com",
      "targeting":[
        {
          "anyOfDaysOfWeek": [6, 7]
        },
        {
          "startTimeOfDay": "9:00",
          "endTimeOfDay": "17:00"
        }
      ]
    }

在應用程式中新增意圖篩選器

您必須設定應用程式,才能處理指定網址的架構、主機和路徑。 為此,您必須在 AndroidManifest.xml 中新增一個元素,以宣告符合配置、主機和路徑的 <intent-filter>,並使用類別篩選器將其標示為可瀏覽,如下所示:

  <intent-filter>
    <action android:name="android.intent.action.VIEW"/>
     <!-- both categories below are required -->
     <category android:name="android.intent.category.BROWSABLE"/>
     <category android:name="android.intent.category.DEFAULT"/>
    <data android:host="host"
          android:pathPrefix="/path"
          android:scheme="yourscheme"/>
  </intent-filter>

詳情請參閱處理應用程式連結一文。