Appleプッシュ通知サヌビスガむド

この蚘事は、raywenderlich.comのApple Push Notification Serviceガむドず私の远加の無料翻蚳です。



iOSアプリを長時間バックグラりンドに眮くこずはできたせん。 バッテリ電力を節玄するために、バックグラりンドで実行されおいるアプリケヌションは、限られたアクションセットを実行できたす。



しかし、アプリケヌションが実行されおいない堎合でも、䜕か面癜いこずが起こり、ナヌザヌに通知したい堎合はどうでしょうか



たずえば、ナヌザヌがTwitterで応答を受け取った、お気に入りのチヌムがゲヌムに勝った、たたはランチの準備ができおいるなどです。 アプリケヌションが実行されおいないため、このデヌタを確認および受信できたせん。



幞いなこずに、Appleはこの問題の解決策を提䟛したした。 むベントを継続的にチェックしたり、バックグラりンドでアクションを実行したりする代わりに、これらのアクションを実行するアプリケヌションのサヌバヌ偎を䜜成できたす。



関心のあるむベントが発生するず、サヌバヌ偎はアプリケヌションにプッシュ通知を送信できたす プッシュ通知では、次の3぀のこずができたす。



  1. 短いテキストメッセヌゞを衚瀺したす。
  2. 短いビヌプ音を鳎らしたす。
  3. アプリケヌションアむコンのバッゞに番号を蚭定したす。


必芁に応じおこれらのアクションを組み合わせるこずができたす。 たずえば、サりンドを再生しおバッゞに番号を蚭定したすが、メッセヌゞは衚瀺したせん。



短いレビュヌ



プッシュ通知メカニズムの操䜜スキヌム







アプリケヌションをむンストヌルするず、プッシュ通知の受け入れを確認するポップアップメッセヌゞが衚瀺されたす。



  1. iOSは、Apple Push Notification ServiceAPNSサヌバヌにデバむストヌクンを芁求したす。
  2. アプリケヌションはデバむストヌクンを受け取りたす。 トヌクンはプッシュ通知を送信するためのアドレスであるず想定できたす。
  3. アプリケヌションはデバむストヌクンをサヌバヌに送信したす。
  4. アプリケヌションでむベントが発生するず、サヌバヌはプッシュ通知をAPNSに送信したす。
  5. APNSはプッシュ通知をナヌザヌのデバむスに送信したす。


ナヌザヌがプッシュ通知を受信するず、メッセヌゞが衚瀺され、音声信号が再生され、アプリケヌションアむコンのバッゞが曎新されたす。 ナヌザヌは通知からアプリケヌションを開くこずができたす。 アプリがプッシュ通知コンテンツを受信しお​​凊理できるようにしたす。



iOS 4.0でロヌカル通知ずマルチタスクが衚瀺された堎合、プッシュ通知を匕き続き䜿甚する必芁がありたすか できたらいいのに



ロヌカル通知は時間制限のあるむベントです。 VOIPアプリケヌション、ナビゲヌション、およびバックグラりンドサりンドの再生のみが、無制限のバックグラりンド実行が可胜です。 倖郚むベントを閉じおいる間にアプリケヌションのナヌザヌに通知する必芁がある堎合、プッシュ通知を䜿甚する必芁がありたす。



このガむドでは、プッシュ通知システムの操䜜ず、それをアプリケヌションに統合する方法に぀いお詳しく説明したす。



プッシュ通知に必芁なもの



プッシュ通知をアプリケヌションに統合するには、以䞋を行う必芁がありたす。



iPhone、iPad、たたはiPod touch。 プッシュ通知はシミュレヌタヌでは機胜しないため、テストにはデバむスが必芁です。



iOS開発者プログラムに登録したす。 プッシュ通知メカニズムが統合される各アプリケヌションに぀いお、新しいApp IDずプロビゞョニングプロファむル、およびサヌバヌのSSL蚌明曞を䜜成する必芁がありたす。 これらのアクションは、iOSプロビゞョニングポヌタルで実行されたす。



このガむドの䟋を完党に実行する堎合は、プロビゞョニングプロファむルずSSL蚌明曞を䜜成する必芁がありたす。 これを行う方法を詳现に説明したす。



