ãiOS 9.3ã®ãªãªãŒã¹ã«ãããApple Corporationã¯Apple MusicãµãŒãã¹ã䜿çšããŠé³æ¥œãåçã§ããããã«ãªããŸããã ãã®æ©èœãè©ŠããŠã Music Paradise Playerã¢ããªã±ãŒã·ã§ã³ã§äœæ¥ããããšã«ããŸããã ãã®çµéšã¯éåžžã«æçã§ãã-ã·ã¹ãã ã«ããã€ãã®èœãšãç©ŽãšåŒ±ç¹ãçºèŠãããŸããããããã¯äºåã«ç¥ãã®ã«åœ¹ç«ã¡ãŸãã ãã®èšäºã§ã¯ãApple Musicã䜿çšããäž»ãªãã€ã³ããšããã®ã·ã¹ãã ã®ããã€ãã®æ©èœã«ã€ããŠç°¡åã«èª¬æããŸãã

Apple Musicãžã®ã¢ã¯ã»ã¹ã確èªãã
éçºè åãã®Apple MusicãµããŒãã¯ãããŒãžã§ã³9.3以éã®SDKã§å©çšã§ãããããã¢ããªã±ãŒã·ã§ã³ã以åã®ããŒãžã§ã³ã®iOSçšã«éçºãããå Žåããã®äŸå€ãåŠçããå¿ èŠããããŸãã
Apple Musicãåçã§ãããã©ããã確èªãã次ã®ã¹ãããã¯ãSKCloudServiceControllerãžã®èªèšŒãªã¯ãšã¹ãã§ãã
[SKCloudServiceController requestAuthorization:^(SKCloudServiceAuthorizationStatus status) { // }];
ã¹ããŒã¿ã¹ã«ã¯ããã€ãã®å€ããããŸãã
- SKCloudServiceAuthorizationStatusAuthorized-ãã¹ãŠãæ£åžžã§ãã ãããç§ãã¡ã®ç®æšã¹ããŒã¿ã¹ã§ããä»ã®å Žåãé³æ¥œãå®å šã«åçããããšã¯ã§ããŸããã
- SKCloudServiceAuthorizationStatusDenied-ãŠãŒã¶ãŒãããã€ã¹ã®ã©ã€ãã©ãªãžã®ã¢ããªã±ãŒã·ã§ã³ã¢ã¯ã»ã¹ãæåŠããããããã以äžé²ãããšã¯ã§ããŸããã ãã®ç¶æ³ã§ã®è¯ãæ¹æ³ã¯ããŠãŒã¶ãŒãèšå®ã«ã¢ã¯ã»ã¹ããŠæåã§ã¢ã¯ã»ã¹ã§ããããã«ããããšã§ãã
- SKCloudServiceAuthorizationStatusRestrictedã¯åãæåŸ ã¯ããã®çµæã§ãããå¯äžã®éãã¯ããŠãŒã¶ãŒãå¶åŸ¡ã§ããªãç¶æ³ã®ããã«ã¢ã¯ã»ã¹ã§ããªãããšã§ãã
ãã®å ŽåããŠãŒã¶ãŒããããã¢ãããŠã£ã³ããŠã§åçãéžæããŠäœæ¥ãç¶ããå¿ èŠããããããSKCloudServiceAuthorizationStatusNotDeterminedã®ã¹ããŒã¿ã¹ãåãåãããšãã§ããªãããšã«æ³šæããŠãã ããã ãããã£ãŠããã®ãªãã·ã§ã³ãåŠçããŠãæå³ããããŸããã
ãŠãŒã¶ãŒã®ã©ã€ãã©ãªãžã®ã¢ã¯ã»ã¹ãããã£ãã®ã§ããŠãŒã¶ãŒãApple Musicã®ãµãã¹ã¯ãªãã·ã§ã³ãæã£ãŠãããã©ããã確èªããå¿ èŠããããŸãã
SKCloudServiceController *controller = [[SKCloudServiceController alloc] init]; [controller requestCapabilitiesWithCompletionHandler:^(SKCloudServiceCapability capabilities, NSError * _Nullable error) { // }];
ããã«ã¯å€ãã®ã¹ããŒã¿ã¹ãªãã·ã§ã³ããããŸãããåãå ¥ããããã®ã¯2ã€ã ãã§ãã
- SKCloudServiceCapabilityMusicCatalogPlayback-ãŠãŒã¶ãŒã¯Apple Musicããé³æ¥œãåçã§ããŸããiCloudã©ã€ãã©ãªã¯ãªãã«ãªã£ãŠããŸãã
- SKCloudServiceCapabilityAddToCloudMusicLibrary-ãŠãŒã¶ãŒã¯Apple Musicããé³æ¥œãåçã§ããiCloudã©ã€ãã©ãªããªã³ã«ãªã£ãŠããŸãã
å¿ èŠã«å¿ããŠã倱æããSKCloudServiceCapabilityNoneïŒãŠãŒã¶ãŒã¯Apple Musicã®ãµãã¹ã¯ãªãã·ã§ã³ãæã£ãŠããªãïŒãåŠçããããšãã§ããŸããã€ãŸãããŠãŒã¶ãŒããµãã¹ã¯ã©ã€ãã«æåŸ ããŸãã
ãã©ãã¯ãªã¹ããªã¯ãšã¹ã
iTunes Search APIã«åºäŒã£ãããšããªã人ã«ãšã£ãŠã¯ãããããã©ãã¯ã®æ€çŽ¢ãšåºåã¯éåžžã«è€éãªããã»ã¹ã§ãã æ確ã«ããããã«ãããã€ãã®ãã€ã³ãã«åããŸãã
ããŒã¯ãŒãæ€çŽ¢
ãªã¯ãšã¹ãã®äžè¬çãªãã¥ãŒã¯æ¬¡ã®ãšããã§ãã
itunes.apple.com/search?term=%@&limit=%ld&s=%@&entity=song&explicit=No
åãã©ã¡ãŒã¿ãŒãåæããŸãããïŒ
çšèª -æ€çŽ¢ã¯ãšãªã çæããŠãã ããïŒè€æ°ã®åèªã§æ§æãããŠããå Žåã¯ãã¹ããŒã¹ã+ã«çœ®ãæããå¿ èŠããããŸãïŒããããããã¯å€ãã®äººã«ãšã£ãŠæããã§ãããæå®ãã䟡å€ããããŸãïŒã
å¶é -çµæã®æ倧æ°ã ããã§ã¯ãã¹ãŠãçŽæçã§ãã ããã©ã«ãå€ã¯50ã§ãããå Žåã«ãã£ãŠã¯ããã§ååã§ã¯ãªãå ŽåããããŸãã
S ïŒAppleã«ããè¯å¥œãªåäœãååã«ãã£ãŠãã¹ãŠãããã«æ確ã«ãªããŸãïŒ-ãã®æ€çŽ¢åŒæ°ã¯å¿ é ã§ããããŠãŒã¶ãŒã¢ã«ãŠã³ãããªã³ã¯ãããŠããApp Storeã®åœã瀺ããŸãã å®éã®ãšãããApple Musicã®ããŸããŸãªåœã§ã¯ããŸããŸãªæ¥œæ²ãæäŸãããŠããŸãã ããã«ãåããã©ãã¯ãç°ãªãåœã§ç°ãªãèå¥åãæã€å ŽåããããŸãã
ç¹å®ã®ãŠãŒã¶ãŒã®ãã®èå¥åãååŸããã«ã¯ã次ã䜿çšããŸãã
SKCloudServiceController *controller = [[SKCloudServiceController alloc] init]; [controller requestStorefrontIdentifierWithCompletionHandler:^(NSString * _Nullable storefrontIdentifier, NSError * _Nullable error) { if(!error) { storeID = storefrontIdentifier; // } }];
ãšã³ãã£ãã£ã¯å¿ èŠãªãšã³ãã£ãã£ã§ãããç§ãã¡ã®å Žåã¯æã§ãã
æ瀺ç -åãšãçãªã³ã³ãã³ããæ€çŽ¢çµæã«å«ãããã©ããã決å®ããŸãã ãŸããã¢ããªã±ãŒã·ã§ã³ã®å¹Žéœ¢å¶éããå§ãã䟡å€ããããŸãã
æ€çŽ¢ã®äœ¿çšã«é¢ãã詳现ã«ã€ããŠã¯ã ãã¡ããã芧ãã ãã ã
ããããã£ãŒãã®ååŸ
ããããã£ãŒããååŸããã«ã¯ãAppleã®RSSãã£ãŒããžã§ãã¬ãŒã¿ãŒã䜿çšããå¿ èŠããããŸãã ãžã§ãã¬ãŒã¿ã®åºåã§ããã®ã¿ã€ãã®URLãååŸããŸãã
itunes.apple.com/en/rss/topsongs/limit=100/xml
ããã§ã¯ããã·ã¢ã®ããããã©ãã¯ãxml圢åŒã§100åå衚瀺ãããŸãã ç§ã®æèŠã§ã¯ããã®çµæã¯ããã€ãã®çç±ã§ç§ãã¡ã«åããªãã
第äžã«ãåœç€Ÿã®ãªãã¡ãŒã¯åžå Žããã³å€åœã®æ¶è²»è ã«æäŸãããŠãããããåœãå€æŽããå¿ èŠããããŸãã ãã®ãããruã®ä»£ããã«ãŠãŒã¶ãŒã®çŸåšã®åœã®èå¥åã眮ãæããå¿ èŠããããŸãã
èå¥åãååŸããããã«ãã¡ãã£ãšããããªãã¯ã䜿çšããŸããã IAPã¯ã¢ããªã±ãŒã·ã§ã³ã§æäŸããããããSKProductãååŸããŠæ¬¡ã®ããšãè¡ããŸãã
SKProduct *product = // IAP NSLocale* storeLocale = product.priceLocale; NSString *storeCountry = (NSString*)CFLocaleGetValue((CFLocaleRef)storeLocale, kCFLocaleCountryCode);
ãããã£ãŠãURLã§ruã®ä»£ããã«storeCountryã䜿çšããŸãã
ãããŠãç§ãã¡ã«åããªãå¥ã®ç¹ããããŸã-ããã¯åä¿¡ããããŒã¿ã®åœ¢åŒã§ãã ããããããã§ã¯ãã¹ãŠãç°¡åã§ããè¡ã®æåŸã§xmlãjsonã«å€æŽããŸãããã®çµæãããããã£ãŒããæ£ããã¢ããããŒãããããã«ãã®ã¿ã€ãã®URLãååŸããŸãã
itunes.apple.com/%@/rss/topsongs/limit=100/json
iTunesæ€çŽ¢APIããçŽ æŽãããã«ããŒãååŸããæ¹æ³
iTunesæ€çŽ¢ãã¢ããªã±ãŒã·ã§ã³ã«è¿œå ãããšãã«çºçããå¥ã®åé¡ã¯ãAPIã100x100以äžã®ãã©ãã¯ã®ã«ããŒã¢ãŒããè¿ãããšã§ãã ãã ããã³ãããããŸãã çµæã®jsonã§ã¯é«å質ã®ç»åãžã®ãªã³ã¯ã¯æäŸãããŸãããã次ã®ã¢ã«ãŽãªãºã ã䜿çšããŠååŸã§ããŸãã
- ããŒãartworkUrl100ãã«ããjsonããç»åãžã®ãªã³ã¯ãååŸããŸãã
- çµæã®è¡ã100x100ãã600x600ã«çœ®ãæããŸãã
- 倧ããªç»åãžã®ãªã³ã¯ãååŸããŸãã

Apple Musicãããã©ãã¯ãåçãã
ãã¹ãŠã®æºåãè¡ã£ãåŸãã©ããªã«å¥åŠã«èããããã«ãããããããã®æé ã¯ãApple Musicãã¢ããªã±ãŒã·ã§ã³ã«è¿œå ããããã»ã¹å šäœã§æãç°¡åã§ãã ãã¬ãŒã€ãŒãåæåããŠãåçãã©ãã¯ã®ãªã¹ããæäŸããã ãã§ãã åçãã©ãã¯ã®ãªã¹ãã¯ããã©ãã¯èå¥åãæã€æååãå«ãé åã®åœ¢åŒã§èšå®ãããŸãã ã³ãŒããšããŠã¯ã次ã®ããã«ãªããŸãã
-(void)playQuery:(NSArray<NSString*>*)query { self.player = [MPMusicPlayerController applicationQueuePlayer]; [self.player setQueueWithStoreIDs:query]; [self.player play]; }
Apple Musicã§ã®äœæ¥ã«èå³ã®ããæ©èœã§ããããšãããäžåºŠæãåºããŠãã ããã
setQueueWithStoreIDsïŒiOS 9.3以éãSDKã«ç»å ŽããŸãããããã®ç¬éãŸã§ããŠãŒã¶ãŒã®iTunesã©ã€ãã©ãªãåçããããã ãã«MPMusicPlayerControllerã䜿çšã§ããŸããã
æ©èœã®åŠç¿ã§ééããå°é£ã«ã€ããŠè©±ããšãæ€çŽ¢APIããã®jsonesãåŠçããåŸãèŸæžã«ã¯æååã§ã¯ãªãããžã¿ã«å€ãå«ãŸããŠããããšãæãåºãããŸãã ãããç£èŠããå¿ èŠããããŸãã
ãŸãããã®äŸã§ã¯applicationQueuePlayerã䜿çšããŠããããšã«ãèšåãã䟡å€ããããŸãã iOS 10.3ã§ã®ã¿ç»å ŽããŸããããè€æ°ã®ãã©ãã¯ãæäœããŠãããšãããªã¢ãŒãã³ã³ãããŒã«ïŒããã¯ãããç»é¢ãããããã©ã³ãªã©ïŒã§ã¯ã©ãã·ã¥ããããsystemMusicPlayerã«æ¯ã¹ãŠã¯ã©ãã·ã¥ããapplicationMusicPlayerãããåªãããœãªã¥ãŒã·ã§ã³ã®ããã§ãäºå®ã¯ã¢ããªã±ãŒã·ã§ã³ãšã¯ãŸã£ããé¢ä¿ããªãããŠãŒã¶ãŒããã°ã¢ãŠãããåŸã§ãåçãç¶ããããšãã§ããŸãã