You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android端Apple MusicKit开发令牌使用及TOKEN_FETCH_ERROR问题咨询

问题根源:你误解了「开发者令牌」的定义

.p8文件是Apple Music开发者私钥,不是直接可用的开发者令牌。你需要用这个私钥生成符合Apple规范的JWT(JSON Web Token),才是createIntentBuilder()方法要求传入的参数。

正确生成开发者令牌的步骤
  1. 收集必要信息

    • 已获取的.p8私钥文件
    • 私钥对应的Key ID:生成.p8文件时会显示,也可在开发者后台「Certificates, Identifiers & Profiles」→「Keys」页面找到
    • 你的Apple开发者账号Team ID:在开发者后台首页右上角或「Membership」页面查看
  2. 用私钥生成合规JWT
    JWT必须满足以下规则:

    • 加密算法固定为ES256(椭圆曲线加密)
    • Header部分需包含:
      {
        "alg": "ES256",
        "kid": "你的Key ID",
        "typ": "JWT"
      }
      
    • Payload部分需包含:
      {
        "iss": "你的Team ID",
        "iat": 当前时间戳(秒级),
        "exp": 过期时间戳(秒级,最长不超过180天,建议设为1小时)
      }
      
    • 用.p8私钥对Header+Payload的Base64URL编码结果签名,得到完整JWT字符串
  3. 替换代码中的令牌
    将生成的JWT字符串填入R.string.developer_token,替换原来的.p8文件内容。

生成JWT的Kotlin代码示例

可以用com.auth0:java-jwt库快速实现:
首先在build.gradle添加依赖:

implementation 'com.auth0:java-jwt:4.4.0'

然后编写生成逻辑:

import com.auth0.jwt.JWT
import com.auth0.jwt.algorithms.Algorithm
import java.security.KeyFactory
import java.security.spec.PKCS8EncodedKeySpec
import java.util.*

fun generateDeveloperToken(
    p8Content: String,
    keyId: String,
    teamId: String
): String {
    // 清理.p8内容:去掉首尾标记和换行
    val cleanPrivateKey = p8Content
        .replace("-----BEGIN PRIVATE KEY-----", "")
        .replace("-----END PRIVATE KEY-----", "")
        .replace("\\s+".toRegex(), "")

    // 解码私钥
    val keySpec = PKCS8EncodedKeySpec(Base64.getDecoder().decode(cleanPrivateKey))
    val privateKey = KeyFactory.getInstance("EC").generatePrivate(keySpec)

    // 生成JWT
    val algorithm = Algorithm.ECDSA256(null, privateKey)
    return JWT.create()
        .withHeader(mapOf("kid" to keyId, "typ" to "JWT"))
        .withIssuer(teamId)
        .withIssuedAt(Date())
        .withExpiresAt(Date(System.currentTimeMillis() + 3600 * 1000)) // 1小时过期
        .sign(algorithm)
}
额外检查项
  • 确认.p8密钥已开启「Media Services (MusicKit, ShazamKit, Apple Music Feed)」权限
  • 检查Key ID和Team ID大小写、字符是否完全匹配
  • 确保JWT过期时间不超过180天,否则Apple会直接拒绝
  • 签名算法必须是ES256,不能使用HS256等其他算法

内容的提问来源于stack exchange,提问作者CommonsWare

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 08:40:15