React Nativeで文字列のサイズを調べる
2023-07-13
Measuring Strings Size in React Native.
iOSのプッシュ通知は4KBまでのメタデータしか送信できない
React Nativeのアプリ運用中に、プッシュ通知が受け取れたり受け取れなかったりする現象に遭遇しました。特に送信するデータが大きい場合に発生するとのこと。調べたところiOSの最大ペイロードサイズは4096バイトまでということでした。
For all other remote notifications, the maximum payload size is 4 KB (4096 bytes).
ペイロードのサイズを調べる
というわけで、送信しようとしているデータのサイズを調べるコードを書いて確認しました。
与えられた文字列が何キロバイトかを調べる関数
const getKilobyteSize = ({str}) => {
const byteLength = new Blob([str]).size;
const kilobytes = (byteLength / 1024).toFixed(2);
return `${kilobytes}KB`;
};
結果
文字列を与えた場合
const str = "Hello, こんにちは!";
const kilobyteSize = getKilobyteSize({str: str});
console.log({str, kilobyteSize}); // {"kilobyteSize": "0.02KB", "str": "Hello, こんにちは!"}
オブジェクトを与えた場合
const obj = {
name: 'name1',
age: 15,
}
const kilobyteSize = getKilobyteSize({str: obj});
console.log({obj, kilobyteSize}); // {"kilobyteSize": "0.01KB", "obj": {"age": 15, "name": "name1"}}
配列を与えた場合
const array = ['name1', 'name2', 'name3']
const kilobyteSize = getKilobyteSize({str: array});
console.log({array, kilobyteSize}); // {"array": ["name1", "name2", "name3"], "kilobyteSize": "0.02KB"}
まとめ
文字列に限らず何でも測定できる模様。上述した不具合自体はやはり4KBを超えていたのが原因でした。余計なデータをペイロードに含めないようにして解決しました。