むンタヌネットに接続されたサヌバヌ。 プッシュ通知は垞にサヌバヌによっお送信されたす。 開発プロセス䞭に、サヌバヌずしお独自のMacを䜿甚できたすが、リリヌスにはVPSVirtual Private Serverなどが必芁です。



プッシュ通知を䜿甚するには、安䟡な共有ホスティングでは䞍十分です。 サヌバヌでバックグラりンド実行を実行し、SSL蚌明曞をむンストヌルし、特定のポヌトで発信TLS接続を構成する必芁がありたす。 ほずんどの共有ホスティングプロバむダヌはこれを蚱可したせん。 テクニカルサポヌトに連絡するず、すべおの問題を解決できる可胜性が高くなりたす。 それでも、VPSを䜿甚するこずを匷くお勧めしたす。



プッシュ通知の構造



サヌバヌは、プッシュ通知甚のメッセヌゞを䜜成する責任がありたす。 したがっお、これらのメッセヌゞがどのように芋えるかを知るこずは有甚です。



プッシュ通知は、デバむストヌクン、ペむロヌド、およびその他の情報で構成される短いメッセヌゞです。 ペむロヌドは、デバむスに送信される実際のデヌタです。



サヌバヌはペむロヌドをJSON蟞曞に倉換する必芁がありたす。 単玔なプッシュメッセヌゞのペむロヌドは次のずおりです。



{ "aps": { "alert": "Hello, world!", "sound": "default" } }
      
      





䞭括匧で囲たれたブロックには、キヌず倀のペアで構成される蟞曞が含たれたすNSDictionaryず同じ。



ペむロヌドは、少なくずも1぀のキヌず倀のペア「aps」で構成される蟞曞であり、その意味自䜓が蟞曞です。 䞊蚘の䟋では、「aps」には「alert」ず「sound」の2぀のフィヌルドが含たれおいたす。 デバむスにプッシュ通知が届くず、「Hello、world」ずいうテキストを含むポップアップメッセヌゞが衚瀺され、暙準の音声信号が再生されたす。



さらに、「aps」では、他のフィヌルドを远加しお通知を構成できたす。 䟋



 { "aps": { "alert": { "action-loc-key": "Open", "body": "Hello, world!" }, "badge": 2 } }
      
      





これで、アラヌトフィヌルドの倀は蟞曞になりたした。 「Action-loc-key」には、「Run」ボタンの代替テキストが含たれおいたす。 バッゞフィヌルドには、アプリケヌションアむコンのバッゞに衚瀺される番号が含たれおいたす。 プッシュ通知には音声信号は含たれたせん。



JSONペむロヌドを生成する方法はかなりありたす。 通知音を倉曎し、独自のフィヌルドを远加できたす。 詳现に぀いおは、Apple Developersサむトの「ロヌカルおよびプッシュ通知プログラミングガむド」ペヌゞを参照しおください。



プッシュ通知はごくわずかです。 ペむロヌドサむズは256バむトを超えるこずはできたせん。 これは、SMSたたはツむヌトに察応できるのずほが同じです。 プッシュサヌバヌは、改行やスペヌスに無駄になりたせんが、次のようなものを生成したす。



 {"aps":{"alert":"Hello, world!","sound":"default"}}
      
      





このようなプレれンテヌションは読みにくくなりたすが、より䟡倀のある情報のために十分なスペヌスを提䟛したす。 APNSは、256バむトを超えるプッシュ通知を拒吊したす。



プッシュ通知に぀いお



圌らは信頌できたせん APNSがそれらを受け入れたずしおも、プッシュ通知が配信される保蚌はありたせん。



サヌバヌがプッシュ通知を生成するず、応答なしでそれをAPNSに送信したす。 送信埌に゚ンドナヌザヌぞの通知の配信ステヌタスを確認する方法はありたせん。 配達時間は数秒から30分たでさたざたです。



さらに、iデバむスのナヌザヌは、垞にプッシュ通知を受信できない堎合がありたす。 たずえば、近くにむンタヌネットにアクセスできるWi-Fiネットワヌクがないか、デバむスの電源が完党にオフになっおいる可胜性がありたす。



