2016-06-03 4 views
1

В iOS 9.3 Apple выпускает новые API. Теперь разработчики могут узнать, является ли пользователь в данный момент членом Apple Music. Я пытаюсь понять, как это работает. Мой код - только первый раз - спрашивает пользователя, получать ли доступ к музыкальной библиотеке, но я не понимаю, как определить, каким образом вы можете определить, является ли пользователь членом, и откройте Apple Music, чтобы присоединиться к нему. Эти действия в Шазаме действительно великолепны. Как я могу сделать что-то подобное? Спасибо заранее!Apple Music detect является членом

[SKCloudServiceController requestAuthorization:^(SKCloudServiceAuthorizationStatus status) { 

    NSLog(@"status is %ld", (long)status); 

    SKCloudServiceController *cloudServiceController = [[SKCloudServiceController alloc] init]; 

    [cloudServiceController requestCapabilitiesWithCompletionHandler:^(SKCloudServiceCapability capabilities, NSError * _Nullable error) { 

     NSLog(@"%lu %@", (unsigned long)capabilities, error); 

     if (capabilities >= SKCloudServiceCapabilityAddToCloudMusicLibrary || capabilities==SKCloudServiceCapabilityMusicCatalogPlayback) { 

      NSLog(@"You CAN add to iCloud!"); 


     } else { 

      NSLog(@"The ability to add Apple Music track is not there. sigh."); 
     } 

    }]; 

}]; 

ответ

4

Вы должны проверить флаг SKCloudServiceCapabilityMusicCatalogPlayback. Код в вашем вопросе проверяет, соответствует ли переменная возможностей этому флагу, но вам нужно использовать побитовые операторы. Вот как вы это сделаете.

SKCloudServiceController *controller = [SKCloudServiceController new]; 
[controller requestCapabilitiesWithCompletionHandler:^(SKCloudServiceCapability capabilities, NSError * _Nullable error) { 
    if (error != nil) { 
     NSLog(@"Error getting SKCloudServiceController capabilities: %@", error); 

    } else if (capabilities & SKCloudServiceCapabilityMusicCatalogPlayback) { 
     // The user has an active subscription 

    } else { 
     // The user does *not* have an active subscription 
    } 
}]; 

Вы можете сказать, что SKCloudServiceCapabilityMusicCatalogPlayback является флагом, а не только регулярное постоянное значение, так как значение использует операторы побитового (далее «< <» приведены в документации компании Apple).

SKCloudServiceCapabilityMusicCatalogPlayback = 1 << 0 

https://developer.apple.com/reference/storekit/skcloudservicecapability/skcloudservicecapabilitymusiccatalogplayback?language=objc