Googleの短縮URLサービスが終了するのでFirebase Dynamic Linksに移行する

Google URL Shortener サービスが2019年3月30日に終了するみたいですね。Google URL Shortener API を使って URL を短縮しているシステムは別の道を探さなくてはなりません。bit.ly や ow.ly への移行が推奨されていますが、商用利用の場合は月額費用がネックに…。開発者の端くれとして Firebase Dynamic Links (FDL) の REST API を使用してみましたので、手順をご紹介します。

_2019.02.02 firebase.google.com のUI変更に伴い、内容を一部改めました。_

## 準備

### プロジェクトの作成

1. [Firebase (https://firebase.google.com/)](https://firebase.google.com/) にアクセスする。

1. Googleアカウントでログインしていない場合は、「ログイン」を押下してログイン処理を行います。後述するウェブ API キーは、この Google アカウントに紐付きます。
![](https://qiita-image-store.s3.amazonaws.com/0/244351/7eb011af-3080-1870-b4fd-da59471b3b76.jpeg)

1. 「プロジェクトを追加」を押下します。
![](https://qiita-image-store.s3.amazonaws.com/0/244351/0b096924-73a6-a4a3-84b9-84079bda514f.jpeg)

1. 任意のプロジェクト名を入力し、アナリティクスの地域に「日本」、Cloud Firestoreのローケーションに「asia-northeast1」を選択します。「測定管理者間のデータ保護条項に同意します…」にチェックを入れて、「プロジェクトを作成」を押下します。
![](https://qiita-image-store.s3.amazonaws.com/0/244351/11e32fce-a472-d066-9d06-f2688e534305.png)


### ウェブ API キーの確認

1. 左側ペインより「Project Overview」右の歯車を押下し、「設定」を押下します。
![](https://qiita-image-store.s3.amazonaws.com/0/244351/144e5679-c78a-4f69-62a8-24acc325a3dc.png)


1. ウェブ API キーの値を控えます。
![](https://qiita-image-store.s3.amazonaws.com/0/244351/b0e0aeb3-933f-d65e-07ad-32c5f67caafc.png)


### Dynamic Links の取得

短縮 URL を取得したいだけでアプリへの誘導は不要ですが、Dynamic Links を取得するために登録だけします。

1. 左側ペインより「Project Overview」を押下し、「iOS」を押下します。
![スクリーンショット 2019-02-02 9.10.11.png](https://qiita-image-store.s3.amazonaws.com/0/244351/538936af-bfc7-3398-8b43-16cd82a8f878.png)

1. iOS バンドル ID に任意のIDを入力し、「アプリを登録」を押下します。
![](https://qiita-image-store.s3.amazonaws.com/0/244351/0e2c1958-89fe-47ab-ca1c-486e3d6a14b1.png)

1. あとは「続行」「続行」「終了」でサクッと終わらせます。終わったら「このステップをスキップ」を押下します。
![](https://qiita-image-store.s3.amazonaws.com/0/244351/9ee4318e-b92a-dbb4-584b-e3701cb578b5.png)


1. 左側ペインより「拡大」-「Dynamic Links」を押下し、「始める」を押下します。
![スクリーンショット 2019-02-02 9.44.17.png](https://qiita-image-store.s3.amazonaws.com/0/244351/d1942c9f-e3b7-3774-adf7-4d6a352b39b4.png)

1. 任意のサブドメインを入力し、「続行」を押下します。
![](https://qiita-image-store.s3.amazonaws.com/0/244351/31f4c4b1-7773-2802-7f6b-7e26a22ba34a.png)

1. 「終了」を押下します。
![](https://qiita-image-store.s3.amazonaws.com/0/244351/87c431a0-9e6a-1ce4-fc33-3854aba96f03.png)

1. Dynamic Links を控えます。
![](https://qiita-image-store.s3.amazonaws.com/0/244351/ec699d35-6e7b-69b8-db33-eb86ea9cd2dd.png)



## API を叩く

いよいよシステム上で短縮 URL を取得します。PHP を使用します。短縮したい URL を引数に渡して `getShortUrl` 関数を実行すると、短縮URLを返してくれます。

```getShortUrl.php
<?php

function getShortUrl($long_url) {

  // -----------------------------------------------------------
  // config
  // -----------------------------------------------------------

   // ウェブAPIキーを記述してください
  $web_api_key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';

  // ダイナミックリンクURLを記述してください
  $dynamic_link_domain = 'https://YYYYYYYYYYYYYY.page.link';

  // -----------------------------------------------------------
  // 処理
  // -----------------------------------------------------------

  // 短縮URLの設定
  $url = 'https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=' . $web_api_key;
  $data = array(
    "dynamicLinkInfo" => array(
      "domainUriPrefix" => $dynamic_link_domain,
      "link" => $long_url
    ),
    "suffix" => array(
      "option" => "SHORT"
    )
  );

  // POST
  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
  curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  $result = curl_exec($ch);
  curl_close($ch);

  // 短縮URLを取り出す
  $result_obj = json_decode($result);
  $short_url = $result_obj->shortLink;

  return($short_url);
}
```

## 参考
https://firebase.google.com/docs/dynamic-links/rest
https://www.smartllc.jp/blog/20150811-how-to-post-json-in-php/