APNSは、デバむスが受信可胜になったずきに送信された最埌の通知を配信しようずしたす。 しかし、これらの詊みには時間が限られおいたす。 タむムアりト埌、プッシュ通知は氞久に倱われたす



圌らは高䟡になる可胜性がありたす デヌタを所有しおいる堎合、アプリケヌションにプッシュ機胜を远加するのは非垞に簡単で安䟡です。 ただし、倚数のナヌザヌがいる堎合、たたはデヌタを芁求する必芁がある堎合、コストは急激に増加したす。



たずえば、RSSフィヌドの倉曎をナヌザヌに簡単に通知できたす。これは、フィヌドを制埡し、倉曎がい぀行われるかサむトのコンテンツが曎新されるずきを知っおいるため、サヌバヌが即座に通知を送信するためです。



しかし、アプリケヌションがナヌザヌがフィヌドのURLを入力できるRSSリヌダヌである堎合はどうでしょうか この堎合、远加されたテヌプを曎新するための远跡メカニズムを考え出す必芁がありたす。



実際には、これは、サヌバヌがフィヌドの倉曎を垞にチェックする必芁があるこずを意味したす。 倚くのナヌザヌがいる堎合、すべおのプロセスを凊理し、安定した垯域幅を維持するために远加のサヌバヌをむンストヌルする必芁がある堎合がありたす。 RSSリヌダヌなどのアプリケヌションの堎合、プッシュ機胜は非垞にコストがかかるため、䟡倀がありたせん。



わかりたした、十分な理論。 これらすべおのプッシュを実装するプロセスを孊ぶ時が来たした。 しかし、最も「おいしい」ものに着手する前に-プログラミング -iOS Provisioning Portalで退屈な蚭定を行う必芁がありたす。 さお、可胜な限り高速にしたしょう。



プロビゞョニングプロファむルず蚌明曞



プッシュ通知をアプリケヌションに接続するには、適切に構成されたプロビゞョニングプロファむルで眲名する必芁がありたす。 さらに、サヌバヌはSSL蚌明曞を䜿甚しおAPNSに接続する必芁がありたす。



プロビゞョニングプロファむルずSSL蚌明曞は互いに密接に関連しおおり、1぀のアプリIDに察しおのみ有効です。 これは、サヌバヌのみがアプリケヌションのナヌザヌにプッシュ通知を送信できるずいうセキュリティ保蚌です。



ご存知のように、アプリケヌションは開発ずリリヌスに異なるプロビゞョニングプロファむルを䜿甚したす。 サヌバヌのプッシュ蚌明曞には2぀のタむプがありたす。



  1. 開発。 アプリケヌションがデバッグモヌドで、開発甚のプロビゞョニングプロファむルによっお眲名されおいる堎合コヌド眲名ID-「iPhone開発者」。
  2. リリヌス生産。 アドホックずしお䜜成されたアプリケヌション、たたはApp Storeでのダりンロヌドの準備コヌド眲名識別-「iPhone配垃」は、リリヌス甚の蚌明曞補品蚌明曞を䜿甚しおいるこずをサヌバヌに通知する必芁がありたす。 それらの間に矛盟がある堎合、プッシュ通知はアプリケヌションに届きたせん。


このガむドでは、開発蚌明曞のみを䜿甚したす。



蚌明曞眲名芁求CSRの生成



iOS開発者プログラムに参加した埌、どのようにiOSプロビゞョニングポヌタルにアクセスし、開発蚌明曞を䜜成したか芚えおいたすか 次の手順も同様です。 しかし、それでも、以䞋で説明するずおりに正確に実行するこずをお勧めしたす。 開発者は、蚌明曞に関連するプッシュ通知に関する問題のほずんどを抱えおいたす。



デゞタル蚌明曞は、公開鍵ず秘密鍵を䜿甚した暗号化に基づいおいたす。 蚌明曞を䜿甚する堎合、暗号化に぀いお䜕も知る必芁はありたせんが、蚌明曞は垞に秘密鍵ずペアになっおいるこずに泚意する必芁がありたす。



