0

我在 React Native 中创建了一个应用程序,它允许用户搜索歌曲,它使用 Apple Music API。到目前为止,一切都很好。

为下一步。我想要做的是使用用户搜索过的歌曲,并让他们将它们保存为 Apple Music 帐户中的播放列表(假设他们是订阅者等)。

但是,似乎缺乏有关如何执行此操作的文档和示例(至少与 Spotify 相比 - 我正在重新创建我过去制作的 Spotify 应用程序)。

我需要从用户那里获得授权,然后使用这个端点:https ://developer.apple.com/documentation/applemusicapi/create_a_new_library_playlist ,但我不知道该怎么做。API 文档的其他部分似乎只是简单地说明“通过用户的适当授权,您还可以创建或修改播放列表并将评级应用于用户的内容。” 但从未真正解释或链接到如何获得此授权。

谁能指出我正确的方向?让我知道我正在尝试做的事情是否真的可以通过 Apple Music - 看起来是这样,但我绕圈子的方式,我不再那么确定了。谢谢

4

3 回答 3

1

我不知道这是否会有所帮助(我是 iOS 开发人员,而不是 React 开发人员),但这是在 Swift 中将播放列表保存到用户音乐库的调用。也许它会帮助你指出正确的方向(?)

如果您不想让 Swift 代码污染您的线程,请告诉我,我会删除它。

import StoreKit
// ...


// request user token
if let devToken = UserDefaults.standard.string(forKey: "devToken") {

    SKCloudServiceController().requestUserToken(forDeveloperToken: devToken, completionHandler: { userToken, _ in

        guard let _ = userToken else { return }    
        self.addPlaylist()
    })
}


// add playlist
func addPlaylist() {

    MPMediaLibrary.default().addItem(withProductID: "pl.u-065LACYzL34", completionHandler: { _, error in

        guard error == nil else {
            print("add playlist sad")
            return
        }
        // success
    })
}
于 2020-03-09T03:47:19.950 回答
0

附加说明:您可以在快捷方式中的页面上运行 Javascript,但仅当您从 Safari 的共享表中运行快捷方式时。

此外,与您在许多教程中看到的相反,请记住,对于 POST 请求,标头 Music-User-Token 的值没有“Bearer”一词。在 GET 请求中使用“Bearer”字也可以。我已经构建了网页以将音乐用户令牌保存到剪贴板并将其保存以在快捷方式中使用。

于 2021-05-06T18:42:38.290 回答
0

我一直在考虑尝试这样做一段时间。

MusicKit JS 在浏览器中工作,但由于 iOS 中没有浏览器,所以这是不行的:没有Window.musicKit.getInstance(). 而且我还没有找到任何其他方式来授权 MusicKit,使用 JavaScript,除了 MusicKit JS。

只需使用开发人员令牌即可通过 API访问 Apple 音乐目录。您甚至可以访问(只读)用户的播放列表,如果它是公开的并且您知道全局 ID,但这不是我们在这里所追求的。我们想要访问用户的图书馆,以便我们可以做一些事情(除了删除,因为您不能通过 Apple Music API 删除内容)。

要授权访问 iOS 中的用户库,您需要使用 StoreKit,per this,并且为了使用 React Native 执行此操作,您需要使用 Native Modules per this

关于第二点的问题是我不知道如何做到这一点。我已经阅读了一些东西,但我还没有连接点。

如果您(或任何人)已经弄清楚了这一点,那么在这里写下带有操作方法的便条会很棒。如果我弄明白了,我会回到这里并发布。

更新:我找到了这篇文章,它几乎可以很好地解释它。

我在这里遇到的问题是,在Add a React Native iOS ProjectReact.xcodeproj部分中,有一个未完成的句子(“我们在这里创建......”),当我运行作者的步骤时,我似乎找不到已提供。

于 2020-02-28T09:41:19.333 回答