タイル、トースト、バッジ通知のトラブルシューティング (Windows ランタイム アプリ)
[ この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、「最新のドキュメント」をご覧ください]
このトピックでは、タイル通知、トースト通知、バッジ通知で問題が発生したときに最初に行うトラブルシューティング手順を説明します。各種の通知方法 (ローカル通知、プッシュ通知、定期的な通知、スケジュールされた通知) を取り上げています。
タイル通知のトラブルシューティング
ここでは、タイルおよびタイル テンプレートの使用中に発生する可能性のある一般的なエラーの対処方法について説明します。特に指定がない限り、各解決方法は通知配信の全種類 (ローカル通知、スケジュールされた通知、定期的な通知、プッシュ通知) に適用されます。
ローカル タイル通知が表示されない
この状況での最も一般的な問題は、通知の定義に使われている XML に何か誤りがあることです。ただし、考えられる原因はほかにもあります。以下の手順では、それらの点についても取り上げます。
- ユーザー設定を確認する
- アプリ マニフェストでワイドまたは大サイズのロゴ リソースを指定する
- 画像サイズを確認する
- URL を確認する
- 画像形式を調べる
- XML の構文を確認する
- 通知の有効期限を確認する
- 通知キューが有効になっていることを確認する
ユーザー設定を確認する
考えられる原因: ユーザーまたは管理者が通知を無効にしています。アプリのアプリ バーに、[ライブ タイルをオンにする]/[ライブ タイルをオフにする] オプションがあるかどうかを調べ、このオプションが "オフ" になっていないことを確認します。管理者の場合、通知を無効にできるグループ ポリシーがいくつかあります。管理者に問い合わせて、通知が有効になっていることを確認してください。
解決方法: アプリ バーによって通知を有効にするか、グループ ポリシーを使って通知を有効にするよう管理者に依頼します。
詳しくは、「TileUpdater.setting」をご覧ください。
アプリ マニフェストでワイドまたは大サイズのロゴ リソースを指定する
考えられる原因: 通知に指定されたタイル サイズに対応する既定のタイル リソース画像がアプリ マニフェストに指定されていません。たとえば、既定のワイド タイル画像が指定されていない場合、ワイド形式の通知テンプレートはタイルに表示されません。通知の到着時にどのようなサイズでタイルが表示されるかは送信側にはわからないため、タイル通知の通知ペイロードには、想定されるすべてのタイル サイズのテンプレートを用意しておくことをお勧めします (タイルに中サイズの画像だけを意図的に使う場合を除く)。この設定は、ユーザーに委ねられています。
解決方法: 通知ペイロードで、マニフェストで指定した既定のロゴ イメージの各種類用の更新のバージョンを用意します。タイルは、既定のロゴ イメージを持つ任意のサイズに変えることができます。
画像サイズを確認する
考えられる原因: 通知の各画像は 1024 x 1024 ピクセル未満かつサイズが 200 KB 未満である必要があります。通知に含まれる画像がこれらのサイズを超えた場合、その通知は破棄されます。
解決方法: 画像を圧縮します。
詳しくは、「タイルとトーストの画像サイズ」をご覧ください。
URL を確認する
考えられる原因: URL の構文エラーです。
通知に含まれる画像は、リソース参照またはリテラル パスを通じて指定されます。パスを使う場合は、次の 3 つのプロトコルのいずれかを使って指定する必要があります。
プレフィックス | 用途 | メモ |
---|---|---|
http:// と https:// | オンラインで保存されている画像 | これらの画像はローカルにキャッシュされることがあるため、画像サーバーが画像の要求を受け取らない場合があります。これらの URL の末尾には、クエリ文字列が追加されることがあります。クエリ文字列を無視する場合は、Web サーバーから 404 ではなく元の画像が返されていることを確かめます。クエリ文字列の例: ?scale=100&contrast=blk&lang=en-US 通知の内容をインターネットから取得するには、アプリのアプリ マニフェストで "インターネット (クライアント)" 機能を宣言する必要があります。 |
ms-appx:/// | アプリのパッケージに含まれている画像 | これらの画像は、アプリのインストールの一部です。この参照では、コロンの後にトリプル スラッシュが必要です。そのトリプル スラッシュの後の Uniform Resource Identifier (URI) は、パスに含まれるフォルダーの区切り文字としてスラッシュ (/) と円記号 (\) のどちらも受け入れますが、ほとんどのプログラミング言語では、円記号を指定するときにエスケープ文字 (\\) を使う必要があります。 |
ms-appdata:///local/ | アプリによってローカルに保存されている画像 | この場所は、Windows.Storage.ApplicationData.current.localFolder によって返されるフォルダーに対応しています。この参照では、コロンの後にトリプル スラッシュが必要です。パスに含まれるフォルダーの区切り文字では、エスケープ文字 (\\) を使う必要があります。 |
注 スラッシュ (/) は、どの仕様の種類でも区切り文字として機能します。誤ってエスケープ文字と混同しないように、"\" ではなく、常に "/" を使うことをお勧めします。
適切な形式の例:
URL |
---|
https://www.contoso.com/icon.jpg |
ms-appx:///images/icon.png |
ms-appdata:///local/myDrawing.jpg |
誤った形式の例:
URL | コメント |
---|---|
https://www.contoso.com\fail.png | HTTP のパスではスラッシュ (/) を使う必要があります。円記号 (\) は使わないでください。 |
http:www.contoso.com | HTTP のパスでは、コロンの後にダブル スラッシュ (//) が必要です。 |
"ms-appdata:///local/c:\\images\\Drawing.jpg" | アプリでは、ローカル ストレージの外部にある画像を参照することはできません。 |
"ms-appx://images/triangle.png" | "ms-appx:" では、ダブル スラッシュではなくトリプル スラッシュを使います。 |
画像形式を調べる
考えられる原因: 画像がサポートされていない形式です。
通知で使うことができるのは、.gif 形式、png 形式または .jpg/.jpeg 形式の画像だけです。また、画像の形式が拡張子と一致している必要があります。サポートされていないファイルの種類をサポートされている拡張子に変更するだけでは機能しません。
画像形式エラーの最も一般的な原因は、Windows.Storage.ApplicationData.current.localFolder ストレージへのビットマップのシリアル化です。優先形式を必ず呼び出してください。そうしないと、画像は Windows ビットマップとして保存され、ヘッダーに "BMP" が含まれるようになります。これは、サポートされていない形式です。
確認方法: まず、テキストのみの通知を問題なく送信できることを確認し、問題の原因を画像に絞り込みます。画像形式を確認する 1 つの方法として、画像を画像処理プログラムに読み込み、.jpg として保存します。通知でこの新しい .jpg ファイルを参照し、同じエラーが発生しなくなった場合は、画像形式エラーであったと考えられます。また、Microsoft Visual Studio バイナリ エディターでファイルを開き、ヘッダーを調べることもできます。
解決方法: 画像形式を変更または修正します。
XML の構文とコンテンツを確認する
考えられる原因: XML の構文エラーまたは検証エラーです。
基本構文は別として、XML が完成していて正しいことを確認します。特に、API や NotificationsExtensions ライブラリを使わずに文字列としてペイロードを構築した場合は、確認が必要です。XML コンテンツでよく見られる誤りは、次のとおりです。
- 大文字小文字の区別。タグ名、属性名、属性値は、すべて大文字小文字が区別されます。XML の大文字小文字が正しく入力されていることを確認します。
- binding 要素は、タイル サイズごとに指定する必要があります。送信する各通知でサポートするタイル サイズごとに binding 要素 (つまり、マニフェストで指定したロゴ イメージ) を指定する必要があります。
- テキスト文字列に予約済みの XML 文字を含めることはできません。たとえば、<i> タグと </i> タグを使ってタイルの文字列を斜体にすることはできません。リテラル文字 "<i>" を示す場合は、正しくエスケープする必要があります。XML のエスケープ文字について詳しくは、XML 文字エンティティと XAML に関するページをご覧ください。
- lang 属性に指定する値は、ITEF BCP 47 仕様に準拠している必要があります。
- ローカルで作られる XML 文字列 (ローカル通知またはスケジュールされた通知の場合) では、UTF-16 エンコードを使う必要があります。プッシュ通知を使って送る場合や URL からポーリングする場合は、文字列で UTF-8 エンコードを使います。
- XML ペイロードに、空でない src 属性と共に image 要素を含める場合は、有効な画像への参照を必ず含める必要があります。そうしないと通知は破棄されます。
タイル通知が表示されない場合、イベント ログを使ってエラーの有無を確認できます。イベント ビューアーで、[アプリケーションとサービス ログ] > [Microsoft] > [Windows] > [アプリ] > [Microsoft-Windows-TWinUI/稼働中] の順に展開し、タイル通知に関連するイベントを探します。
確認方法: XML 構文チェッカー (Visual Studio エディターなど) を使って、基本構文エラーを探します。該当するテンプレート参照 (TileTemplateType) を調べて、画像の数が正しいことと、適切な画像を適切なイメージ インデックスに割り当てていることを確認します。
解決方法: XML を変更するか、コンテンツに適合する別のテンプレートを使います。また、XML の直接操作を避けるために NotificationsExtensions ライブラリを使うことを検討します。
通知が期限切れになっていないことを確認する
考えられる原因: 有効期限が小さすぎる値に設定されています。
expirationTime メソッド (ローカル通知の場合)、または X-WNS-TTL ヘッダー フィールド (プッシュ通知の場合) を使って通知の有効期限を設定する場合は、値がミリ秒単位であることに注意してください。たとえば、タイル通知をちょうど 1 時間継続する場合は、値として 3600000 (60 * 60 * 1000 = 3600000) を指定する必要があります。
解決方法: 大きな値を使います。
通知を循環させる場合は通知キューが有効になっていることを確認する
考えられる原因: タイルの通知キューが有効になっていません。
既定では、タイルに表示される更新データは一度に 1 つに限られており、新しい着信通知によって既存の通知が置き換えられます。最新の 5 つの通知を順番に表示する場合は、アプリの開始コードで TileUpdater.enableNotificationQueue(true) を呼び出す必要があります。これは、アプリの有効期間に 1 回だけ実行する必要があります。詳しくは、「ローカル通知で通知キューを使用する方法」を参照してください。
解決方法: 初期化コードで enableNotificationQueue(true) を呼び出します。また、通知タグが一意であることを確認します。
スケジュールされた通知のトラブルシューティング
スケジュールされたタイルまたはトーストが表示されない
考えられる原因: タイルの更新またはトースト通知が表示されない問題が発生した場合、その大半は通知の XML コンテンツが正しい形式ではないことが原因となっています。スケジュールされていない通知と同様に、スケジュールされたタイル通知とトースト通知は、タイルとトーストの XML スキーマに準拠している必要があります。
解決方法: スケジュールされた通知の配信の問題をデバッグするときは、まずローカル通知を使って XML をテストします。詳しくは、このトピックの「ローカル タイル通知が表示されない」または「ローカル トースト通知が表示されない」のセクションをご覧ください。
アプリの AddToSchedule メソッド呼び出しが失敗する
考えられる原因: スケジュールされた通知の最大許容数を超えています。
解決方法: 4096 個を超える通知をスケジュールしようとした場合、TileUpdater.addToSchedule と ToastNotifier.addToSchedule はいずれも失敗します。スケジュールされた通知の数を減らします。
考えられる原因: 通知がシステム クロックの現在時刻を基準として過去の時刻にスケジュールされています。
解決方法: スケジュールされた通知の時刻が将来の時刻であることを確認します。システム クロックの時刻を調べます。
定期的な (ポーリング) 通知のトラブルシューティング
定期的な通知でタイルまたはバッジが更新されない
定期的な通知の表示の妨げとなる可能性のある、次のような問題が発生する場合があります。
- Web サービスがタイルの XML スキーマに準拠した有効な XML ドキュメントを返していません。定期的な通知の実装中に問題が発生した場合は、タイルの XML が正しい形式であることをまず確認します。定期的な通知に関する問題をデバッグするときは、まずローカル通知を使って XML をテストすることをお勧めします。詳しくは、このトピックの「ローカル タイル通知が表示されない」と、「クイック スタート: タイルの更新の送信」のセクションをご覧ください。
- ポーリング要求から返されたテキストが UTF-8 形式ではありません。UTF-8 エンコードが必要です。
- サービスに提供された URL をポーリングしたときに、サービスが Windows で使われる HTTP GET 要求に正しく応答していません。HTTP プロトコルと HTTPS プロトコルの両方がサポートされています。
- アプリのアプリ マニフェスト ファイル (package.appxmanifest) でインターネット機能が宣言されていません。Visual Studio マニフェスト エディターでは、[機能] タブの [インターネット (クライアント)] としてこのオプションが用意されています。アプリでこの機能が宣言されていない場合、Windows はサービスをポーリングしません。
- X-WNS-Tag ヘッダーと X-WNS-Expires ヘッダーで設定する値の書式が正しく設定されていることを確かめてください。X-WNS-Expires では次の形式のいずれかを使う必要があります。
- Sun, 06 Nov 1994 08:49:37 GMT
- Sunday, 06-Nov-94 08:49:37 GMT
- Sun Nov 6 08:49:37 1994
定期的な更新が遅延する
- Windows では、電力とパフォーマンスを最適化する必要がある場合に、URL のポーリングを最大 15 分遅延させることがあります。
- URL にアクセスしたときに、サービスを利用できませんでした。サービスを利用できない場合、次のポーリング間隔までサービスには接続しません。
トラブルシューティング,プッシュ通知
ここでは、プッシュ通知の使用中に発生する可能性のある一般的なエラーの対処方法について説明します。
- イベント ログを調べる
- プッシュ通知で "200 OK" という応答を受け取ったが、プッシュ通知が表示されない
- プッシュ通知で "200 OK" 以外のコードが返される
- プッシュ通知チャネルを作成しようとしたときに発生するエラー
イベント ログを調べる
タイルまたはトースト プッシュ通知が期待どおりに表示されない場合は、イベント ログを調べてください。
- 通知が受信されるが表示されない場合: イベント ビューアーを起動し、アプリケーションとサービス\Microsoft\Windows\アプリの Microsoft-Windows-TWinUI/Operational ログを調べてください。
- 通知が受信されない場合: イベント ビューアーを起動し、アプリケーションとサービス\Microsoft\Windows\PushNotifications-Platform の操作ログを調べてください。
プッシュ通知で "200 OK" という応答を受け取ったが、プッシュ通知が表示されない
Windows プッシュ通知サービス (WNS) から "200 OK" という応答が返された場合、クライアントがオンラインであれば、クライアントに通知が配信されます。クライアントがオンラインであることは確認済みであるにもかかわらず、通知が表示されない場合は、次の手順に従います。
原因: 通知の内容に XML エラーがあります。
解決方法: XML の基本構文を検証し、XML が完成していて正しいことを確認します。XML コンテンツでよく見られる誤りは、次のとおりです。
- 大文字小文字の区別。タグ名、属性名、属性値は、すべて大文字小文字が区別されます。XML の大文字小文字が正しく入力されていることを確認します。
- binding 要素は、サポートされているタイル形式ごとに指定する必要があります。送信する各通知でサポートするタイル サイズごとに binding 要素を指定する必要があります。
- テキスト文字列に予約済みの XML 文字を含めることはできません。たとえば、<i> タグと </i> タグを使ってタイルまたはトーストの文字列を斜体にすることはできません。リテラル文字 "<i>" を示す場合は、正しくエスケープする必要があります。XML のエスケープ文字について詳しくは、XML 文字エンティティと XAML に関するページをご覧ください。
- lang 属性に指定する値は、ITEF BCP 47 仕様に準拠している必要があります。
- プッシュ通知を使って送る XML 文字列では、UTF-8 エンコードを使う必要があります。
- XML ペイロードに、空でない src 属性と共に image 要素を含める場合は、有効な画像への参照を必ず含める必要があります。そうしないと通知は破棄されます。
詳しくは、タイル、トースト、バッジのスキーマに関するドキュメントを参照してください。
原因: プッシュ通知 API のパラメーターが正しく使われていません。
解決方法: 仕様については、Windows.Networking.PushNotifications 名前空間の API ドキュメントを参照してください。
原因: ヘッダーの種類が通知の内容と一致していません。X-WNS-Type ヘッダーがペイロードで指定された通知テンプレートに対応する値 (タイル、バッジ、またはトースト) に設定されていない場合、通知は表示されません。この不一致に起因してクライアントでエラーが発生すると、通知は破棄されます。
解決方法: 「プッシュ通知サービスの要求ヘッダーと応答ヘッダー」を参照して、アプリ サーバーで X-WNS-Type ヘッダーに正しい値が使われていることを確認します。
原因: X-WNS-TTL ヘッダーで設定されている Time to Live (TTL) 値が小さすぎます。
解決方法: TTL 値を大きくします。値の指定単位は秒です。
前の手順で示した各項目に対処した後も引き続き通知が表示されない場合、他の解決方法については、このトピックの「ローカル タイル通知が表示されない」セクションにあるローカル通知のトラブルシューティング手順をご覧ください。
プッシュ通知で "200 OK" 以外のコードが返される
WNS から "200 OK" が返されない場合、クライアントに通知は配信されません。リターン コードが 400 番台の場合は、開発者が問題を解決できます。特定のコードの意味については、Windows プッシュ通知サービス (WNS) 応答コード リファレンスを参照してください。これらのエラーをキャッチして処理する方法を示すコード例については、「クイック スタート: プッシュ通知の送信」をご覧になるか、プッシュ通知と定期的な通知のサンプルをダウンロードしてください。
注 ここの一覧に記載されていないエラーについては、「COM Error Codes (WPN, MBN, P2P, Bluetooth)」をご覧ください。
- 通知要求で "400 Bad Request" が返される
- 通知要求で "401 Unauthorized" が返される
- 通知要求で "401 Unauthorized" が返され、トークンが期限切れになっている
- 通知要求で "403 Forbidden" が返される
- 通知要求で "404 Not Found" が返される
- 通知要求で "406 Not Acceptable" が返される
- 通知要求で "410 Gone" が返される
通知要求で "400 Bad Request" が返される
原因: 1 つ以上の WNS ヘッダーが正しく使われていない可能性があります。または、HTTP 要求が無効です。
解決方法: アプリ サーバーで、すべてのカスタム ヘッダーが「プッシュ通知サービスの要求ヘッダーと応答ヘッダー」の説明どおりに使われていることを確認します。
通知要求で "401 Unauthorized" が返される
原因: アプリ サーバーでは、アプリの登録時に提供された正しいパッケージ セキュリティ識別子 (パッケージ SID) とシークレット キーを使う必要があります。Windows ストア ダッシュボードで最近シークレット キーを変更した場合は、アプリ サーバーも更新する必要があります。詳しくは、「プッシュ通知の概要」を参照してください。
解決方法: Windows ストア ダッシュボードにアクセスして、パッケージ SID とシークレットを確認します。
通知要求で "401 Unauthorized" が返され、トークンが期限切れになっている
原因: アクセス トークンの有効期間は限られています。期限切れのアクセス トークンを使って通知を送っても、アプリ サーバーの資格情報が無効であるため、通知を送ることができません。
解決方法: パッケージ セキュリティ識別子 (パッケージ SID) とシークレット キーを使って WNS に対する認証を行い、WNS から新しいアクセス トークンを要求します。詳しくは、「Windows プッシュ通知サービス (WNS) の概要」をご覧ください。
通知要求で "403 Forbidden" が返される
原因: 提示したアクセス トークンが、対応するチャネルの URL に通知を送るために必要な資格情報と一致していない場合に、このエラーが発生します。アプリ サーバーの資格情報を受け取るには、すべてのアプリを Windows ストアに登録する必要があります。各アプリに通知を送るときに使うことができるのは、Windows ストアから提供された資格情報だけです。また、資格情報は、それぞれ特定のアプリにのみ使用できます。
解決方法: 開発者アカウントを使って Windows ストア ダッシュボードにログインします。アプリを選び、[高度な機能]、[クラウド サービスの設定を管理する] の順にクリックします。[アプリの識別] を選び、クラウド サービスの資格情報と一致するようにアプリ マニフェストを更新する手順を確認します。
通知要求で "404 Not Found" が返される
原因: 通常、このエラーはチャネルの URL が正しい形式ではないことを意味します。WNS に通知を送るときに、チャネルの URL を改ざんまたは変更することは禁止されています。チャネルの URL は、常にわかりにくい文字列として扱う必要があります。文字列の内容を調べたり、内容を知る必要はありません。
解決方法: コードによって、チャネルの URL に含まれる 1 つ以上の文字またはエンコードが変更されていないことを確認します。
通知要求で "406 Not Acceptable" が返される
原因: 悪意のあるアプリが他のユーザーや開発者向けのサービスに悪影響を及ぼすのを防ぐために、WNS には保護ポリシーがあります。非常に短い期間に過剰な数の通知が発生すると、WNS はそれらの通知を明示的に破棄する場合があります。
解決方法: 通知の頻度を確認して、ユーザー エクスペリエンスを向上させるために頻度を減らすか、最適化できないかどうかを検討します。
通知要求で "410 Gone" が返される
原因: チャネルの URL が期限切れになっています。アプリを実行し、チャネルの新しい URL を要求するまで通知を送ることはできません。
解決方法: Windows ストア アプリでは、アプリの起動時にチャネルの URL を必ず要求する必要があります。割り当てられているチャネルの URL は、常に同じであることが保証されているわけではありません。URL が変更されている場合、クライアントはクラウド サーバー上の情報を更新する必要があります。詳しくは、「通知チャネルを要求、作成、保存する方法」をご覧ください。
プッシュ通知チャネルを作成しようとしたときに発生するエラー
- 通知チャネルを作ると ERROR_NO_NETWORK エラーが発生する
- 通知チャネルを作ると WPN_E_CLOUD_INCAPABLE エラーが発生する
- 通知チャネルを作ると WPN_E_INVALID_APP エラーが発生する
注 ここの一覧に記載されていないエラーについては、「COM Error Codes (WPN, MBN, P2P, Bluetooth)」をご覧ください。
通知チャネルを作ると ERROR_NO_NETWORK エラーが発生する
原因: WNS では、通知チャネルを作るときにインターネット接続を必要とします。
解決方法: インターネット接続を確認します。
通知チャネルを作ると WPN_E_CLOUD_INCAPABLE エラーが発生する
原因: アプリのアプリ マニフェスト (package.appxmanifest) でインターネット機能が宣言されていません。
解決方法: アプリ マニフェストでインターネット機能が宣言されていることを確かめます。Visual Studio マニフェスト エディターでは、[機能] タブの [インターネット (クライアント)] としてこのオプションが用意されています。詳しくは、「Capabilities」をご覧ください。
通知チャネルを作ると WPN_E_INVALID_APP エラーが発生する
原因: アプリで有効なパッケージ名を使う必要があります。パッケージ名をまだ受け取っていない場合は、[高度な機能] にある Windows ストア ポータルから取得できます。
解決方法: Windows ストア アプリのパッケージ セキュリティ識別子 (PKSID) を取得する方法について詳しくは、「Windows プッシュ通知サービス (WNS) に対して認証する方法」をご覧ください。
トースト通知のトラブルシューティング
ここでは、トーストおよびトースト テンプレートの使用中に発生する可能性のある一般的なエラーの対処方法について説明します。トースト通知で使うトラブルシューティング手順の大半は、タイル通知で使う手順と同じです。特に指定がない限り、各解決方法は通知配信の全種類 (ローカル通知、スケジュールされた通知、プッシュ通知) に適用されます。
ローカル トースト通知が表示されない
この状況での最も一般的な問題は、通知の定義に使われている XML に何か誤りがあることです。ただし、考えられる原因は他にもあります。ここでは、以下の手順について説明します。
- ユーザー設定を確認する
- アプリ マニフェストのエントリを確認する
- 画像サイズを確認する
- URL を確認する
- 画像形式を調べる
- XML の構文を確認する
- 通知の有効期限を確認する
ユーザー設定を確認する
考えられる原因: ユーザーまたは管理者が設定によって通知を無効にしています。[PC 設定] -> [通知] ページで、グローバル通知のオン/オフ スイッチとアプリケーションごとのオン/オフ スイッチを確認します。管理者の場合、通知を無効にできるグループ ポリシーがいくつかあります。管理者に問い合わせて、通知が有効になっていることを確認してください。
解決方法: 設定によって通知を有効にするか、グループ ポリシーを使って通知を有効にするよう管理者に依頼します。
詳しくは、「クイック スタート: トースト通知の送信」をご覧ください。
アプリ マニフェストのエントリを確認する
考えられる原因: アプリ マニフェストで、トースト配信を有効にするための適切な情報が設定されていません。アプリ マニフェストの "トースト対応" 設定が "はい" に設定されていることを確認します。通知の内容 (画像など) をインターネットから取得する場合は、アプリ マニフェストで "インターネット (クライアント)" 機能が宣言されていることを確認します。
解決方法: アプリ マニフェストで通知固有のエントリを有効にします。
詳しくは、「クイック スタート: Visual Studio マニフェスト エディターを使用した既定のタイルの作成」をご覧ください。
画像サイズを確認する
考えられる原因: どの通知でも、画像は 1024 x 1024 ピクセル未満かつサイズが 200 KB 未満である必要があります。通知に含まれる画像がこれらのサイズを超えた場合、その通知は破棄されます。
解決方法: 画像を圧縮します。
詳しくは、「タイルとトーストの画像サイズ」をご覧ください。
URL を確認する
考えられる原因: URL の構文エラーです。
通知に含まれる画像は、リソース参照またはリテラル パスとして提供されます。パスを使う場合は、次の 3 つのプロトコルのいずれかを使って指定する必要があります。
プレフィックス | 用途 | メモ |
---|---|---|
http:// と https:// | オンラインで保存されている画像 | これらの画像はローカルにキャッシュされることがあるため、イメージ サーバーが画像の要求を受け取らない場合があります。これらの URL の末尾には、クエリ文字列が追加されます。クエリ文字列を無視する場合は、Web サーバーから 404 ではなく元の画像が返されていることを確認します。クエリ文字列の例: ?scale=100&contrast=blk&lang=en-US 通知の内容をインターネットから取得するには、アプリのアプリ マニフェストで "インターネット (クライアント)" 機能を宣言する必要があります。 |
ms-appx:/// | アプリのパッケージに含まれている画像 | URI では、パスに含まれるフォルダーの区切り文字としてスラッシュ (/) と円記号 (\) のどちらも受け入れますが、ほとんどのプログラミング言語では、円記号を指定するときにエスケープ文字 (\\) を使う必要があります。この参照では、 コロンの後にトリプル スラッシュが必要です。 |
ms-appdata:///local/ | アプリによってローカルに保存されている画像 | この場所は、Windows.Storage.ApplicationData.current.localFolder によって返されるフォルダーに対応しています。パスに含まれるフォルダーの区切り文字では、エスケープ文字 (\\) を使う必要があります。この参照では、コロンの後にトリプル スラッシュが必要です。 |
注 スラッシュ (/) は、どの仕様の種類でも区切り文字として機能します。誤ってエスケープ文字と混同しないように、"\" ではなく、常に "/" を使うことをお勧めします。
適切な形式の例:
URL |
---|
https://www.contoso.com/icon.jpg |
ms-appx:///images/icon.png |
ms-appdata:///local/myDrawing.jpg |
誤った形式の例:
URL | コメント |
---|---|
https://www.contoso.com\fail.png | HTTP のパスではスラッシュ (/) を使う必要があります。円記号 (\) は使わないでください。 |
http:www.contoso.com | HTTP のパスでは、コロンの後にダブル スラッシュ (//) が必要です。 |
"ms-appdata:///local/c:\\images\\Drawing.jpg" | アプリでは、ローカル ストレージの外部にある画像を参照することはできません。 |
"ms-appx://images/triangle.png" | "ms-appx:" では、ダブル スラッシュではなくトリプル スラッシュを使います。 |
画像形式を調べる
考えられる原因: 画像がサポートされていない形式です。
通知で使うことができるのは、.png 形式、.jpg/.jpeg 形式または .gif 形式の画像だけです。また、画像の形式が拡張子と一致している必要があります。サポートされていないファイルの種類をサポートされている拡張子に変更するだけでは機能しません。
画像形式エラーの最も一般的な原因は、Windows.Storage.ApplicationData.current.localFolder ストレージへのビットマップのシリアル化です。優先形式を必ず呼び出してください。そうしないと、画像は Windows ビットマップとして保存され、ヘッダーに "BMP" が含まれるようになります。
確認方法: 画像形式を確認する 1 つの方法として、画像を画像処理プログラムに読み込み、.jpg として保存します。通知でこの新しい .jpg ファイルを参照し、同じエラーが発生しなくなった場合は、画像形式エラーであったと考えられます。また、Visual Studio バイナリ エディターでファイルを開き、ヘッダーを調べることもできます。
解決方法: 画像形式を変更または修正します。
XML の構文とコンテンツを確認する
考えられる原因: XML の構文エラーまたは検証エラーです。
基本構文は別として、XML が完成していて正しいことを確認します。XML コンテンツでよく見られる誤りは、次のとおりです。
- 大文字小文字の区別。タグ名、属性名、属性値は、すべて大文字小文字が区別されます。XML の大文字小文字が正しく入力されていることを確認します。
- テキスト文字列に予約済みの XML 文字を含めることはできません。たとえば、<i> タグと </i> タグを使ってトーストの文字列を斜体にすることはできません。リテラル文字 "<i>" を示す場合は、正しくエスケープする必要があります。XML のエスケープ文字について詳しくは、XML 文字エンティティと XAML に関するページをご覧ください。
- lang 属性に指定する値は、ITEF BCP 47 仕様に準拠している必要があります。
- ローカルで作られる XML 文字列 (ローカル通知またはスケジュールされた通知の場合) では、UTF-16 エンコードを使う必要があります。プッシュ通知を使って送る場合や URL からポーリングする場合は、文字列で UTF-8 エンコードを使います。
- XML ペイロードに、空でない src 属性と共に image 要素を含める場合は、有効な画像への参照を必ず含める必要があります。そうしないと通知は失敗します。
トースト通知が表示されない場合、イベント ログを使ってエラーの有無を確認できます。イベント ビューアーで、[アプリケーションとサービス ログ] > [Microsoft] > [Windows] > [アプリ] > [Microsoft-Windows-TWinUI] > [稼働中] の順に展開し、トースト通知に関連するイベントを探します。
確認方法: XML 構文チェッカー (Visual Studio エディターなど) を使って、基本構文エラーを探します。該当するテンプレート参照 (ToastTemplateType) を調べて、適切な項目を適切な要素に割り当てていることを確認します。
解決方法: XML を変更するか、コンテンツに適合する別のテンプレートを使います。
通知が期限切れになっていないことを確認する
考えられる原因: 有効期限が小さすぎる値に設定されています。
expirationTime メソッド (ローカル通知の場合)、または X-WNS-TTL ヘッダー フィールド (プッシュ通知の場合) を使って通知の有効期限を設定する場合は、値がミリ秒単位であることに注意してください。たとえば、トースト通知をちょうど 1 時間継続する場合は、値として 3600000 (60 * 60 * 1000 = 3600000) を指定する必要があります。
解決方法: 大きな値を使います。
問題の報告
このトピックに書かれている解決策を試しても問題が解決しない場合は、Microsoft フォーラムにメッセージを投稿し、Microsoft の開発者や同じ問題に関心を持つその他の開発者に相談してください。
プッシュ通知に関しては、問題の説明だけでなく、チャネルの URL と WNS から受け取った応答の例 (HTTP エラー コードと HTTP ヘッダーを含む) も提供するよう求められる場合があります。問題を報告するときに、アプリ サーバーがログに記録する必要がある特定のヘッダーがあります。詳しくは、「プッシュ通知サービスの要求ヘッダーと応答ヘッダー」をご覧ください。