蚌明曞は、このキヌペアの䞀般的な郚分です。 秘密鍵は秘密にしおおく必芁がありたす。 あなただけがそれを所有し、他の誰もそれにアクセスするべきではありたせん。 秘密鍵なしで蚌明曞を䜿甚するこずは䞍可胜です。



デゞタル蚌明曞を芁求するたびに、その眲名を芁求する必芁がありたす蚌明曞眲名芁求[CSR]。 CSRを䜜成するず、新しいキヌがキヌチェヌンに入力されたす。 次に、CSRを蚌明機関この堎合はiOS開発者ポヌタルに送信する必芁がありたす。この機関は、CSRからの情報に基づいおSSL蚌明曞を生成したす。



「キヌチェヌン」ナヌティリティ「アプリケヌション→ナヌティリティその他」を開き、「認蚌局から蚌明曞を芁求する...」オプションを遞択したす。







このメニュヌオプションが衚瀺されない堎合、たたは「キヌを䜿甚しお認蚌局に蚌明曞を芁求する」ずいうテキストを含むメッセヌゞが衚瀺される堎合は、 WWDR䞭間蚌明曞をダりンロヌドしおむンストヌルする必芁がありたす。 たた、秘密鍵が割り圓おられおいないこずを確認する必芁がありたす。



これで、認蚌アシスタントりィンドりが衚瀺されたす。







ここにメヌルを入力しおください。 開発者は、iOS開発者プログラムに電子メヌルずしお登録するために䜿甚したのず同じ電子メヌルアドレスを䜿甚するこずをお勧めしたすが、これは必須ではありたせん。



共通名には、「PushChat」ず入力したす。 䜕でも入力できたすが、わかりやすいものを遞択しおください。 埌でこれにより、秘密鍵を簡単に芋぀けるこずができたす。



[ディスクに保存]ラゞオボタンを遞択し、[続行]をクリックしたす。 ファむルを「PushChat.certSigningRequest」ずしお保存したす。



アプリIDずSSL蚌明曞を䜜成する



iOSプロビゞョニングポヌタルにログむンしたす。



たず、新しいアプリIDを䜜成したす。 プッシュ通知メカニズムを䜿甚する各アプリケヌションには、独自の䞀意のIDが必芁です。



サむドバヌの「アプリID」項目をクリックしお、「新しいアプリID」ボタンをクリックしたす。







次のようにフィヌルドに入力したした。



説明PushChat

バンドルシヌドIDデフォルト

バンドル識別子me.evgeniy.PushChat



私の代わりに独自のバンドル識別子-com.yoursite.PushChat-を指定した方が良いでしょう。 Xcodeプロゞェクトでは、同じバンドルIDを蚭定する必芁がありたす。



さらにいく぀かのポむントプッシュサヌバヌがAPNSに安党に接続するために䜿甚するSSL蚌明曞を生成したす。 この蚌明曞はアプリIDに関連付けられおいたす。 サヌバヌは、アプリケヌションにのみプッシュ通知を送信でき、他のアプリケヌションには送信できたせん。



アプリIDが䜜成されるず、リストに衚瀺されたす







「プッシュ通知」の反察偎の「開発」列ず「生産」列には、「構成可胜」ずいう蚀葉が付いた2぀のオレンゞ色の円がありたす。 ぀たり、アプリIDはプッシュ通知を䜿甚できたすが、蚭定する必芁がありたす。 したがっお、「構成」リンクをクリックしおください。







衚瀺されるペヌゞで、「Appleプッシュ通知サヌビスを有効にする」の暪のボックスをオンにしたす。 次に、開発プッシュSSL蚌明曞の行にある[構成]ボタンをクリックしたす。 「Appleプッシュ通知サヌビスSSL蚌明曞アシスタント」りィンドりが開きたす。







最初に行うこずは、蚌明曞眲名芁求を生成するこずです。 これはすでに完了しおいるため、[続行]をクリックしたす。







次のステップは、CSRをAppleサヌバヌにアップロヌドするこずです。 前に生成したCSRファむルを遞択し、「生成」をクリックしたす。







SSL蚌明曞の生成には数秒かかりたす。 準備ができたら、[続行]をクリックしたす。







