MS_DotNetAndSmartphone - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
- æ»ãïŒãã®ä»ãéçºã®è²ã ïŒ
äžèšãªã³ã¯å ã«èšèŒã
ç§»è¡ã¡ã¢ïŒXamarin ã¯ãµããŒãçµäºïŒ: Xamarin ã¯
2024 幎 5 æ 1 æ¥ã«ãµããŒããçµäºããã
çŸåšã® .NET ã§ã®ã¢ãã€ã« GUI éçºã¯
.NET MAUIïŒXamarin.Forms ã®åŸç¶ïŒãå ¬åŒã®ææ®µã§ãã
ïŒãã€ãã£ã vs ã¯ãã¹ãã©ãããã©ãŒã ïŒãã.NET ã§ã®ã¢ãã€ã« GUI ã®éžæè¢ïŒçŸåšïŒã ã».NET MAUI âŠ å ¬åŒãåäžãããžã§ã¯ãæ§æ â ã».NET MAUI Blazor Hybrid ⊠UI ã Blazor ã§æžãïŒWeb ãšå ±æïŒ ã»[Uno Platform](MS_UnoPlatform) ⊠XAMLãWeb/ãã¹ã¯ãããã ã»Avalonia ⊠XAMLããã¹ã¯ãããäžå¿
Android ã§ã¯ FCM ããiOS ã§ã¯ APNs ã䜿çšããã
-
FCM 㯠APNs ãšé£æºå¯èœãªã®ã§ãã³ã³ã§ã¯ãFCM ãšã®é£æºæé ãæžãã
-
ã³ãŒããèŠããšãAPNs ãžã®ããã·ã¥éç¥ã®å®è£ ã¯é£æåºŠãé«ããã
-
FCM çµç±ã«ãããš APNs ã®è€éããããµãŒããŒåŽã§ãã©ãã¯ããã¯ã¹åãããã
è£è¶³ïŒãã®å€æã¯ä»ãæ£ããïŒ: ãFCM çµç±ã«ãããš APNs ã®è€éãã
ãã©ãã¯ããã¯ã¹åããããââãã®èšèšå€æã¯åŠ¥åœã§ããã
ãªã APNs ãé£ããã®ããè£ã£ãŠããããAPNsïŒApple Push Notification serviceïŒãé£ããçç±ã â ãèšŒææžãŸãã¯èªèšŒããŒã®ç®¡çãâ ã»p12 èšŒææžæ¹åŒïŒ ã幎 1 åã®æŽæ°ãå¿ èŠãã倱å¹ãããšéç¥ãæ¢ãŸã ã»p8 èªèšŒããŒæ¹åŒïŒçŸåšã®æšå¥šïŒïŒ 倱å¹ããªããTeam ID / Key ID ãèŠã â¡ ãç°å¢ãåãããã éçºïŒsandboxïŒãšæ¬çªã§ãšã³ããã€ã³ããéã â ãéçºã§ã¯å±ãã®ã«æ¬çªã§å±ããªããã®å žåçãªåå ⢠ãHTTP/2 ãå¿ é ãïŒæ§ãã€ã㪠ãããã³ã«ã¯å»æ¢æžã¿ïŒ â ã¯ã©ã€ã¢ã³ã ã©ã€ãã©ãªã HTTP/2 ã«å¯Ÿå¿ããŠããå¿ èŠããã ⣠ãšã©ãŒã®æ±ããç¬ç¹ïŒããŒã¯ã³å€±å¹ã®æ€åºãªã©ïŒ ãFCM çµç±ã«ãããšã ã»Firebase åŽã« APNs ã®èªèšŒããŒãç»é²ããŠããã°ã ã¢ããªããã¯ãFCM ã® API ã ãããå©ãã°ãã â ã»Android / iOS ããåãã³ãŒãã§ãæ±ãã ã»ããŒã¯ã³ç®¡çãçµ±äžãããäžæ¹ãFCM çµç±ã®ä»£åãæŒãããŠããã
ã»Google ã®ãµãŒãã¹ã«äŸåããïŒé害ã»ä»æ§å€æŽã®åœ±é¿ïŒ ã»äžåœæ¬åã® Android 端æ«ã§ã¯ Google Play éçºè ãµãŒãã¹ã 䜿ããªãããšããã â ã»éç¥ã®é å»¶ã APNs çŽãããããã«å¢ãã ã»Firebase ã®å©çšèŠçŽã»ããŒã¿ã®æåšïŒããŒã¿äž»æš©ïŒ
ããã³ããšã³ãã®æé ã¯ã
-
ãã©ãããã©ãŒã æ¯ã«å¥ã ã«ãªãã
-
詳ããã¯ãåã ã®ããã³ããšã³ãã®é ãåç §ã
-
ããã§ã¯ã.NET ã§å®è£ ããããµãŒãåŽã®å®è£ ã«ã€ããŠèšåããã
-
å¿ èŠãªããã±ãŒãžã NuGet ããã€ã³ã¹ããŒã«ïŒFirebaseAdminïŒ
-
FCM ã®ã³ã³ãœãŒã«ããç§å¯éµ
ïŒserviceAccountKey.jsonïŒãããŠã³ããŒã -
ããã·ã¥éç¥ã®ããã°ã©ã ãå®è£ ããã
- ç§å¯éµãèªã
- ã¡ãã»ãŒãžã®äœæã»æå®
- ããŒã¯ã³ã®æå®
- ããã·ã¥éç¥ã®éä¿¡
â» ããŒã¯ã³ã¯ããã€ãã£ãã»ã¢ããªã®ã€ã³ã¹ããŒã«æã«çæãããã
ãåŸã£ãŠããµãŒãã¯äºåã«ããã®ããŒã¯ã³ãå
¥æããŠããå¿
èŠãããã
è£è¶³ïŒå®è£ äŸãšãéçšäžã®èŠç¹ïŒ: æé ã¯æ£ç¢ºãªã®ã§ã
ã³ãŒããšæ³šæç¹ãè£ãã// NuGet: FirebaseAdmin FirebaseApp.Create(new AppOptions { Credential = GoogleCredential.FromFile("serviceAccountKey.json"), }); var message = new Message { Token = deviceToken, // â 端æ«ããšã®ããŒã¯ã³ Notification = new Notification { Title = "ä»¶å", Body = "æ¬æ" }, Data = new Dictionary<string, string> { ["orderId"] = "12345" }, }; var id = await FirebaseMessaging.DefaultInstance.SendAsync(message);â ç§å¯éµïŒ
serviceAccountKey.jsonïŒã®æ±ãâãããã¯æ¥µããŠæ©åŸ®ãªæ å ±ã§ããã ã»æã£ãŠããã°ã誰ã«ã§ãéç¥ãéããã ã»Firebase ã®ä»ã®æ©èœã«ãã¢ã¯ã»ã¹ã§ããã ããã£ãŠã¯ãããªãã ã»ãªããžããªã«ã³ããããã ã»ã¢ããªãšäžç·ã«é åžããïŒã¯ã©ã€ã¢ã³ãã«çœ®ããªãïŒ ãæ£ãã眮ãå Žã ã»ãKey Vault / Secrets Managerãâ ã»ãããŒãžã IDïŒGoogle ãªã Workload IdentityïŒ â [*.configã®æå·å](MS_ConfigEncryption) / [FaaS config](MS_FaaSConfig) ãšåãæéâ¡ ããŒã¯ã³ã®ç®¡çãå®åäžã®äž»èŠãªèª²é¡
ãããŒã¯ã³ã¯å€ãããâ åæã®â»ã®è£è¶³ ã»ã¢ããªã®åã€ã³ã¹ããŒã« ã»ç«¯æ«ã®åæå ã»äžå®æéã®æªäœ¿çš ã»ã¢ã㪠ããŒã¿ã®åé€ â ãå€ãããŒã¯ã³ã«éããšå€±æããã ãèšèšã ã»ã¢ããªèµ·åæã«æ¯åããŒã¯ã³ãååŸãããµãŒããžéã ã»ãµãŒãã¯ããŠãŒã¶ãŒ à 端æ«ãã§ããŒã¯ã³ãä¿æãã â 1 ãŠãŒã¶ãŒãè€æ°ç«¯æ«ãæã€ ã»éä¿¡çµæã Unregistered / InvalidArgument ãªã ãDB ããåé€ãããâ â æºã蟌ããšãéä¿¡ã®ãã³ã«ç¡é§ãªãšã©ãŒãç©ã¿äžãã ã»ãã°ã¢ãŠãæã¯ããŒã¯ã³ãç¡å¹åãã â ããªããšãä»äººã®ç«¯æ«ã«éç¥ãå±ããïŒæ å ±æŒæŽ©ïŒâ⢠éç¥ã®å 容ã«å人æ å ±ãå ¥ããªã
ãããã¯ç»é¢ã«è¡šç€ºããããããšãåæã«ãã â ãç°äžæ§ã®æ€æ»çµæãåºãŸããïŒéœæ§ïŒã â ãæ°ãããç¥ããããããŸããïŒ data ã§ ID ã ãæž¡ãã ã¢ããªãéããŠãã API ã§ååŸãã â⣠倧ééä¿¡
ã»FCM ã«ã¯ããã«ããã£ã¹ãéä¿¡ããããïŒæå€§ 500 ããŒã¯ã³/åïŒ SendEachForMulticastAsync ã»ãããã¯é ä¿¡ïŒè³Œèªè å šå¡ãžïŒã䜿ãã ã»ã¬ãŒãå¶éã»ãªãã©ã€ïŒææ°ããã¯ãªãïŒãå®è£ ãã ã»ãéä¿¡ã¯éåæã®ããã¯ã°ã©ãŠã³ãåŠçã«ãããâ â Web ãªã¯ãšã¹ãã®äžã§åæéä¿¡ããªã
OTA ã¢ããããŒãããµããŒãããããã®ãã©ãããã©ãŒã
ç§»è¡ã¡ã¢ïŒCodePush / App Center ã¯çµäºïŒ: Microsoft ã®
Visual Studio App Center 㯠2025 幎 3 æ 31 æ¥ã«ãµãŒãã¹ãçµäºããã
App Center äžã§æäŸãããŠãã CodePush ãåæã«çµäºããŠãã
ïŒVisual Studio App CenterïŒããçŸåšã®ä»£æ¿ã ã»React Native â ãExpo UpdatesãããŸãã¯ã»ã«ããã¹ãç CodePush ã»Capacitor â Capacitor Live UpdatesïŒIonic AppflowïŒ ã».NET MAUI â ãOTA ã®ä»çµã¿ã¯æšæºã«ãªããâ â ã¹ãã¢çµç±ã®æŽæ°ãåºæ¬ ãçæç¹ãïŒ[ãã€ãã£ã vs ã¯ãã¹ãã©ãããã©ãŒã ](MS_NativeVsCrossPlatform) ã«ãèšèŒïŒ ã»OTA ã§ã¢ããªã®äž»èŠãªæ©èœãå€ããããšã¯ ã¹ãã¢ã®èŠçŽäžãªã¹ã¯ããã ã»ãã°ä¿®æ£ã»ã³ã³ãã³ãæŽæ°ã®ç¯å²ã«çãã
-
C#ã§FCMãå©çšããŠPUSHéç¥ãéä¿¡ããæ¹æ³ - åå¿é²
https://kagasu.hatenablog.com/entry/2019/09/04/141424 -
NuGet Gallery | FirebaseAdmin
https://www.nuget.org/packages/FirebaseAdmin/
-
iOS ã® Push éç¥ ã®ãµãŒããŒåŽã ASP.NET Web API ã§ - miso_soup3 Blog
https://miso-soup3.hateblo.jp/entry/20130513/1368452204 -
MitsuoMasuda/APNS: C#ã§iOSã®ããã·ã¥éç¥ãå®è¡ããããã°ã©ã
https://github.com/MitsuoMasuda/APNS
ç§»è¡ã¡ã¢ïŒAPNs ã®åèãªã³ã¯ã¯å€ãïŒ: æããããŠãã 2 ã€ã¯
2013 幎é ã®èšäºã§ããã
åœæã®ããã€ã㪠ãããã€ã APIã㯠2021 幎ã«å»æ¢ãããŠããã
çŸåš APNs ãžçŽæ¥éããªãã
HTTP/2 ããŒã¹ã® Provider API + p8 èªèšŒããŒã䜿ãã// çŸåšã® APNs çŽéã®éªšæ ŒïŒHTTP/2 + JWTïŒ var jwt = /* p8 ããŒã§ ES256 眲åãã JWTïŒTeam ID / Key IDïŒ */; var http = new HttpClient { DefaultRequestVersion = HttpVersion.Version20 }; var req = new HttpRequestMessage(HttpMethod.Post, $"https://api.push.apple.com/3/device/{deviceToken}"); // æ¬çª // https://api.sandbox.push.apple.com/... â éçºïŒç°å¢ã®éãã«æ³šæïŒâ req.Headers.Add("authorization", $"bearer {jwt}"); req.Headers.Add("apns-topic", "com.example.myapp"); req.Content = JsonContent.Create(new { aps = new { alert = "æ¬æ" } });ãšã¯ãããåæã®å€æã©ãã
FCM çµç±ã«ããæ¹ãå®è£ ã»éçšãšã容æã§ããã
- .NET MAUI ãšã¯
https://learn.microsoft.com/ja-jp/dotnet/maui/what-is-maui - App Center ã®å»æ¢
https://learn.microsoft.com/ja-jp/appcenter/retirement - Azure Notification Hubs
https://learn.microsoft.com/ja-jp/azure/notification-hubs/notification-hubs-push-notification-overview
è£è¶³ïŒAzure Notification Hubs ãšããéžæè¢ïŒ: .NET éçºè åãã«
è£è¶³ããŠããããAzure Notification Hubsã APNs / FCM / WNS çãããŸãšããŠæœè±¡åããããããŒãžã ãµãŒãã¹ ã»è€æ°ã®ãã©ãããã©ãŒã ãž 1 ã€ã® API ã§éãã ã»ã¿ã°ã«ããã»ã°ã¡ã³ãé ä¿¡ ã»å€§éé ä¿¡ã®ã¹ã±ãŒãªã³ã°ãæ ã ã»ãããŒã¯ã³ã®ç®¡çãä»»ãããããâ ãFCM çµç±ãšã®æ¯èŒã FCM çµç± ⊠Google ã«å¯ãããç¡åãå®è£ ãåçŽ Notification Hubs ⊠Azure ã«å¯ãããæåãå€§èŠæš¡ã»å€åªäœåã â æ¢ã« Azure ã䜿ã£ãŠããã倧éé ä¿¡ãèŠããªãæ€èšã«å€ãã
Tags: ç§»è¡, ããã°ã©ãã³ã°, ASP.NET, ASP.NET Web API, ASP.NET SPA, JavaScript