npm i --save nativescript-spotify
- 版本:1.6.1
- GitHub: https://github.com/NathanWalker/nativescript-spotify
- NPM: https://npmjs.net.cn/package/nativescript-spotify
- 下载
- 前一天:0
- 上周:1
- 上个月:57
适用于 Spotify iOS 和 Android SDK 的 NativeScript 插件。
安装
npm install nativescript-spotify --save
先决条件
- Spotify 流媒体需要 高级 账户。
- 在此处创建 Spotify 开发者账户:https://developer.spotify.com/
- 在您的开发者账户中创建一个应用,并按照以下说明进行设置:https://developer.spotify.com/technologies/spotify-ios-sdk/tutorial/#creating-your-client-id-secret-and-callback-uri
背景
- 基于 Spotify iOS SDK 测试版 13
- Android 基于 Spotify Android SDK 1.0.0 测试版 13
用法
平台先决条件
iOS
设置
- app.ts
配置应用程序启动阶段,设置您的 Spotify 应用 CLIENT_ID 和 REDIRECT_URL(您在开发者账户中创建的)
import * as application from 'application';
import {NSSpotifyConstants, NSSpotifyAuth} from 'nativescript-spotify';
class MyDelegate extends UIResponder {
public static ObjCProtocols = [UIApplicationDelegate];
public applicationDidFinishLaunchingWithOptions(application: UIApplication, launchOptions: NSDictionary): boolean {
NSSpotifyConstants.CLIENT_ID = 'your spotify premium account api key';
TNSSpotifyAuth.REDIRECT_URL = 'your-app-custom-url-scheme://spotifylogin';
return true;
}
}
application.ios.delegate = MyDelegate;
application.mainModule = "main-page";
application.cssFile = "./app.css";
application.start();
- main-page.ts
import {SpotifyDemo} from "./main-view-model";
function pageLoaded(args) {
var page = args.object;
page.bindingContext = new SpotifyDemo();
}
exports.pageLoaded = pageLoaded;
- main-view-model.ts
import {Observable, EventData} from 'data/observable';
import {Page} from 'ui/page';
import {topmost} from 'ui/frame';
import {AnimationCurve} from 'ui/enums';
import * as loader from 'nativescript-loading-indicator';
import {TNSSpotifyConstants, TNSSpotifyAuth, TNSSpotifyPlayer, TNSSpotifyPlaylist, TNSSpotifyRequest, Utils} from 'nativescript-spotify';
export class SpotifyDemo extends Observable {
private _spotify: TNSSpotifyPlayer;
constructor() {
super();
this._spotify = new TNSSpotifyPlayer();
// when using iOS delegates that extend NSObject, TypeScript constructors are not used, therefore a separate `initPlayer()` exists
this._spotify.initPlayer(true); // passing `true` lets player know you want it to emit events (sometimes it's not desired)
// small sample of events (see Documentation below for full list)
this._spotify.audioEvents.on('albumArtChange', (eventData) => {
this.updateAlbumArt(eventData.data.url);
});
this._spotify.audioEvents.on('authLoginSuccess', (eventData) => {
this.loginSuccess();
});
}
public login() {
TNSSpotifyAuth.LOGIN();
}
public play(args?: EventData) {
this._spotify.togglePlay('spotify:track:58s6EuEYJdlb0kO7awm3Vp').then((isPlaying: boolean) => {
console.log(isPlaying ? 'Playing!' : 'Paused!');
}, (error) => {
console.log(`Playback error: ${error}`);
});
}
private updateAlbumArt(url: string) {
this.set(`currentAlbumUrl`, url);
}
private loginSuccess() {
console.log(`loginSuccess!`);
}
}
截图
示例 1 | 示例 2 |
---|---|
示例 3 | 示例 4 |
---|---|
Android
设置
- Android 文档即将推出...
文档
TNSSpotifyPlayer
TNSSpotifyPlayer 实现 SPTAudioStreamingPlaybackDelegate。
创建
// Option 1: simple
this.spotify = new TNSSpotifyPlayer();
this.spotify.initPlayer();
// Option 2: advanced
this.spotify = new TNSSpotifyPlayer();
// passing `true` will let the player know it should emit events
this.spotify.initPlayer(true);
// it allows you to listen to events like so:
this.spotify.audioEvents.on('startedPlayingTrack', (event) => {
console.log(event.data.url); // spotify track url
});
// play/pause a track
this.spotify.togglePlay('spotify:track:58s6EuEYJdlb0kO7awm3Vp').then((isPlaying: boolean) => {
console.log(isPlaying ? 'Playing!' : 'Paused!');
}, (error) => {
console.log(`Playback error: ${error}`);
});
方法
方法 | 描述 |
---|---|
togglePlay(track?: string) : Promise<any> |
允许在指定曲目上切换播放/暂停,或更改曲目。 track 必须是有效的 Spotify 曲目 uri。 了解更多信息 |
isPlaying() : boolean |
确定播放器是否正在播放 |
isLoggedIn() : boolean |
确定播放器是否已认证 |
setVolume(value: number) : Promise<any> |
设置播放器音量 |
loadedTrack() : string |
确定当前加载的曲目(Spotify 曲目 uri) |
currentTrackMetadata() : ISpotifyTrackMetadata |
获取当前曲目的元数据。 了解更多信息 |
事件
事件 | 描述 |
---|---|
authLoginChange |
当认证状态更改时,发送 data = status: boolean |
authLoginCheck |
当认证回调返回并验证认证时 |
authLoginSuccess |
当认证成功时 |
albumArtChange |
当曲目触发播放开始时,发送 data = url: string ,这将触发发送正确的曲目专辑封面。 |
playerReady |
当会话已验证且播放器准备好播放时 |
changedPlaybackStatus |
当播放状态更改时,发送 data = playing: boolean |
seekedToOffset |
当播放器已跳转到指定偏移量时,发送 data = offset: number |
changedVolume |
当播放器音量更改时,发送 data = volume: number |
changedShuffleStatus |
当更改随机播放设置时,发送 data = shuffle: number |
changedRepeatStatus |
当更改重复设置时,发送 data = repeat: number |
changedToTrack |
当曲目更改发生时,发送 data = metadata: any |
failedToPlayTrack |
当曲目播放失败时,发送 data = url: string 。提供失败的曲目 URL。 |
startedPlayingTrack |
在播放开始时发送 data = url: string 。提供已开始播放的音轨的URL。 |
stoppedPlayingTrack |
在播放停止时发送 data = url: string 。提供已停止播放的音轨的URL。 |
skippedToNextTrack |
当播放器跳转到下一音轨时。 |
skippedToPreviousTrack |
当播放器跳转到上一音轨时。 |
activePlaybackDevice |
当音频流对象成为用户账户上的活动播放设备时。 |
inactivePlaybackDevice |
当音频流对象成为用户账户上的非活动播放设备时。 |
poppedQueue |
当音频流对象成为用户账户上的非活动播放设备时。 |
temporaryConnectionError |
发生了临时连接错误。 |
streamError |
在发生流错误时发送 data = error: any 。 |
receivedMessage |
收到来自Spotify服务的消息时发送 data = message: string 。 |
streamDisconnected |
当流断开连接时。 |
TNSSpotifyAuth
TNSSpotifyAuth
提供用于处理身份验证和用户管理的静态属性和方法。
属性
属性 | 描述 |
---|---|
REDIRECT_URL : string |
用于设置您的Spotify应用程序重定向URL,用于设备身份验证重定向,例如:'your-app-custom-url-scheme://spotifylogin' |
SESSION : SPTSession |
表示当前的身份验证会话。 |
CLEAR_COOKIES : boolean |
在身份验证窗口中清除cookie以不记住上次登录的用户。默认值为false 。 |
PREMIUM_MSG : string |
当非高级用户尝试播放音轨时显示的消息。 |
方法
方法 | 描述 |
---|---|
LOGIN() : void |
启动登录序列。 |
LOGIN_WITH_SESSION(session) : void |
使用从应用程序内浏览器身份验证窗口返回的会话登录用户。 |
LOGOUT() : void |
清除持久化的用户会话并通知登录更改。 |
HANDLE_AUTH_CALLBACK(url) : boolean |
当使用标准浏览器重定向身份验证时,可以在应用程序启动阶段使用此方法来处理身份验证重定向回应用程序。在旧版本中可能需要。 |
VERIFY_SESSION(session?: any) : Promise<any> |
主要在内部使用,但用于从本地持久化中恢复会话和/或更新。 |
SAVE_SESSION(session) : void |
主要在内部使用,但可用于持久化有效的Spotify会话。 |
GET_STORED_SESSION() : any |
获取当前用户的会话。 了解更多信息 |
RENEW_SESSION(session) : Promise<any> |
可用于将过期的会话传递以更新它。 |
CURRENT_USER() : Promise<any> |
获取当前用户对象。 了解更多信息 |
TNSSpotifySearch
TNSSpotifyAuth
提供1个静态方法来搜索Spotify。
方法
方法 | 描述 |
---|---|
QUERY(query: string, queryType: string, offset: number = 0) : Promise<any> |
搜索并分页浏览Spotify搜索结果。解析为对象结构:{page: number (offset), hasNextPage: boolean, totalListLength: number, tracks: Array} 。目前支持使用queryType = 'track' 。更多查询类型即将推出。 |
为什么使用TNS前缀名称?
TNS
代表T
elerik N
ativeS
cript
iOS使用以NS
前缀的类(源自古老的NeXTSTEP
时代):https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/
为了避免与iOS原生类混淆,使用TNS
。
许可证
MIT