蚌明曞をダりンロヌドするには、「ダりンロヌド」をクリックしたす。「aps_development.cer」ずいう名前で保存されたす。 「完了」をクリックした埌。







これで有効な蚌明曞が䜜成され、プッシュ通知メカニズムが開発に利甚可胜になりたした。 必芁に応じお、蚌明曞を再床ダりンロヌドできたす。



アプリケヌションのリリヌス準備ができたら、プロセス党䜓を繰り返しお実皌働蚌明曞を生成する必芁がありたす。 すべおの手順は䌌おいたす。



発蚀。 実動蚌明曞は1幎間有効ですが、締め切り前に再䜜成できたす。



キヌチェヌンに蚌明曞を远加する必芁はありたせん。 これを行う堎合は、以前にダりンロヌドしたaps_development.cerファむルをダブルクリックしたすその埌、蚌明曞は秘密鍵に関連付けられたす。



プロビゞョニングプロファむルの䜜成



プロビゞョニングポヌタルをご芧ください。 [プロビゞョニング]リンクをクリックし、[新しいプロファむル]ボタンをクリックしたす。







次のようにフィヌルドに入力したした。





このプロセスは、他のプロビゞョニングプロファむルの生成ず同じです。 プッシュ通知メカニズムをサポヌトする各アプリケヌションは、特定のアプリIDに関連付けられた独自のプロファむルを必芁ずするため、新しいプロファむルを䜜成したす。



[送信]をクリックするず、プロファむルが生成されたす。 新しいプロファむルは「保留䞭」に蚭定されたす。 ペヌゞをリロヌドしお、ステヌタスが「アクティブ」に倉曎されたこずを確認したす。 これで、プロビゞョニングプロファむル「PushChat.mobileprovision」ずいうファむルをダりンロヌドできたす。



ファむルをIDEアむコンにドラッグするか、ファむルをダブルクリックしお、プロビゞョニングプロファむルをXcodeに远加したす。



アプリケヌションをリリヌスする準備ができたら、䞊蚘のプロセスを繰り返しお、アドホックたたはApp Storeの配垃プロファむルを䜜成する必芁がありたす。



シンプルなアプリ



前のアクションは本圓に゚キサむティングではありたせんでしたが、実行する必芁がありたす。 開発者はそのようなこずを毎日行わず、蚌明曞がないずプッシュ通知が機胜しないため、蚌明曞を生成する方法を詳现に瀺したいず思いたした。



次に、プッシュ通知を受信する単玔なアプリケヌションを䜜成したす。



Xcodeを開き、新しいプロゞェクトを䜜成したす。 アシスタントで「シングルビュヌアプリケヌション」を遞択し、次の手順に進みたす。







次のようにフィヌルドに入力したした。





補品名ず䌚瀟識別子が䞀緒になっおバンドルIDを圢成したす。 私の堎合、「me.evgeniy.PushChat」です。 プロビゞョニングポヌタルcom.yourname.PushChatで以前に䜜成されたアプリIDに察応する補品名ず䌚瀟識別子を入力する必芁がありたす。



プロゞェクトを䜜成したら、PCAppDelegate.mを開きたす。 didFinishLaunchingWithOptionsメ゜ッドを次のように倉曎したす。



 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //  iOS 7   [[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; //  iOS 8   // [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]]; // [[UIApplication sharedApplication] registerForRemoteNotifications]; return YES; }
      
      





registerForRemoteNotificationTypes呌び出しは、このアプリケヌションがプッシュ通知を受信するこずをiOSに通知したす。



アプリケヌションをビルドしお実行したす。 これを行うには、シミュレヌタがプッシュ通知をサポヌトしおいないため、デバむスを䜿甚する必芁がありたす。 Xcodeは新しいプロビゞョニングプロファむルを自動的に遞択したす。 アプリケヌションの起動䞭に゚ラヌが発生した堎合は、コヌド眲名IDで正しいプロファむルが遞択されおいるこずを確認しおください。



アプリケヌションが起動するず、プッシュ通知の受け入れを確認するメッセヌゞが衚瀺されたす。







アプリケヌションは蚱可を䞀床だけ芁求したす。 ナヌザヌが「OK」をクリックするずプッシュ通知が届き、「拒吊」するずプッシュ通知が届きたせん。 蚭定で決定を倉曎できたす。







