Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Opening Apple Music from my iOS app

Context: I'm currently developing an iOS app that integrates with Apple Music API. I'm able to search for songs and play them on my app. To respect their policies I've to allow the user to launch and play the song on Apple Music app. Shazam does that for Apple Music, Deezer and Google Play (see image below).

enter image description here

I've done that for Spotify using this thread, basically using a URL scheme. On this Reddit thread I found a list of iOS URL Scheme's, but I can't find anything about Apple Music – this request on the same thread confirms that it's still not available.

No luck with the Apple Music API as well.

Question: Does someone knows how to accomplish the same behavior with Apple Music? Btw, it doesn't necessary needs to be with URL schemes.

The goal here is to launch the Apple Music and play the song into the Apple Music app, not on my app. I'm already playing songs from Apple Music on my app.

Am I missing something on the API docs? Any thoughts will be appreciated.

like image 888
antonioduarte Avatar asked Nov 09 '16 22:11

antonioduarte


People also ask

How do I stop Apple Music from opening when I connect my iPhone?

Method #1. Click on the iPhone It is located under the menu bar. This will open the iTunes settings. Open the Summary You will see the options in the right panel. Find and uncheck the Automatically Sync when iPhone is connected option and save the settings.

Why can't I open my Apple Music?

If Apple Music stops working, try all the easy things first. This includes restarting the Music app, restarting your computer, and checking to see if Apple Music is down for everyone. If these fail, check to make sure you have the latest updates and more.


1 Answers

You should use deeplinks in order to open tacks in Apple Music app: https://affiliate.itunes.apple.com/resources/documentation/linking-to-the-itunes-music-store/

First of all, you need to request an authorization via SKCloudServiceController API to check your capabilities (e.g., if your device allows playback of Apple Music tracks).

[SKCloudServiceController requestAuthorization:^(SKCloudServiceAuthorizationStatus status) {
        self.cloudServiceController = [[SKCloudServiceController alloc] init];
        [self.cloudServiceController requestCapabilitiesWithCompletionHandler:^(SKCloudServiceCapability capabilities, NSError * _Nullable error) {           
            [self.cloudServiceController requestStorefrontIdentifierWithCompletionHandler:^(NSString * _Nullable storefrontIdentifier,
                                                                                            NSError * _Nullable error) {
                NSString *identifier = [[storefrontIdentifier componentsSeparatedByString:@","] firstObject];
                identifier = [[identifier componentsSeparatedByString:@"-"] firstObject];
                NSString *countryCode = [self countryCodeWithIdentifier:identifier];                  
            }];

        }];
    }];

Next, you'll be able to request the store front identifier, which you are going to use to define your country code. I suggest to include a .plist file in your project with all the identifiers and respective country codes. (you can find the .plist file here https://github.com/bendodson/storefront-assistant/blob/master/StorefrontCountries.plist). You need your country code to the Apple Music API requests.

- (NSString *)countryCodeWithIdentifier:(NSString *)identifier {
     NSURL *plistURL = [[NSBundle mainBundle] URLForResource:@"CountryCodes" withExtension:@"plist"];
     NSDictionary *countryCodeDictionary = [NSDictionary dictionaryWithContentsOfURL:plistURL];

     return countryCodeDictionary[identifier];
}

Once you have the respective country code, you'll be able to search for a track in the Apple Music's API. Make a request to GET https: //itunes.apple.com/search using the following parameters:

 NSDictionary *parameters = @{
                               @"isStreamable" : @(YES),
                               @"term" : @"your search parameter"
                               @"media" : @"music",
                               @"limit" : @(5),
                               @"country" : @"your country code"
                               };

As a response of this request, you'll receive an array of track results, with lots of parameters associated. One of them is the "trackViewUrl". Just add the following parameters to this trackViewUrl in order to make it deep linking to Apple Music app:

NSString *appleMusicDeepLinking = [NSString stringWithFormat:@"%@&mt=1&app=music", response[0][@"trackViewUrl"]];
like image 187
Flavio Kruger Avatar answered Oct 11 '22 16:10

Flavio Kruger