firebase / firebase/firebase-admin-java
[FR] Expose `link` / `link_android` in notifications for deep linking
- 主要言語
- Java
- スター
- 620
- フォーク
- 305
- 平均マージ
- 3時間 23分
- マージ済み PR(30日)
- 1
説明
### Problem statement
Deep linking on Android requires the `data` field in the `Intent` to be set. As described in [this SO post](https://stackoverflow.com/questions/63378233/how-to-send-firebase-notifications-with-uris-to-implement-deep-linking) or firebase/firebase-android-sdk#6703, the only way to populate the the field in notifications created automatically by the Firebase Android SDK (when the app is in the background) is by setting the `gcm.n.link` or `gcm.n.link_android` keys in `data`, which have reserved prefixes and are therefore not _supposed_ to be used (although setting them works, at least today).
_Originally posted by @lehcar09 in [#6703](https://github.com/firebase/firebase-android-sdk/issues/6703#issuecomment-2666361645)_:
> Alternatively, we can file a feature request to support the `link` or `link_android` field. I’ll get back to you once I hear back from them.
So, this is the FR to officially support these :)
### Strawman
A strawman proposal would be to add `link` properties to the `Notification` / `AndroidNotification` classes, which would then be mapped to `gcm.n.link` / `gcm.n.link_android` in the JSON payload. Equivalently, in the HTTP API instead of this:
```JSON
{
"message": {
"notification": {
"title": "Lorem",
"body": "Ipsum"
},
"data": {
"gcm.n.link": "app://deep/link"
},
}
}
```
It would be this:
```JSON
{
"message": {
"notification": {
"title": "Lorem",
"body": "Ipsum",
"link": "app://deep/link"
}
}
}
```
or this:
```JSON
{
"message": {
"android": {
"notification": {
"title": "Lorem",
"body": "Ipsum",
"link": "app://deep/link"
}
}
}
}
```
### Alternatives
The workaround suggested [here](https://github.com/firebase/firebase-android-sdk/issues/6703#issuecomment-2683556930) of using `setAction` doesn't work, because actions needs to be declared in the Android manifest in order to match the intent, which conflicts with dynamically registering deep link targets.
Thanks!
コントリビューションガイド
調査の方向性
まず、Notification クラスと AndroidNotification クラス、および HTTP API ペイロードのマッピングを見つけます。既存の通知プロパティがどのようにシリアライズされるかを確認し、次に link と link_android を gcm.n.link と gcm.n.link_android にどのようにマッピングすべきかを判断します。公式にサポートされているフィールドによって、必要なディープリンク通知ペイロードが生成されれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- firebase, java
- 領域
- api, backend-api-design
- issue の種類
- 機能追加
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 活発さ
- 静か
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 45/100