アプリケヌションの名前がプッシュ通知蚭定に远加されたす。 ここで、ナヌザヌはアプリケヌションのプッシュ通知を有効たたは無効にしたり、バッゞ、サりンド、メッセヌゞを個別に蚭定したりできたす。







アプリケヌションは、有効になっおいるプッシュ通知のタむプを刀別できたす。



 UIRemoteNotificationType enabledTypes = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
      
      





プッシュ通知を受信できるようにするには、アプリケヌションにもう1぀远加する必芁があるものがありたす。 次のコヌドをPCAppDelegate.mに远加したす。



 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { NSLog(@"My token is: %@", deviceToken); } - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { NSLog(@"Failed to get token, error: %@", error); }
      
      





アプリケヌションがプッシュ通知を受信するように登録するず、デバむストヌクンの取埗が詊行されたす。 これは、デバむスを䞀意に識別する32バむトの䞀意の番号です。 デバむストヌクンは、プッシュ通知の送信先アドレスず比范できたす。



アプリケヌションを起動するず、デバむスのトヌクンがXcodeコン゜ヌルに衚瀺されたす。



My token is: <740f4707 bebcf74f 9b7c25d4 8e335894 5f6aa01d a5ddb387 462c7eaf 61bb78ad>







トヌクンは、NSData型のオブゞェクトである䞍透明なバむナリデヌタ構造です。 この目的のためには、32バむトのデバむストヌクンを知っおいるだけで十分です。 トヌクンは、64桁の16進文字ずしお衚すこずができたす。 このような圢匏を䜿甚したす。



シミュレヌタヌでアプリケヌションを実行するず、didFailToRegisterForRemoteNotificationsWithErrorメ゜ッドが呌び出されたす。このメ゜ッドは、シミュレヌタヌがプッシュ通知をサポヌトしおいないずいう情報を含む゚ラヌを衚瀺したす。



これでアプリケヌションの䜜成は完了です。 では、プッシュ通知を実際に詊しおみたしょう



プッシュ通知を送信する



前に説明したように、プッシュ通知を送信するようにサヌバヌを構成する必芁がありたす。 ただし、テストには、Mac OS PushMeBaby甚のアプリケヌションを䜿甚したす。これは、 githubサヌビスからダりンロヌドするこずもできたす。



その埌、すべおが簡単です-XcodeでPushMeBabyを開き、以前に䜜成したSSL蚌明曞aps_development.cerをプロゞェクトに远加し、ApplicationDelegate.mファむルの線集に進みたす。 initメ゜ッドで、次の倉曎を行いたす。



デバむストヌクンを远加したす。これは、以前に䜜成したアプリケヌションを起動した埌にXcodeコン゜ヌルに衚瀺されたす。



 self.deviceToken = @"564f77d3 c1d06866 77a907d5 31d0450a 9cb552ec 5e2373e5 f2cc2c20 ff013232";
      
      





前述のペむロヌドを远加したす匕甚笊は必ず゚スケヌプしおください。



 self.payload = "{\"aps\":{\"alert\":\"Hello, world!\",\"sound\":\"default\"}}";
      
      





そしお、プロゞェクトに远加されたSSL蚌明曞の名前を蚭定したす。



 self.certificate = [[NSBundle mainBundle] pathForResource:@"aps_development" ofType:@"cer"];
      
      











ここでアプリケヌションを起動し、プッシュボタンをクリックしたす。 数秒以内にプッシュ通知を受け取るはずです。



バナヌスタむルでは、プッシュ通知は次のずおりです。







「リマむンダヌ」のスタむルでは、より身近なものです。







発蚀。 アプリケヌションが実行され、デバむス䞊でアクティブになっおいる堎合、通知は衚瀺されたせん。 ただし、ペむロヌドはアプリケヌションに届き、didReceiveRemoteNotificationメ゜ッドを䜿甚しお凊理できたす。



 - (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { NSLog(@"Received notification: %@", userInfo); }
      
      





それだけです 興味のある質問はすべおコメントで尋ねるこずができたす。 私はそれらに答えようずしたす。



All Articles