npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

nativescript-spotify

v1.6.1

Published

Spotify for your NativeScript app.

Downloads

103

Readme

alt text

A NativeScript plugin for the Spotify iOS and Android SDKs.

Install

npm install nativescript-spotify --save

Prerequisites

  • Spotify streaming requires a Premium account.
  • Create a Spotify Developer account here: https://developer.spotify.com/
  • Create an app in your developer account and follow these instructions to get setup: https://developer.spotify.com/technologies/spotify-ios-sdk/tutorial/#creating-your-client-id-secret-and-callback-uri

Background

Usage

Platform Prerequisites

iOS

Setup

  • app.ts

Configure application launch phases to setup your Spotify App CLIENT_ID and REDIRECT_URL (the ones you created above in the developer account):

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!`);
  } 
}

Screenshots

Sample 1 | Sample 2 -------- | --------- Sample1 | Sample2

Sample 3 | Sample 4 -------- | ------- Sample3 | Sample4

Android

Setup

  • Docs coming soon for Android...

Documentation

TNSSpotifyPlayer

TNSSpotifyPlayer implements SPTAudioStreamingPlaybackDelegate.

Creating:

// 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}`);
});

Methods

Method | Description -------- | --------- togglePlay(track?: string): Promise<any> | Allows toggle play/pause on a track, or changing a track. track must be a valid spotify track uri. Learn more here isPlaying(): boolean | Determine if player is currently playing isLoggedIn(): boolean | Determine if player is authenticated setVolume(value: number): Promise<any> | Set the player volume loadedTrack(): string | Determine current loaded track (spotify track uri) currentTrackMetadata(): ISpotifyTrackMetadata | Get the current track's metadata. Learn more here

Events

Event | Description -------- | --------- authLoginChange | Sends along data = status: boolean When auth state changes. authLoginCheck | When auth callback has returned and is verifying authentication authLoginSuccess | When auth succeeded albumArtChange | Sends along data = url: string When track triggers a play start, this will also trigger to send along the correct album art of the track. playerReady | When the session has been validated and the player is ready to play. changedPlaybackStatus | Sends along data = playing: boolean When playback state changes. seekedToOffset | Sends along data = offset: number When player has seeked to a given offset. changedVolume | Sends along data = volume: number When the player volume was changed. changedShuffleStatus | Sends along data = shuffle: number When shuffle setting was changed. changedRepeatStatus | Sends along data = repeat: number When repeat setting was changed. changedToTrack | Sends along data = metadata: any When track change occurs. failedToPlayTrack | Sends along data = url: string When track play fails. Provides the url of the track that failed. startedPlayingTrack | Sends along data = url: string When track play starts. Provides the url of the track that started. stoppedPlayingTrack | Sends along data = url: string When track play stops. Provides the url of the track that stopped. skippedToNextTrack | When player skipped to next track. skippedToPreviousTrack | When player skipped to previous track. activePlaybackDevice | When the audio streaming object becomes the active playback device on the user’s account. inactivePlaybackDevice | When the audio streaming object becomes an inactive playback device on the user’s account. poppedQueue | When the audio streaming object becomes an inactive playback device on the user’s account. temporaryConnectionError | A temporary connection error occurred. streamError | Sends along data = error: any when a streaming error occurred. receivedMessage | Sends along data = message: string when a message is received from the Spotify service. streamDisconnected | When the stream becomes disconnected.

TNSSpotifyAuth

TNSSpotifyAuth

Provides static properties and methods to help with authentication handling and user management.

Properties

Property | Description -------- | --------- REDIRECT_URL: string | Used to set your spotify application redirect url, required for device auth redirect, ie: 'your-app-custom-url-scheme://spotifylogin' SESSION: SPTSession | Represents the current auth session. CLEAR_COOKIES: boolean | Clear cookies in auth window to not remember last logged in user. Defaults false. PREMIUM_MSG: string | The message which alerts when a non-premium user attempts to play a track.

Methods

Method | Description -------- | --------- LOGIN(): void | Initiates login sequence. LOGIN_WITH_SESSION(session): void | Logs user in with session returned from the in-app browser auth window. LOGOUT(): void | Clear's persisted user session and notifies of login change. HANDLE_AUTH_CALLBACK(url): boolean | When using standard browser redirect auth, this can be used in application launch phase to handle the auth redirect back into the app. On older versions, this may be needed. VERIFY_SESSION(session?: any): Promise<any> | Mainly used internally, but used to restore a session from local persistence and/or renew. SAVE_SESSION(session): void | Mainly used internally, but can be used to persist a valid Spotify session. GET_STORED_SESSION(): any | Get the current user's session. Learn more here RENEW_SESSION(session): Promise<any> | Can be used to pass an expired session to renew it. CURRENT_USER(): Promise<any> | Get the current user object. Learn more here

TNSSpotifySearch

TNSSpotifyAuth

Provides 1 static method to search Spotify.

Methods

Method | Description -------- | --------- QUERY(query: string, queryType: string, offset: number = 0): Promise<any> | Search and paginate through query results of Spotify search results. Resolves an Object structure: {page: number (offset), hasNextPage: boolean, totalListLength: number, tracks: Array}. Right now using queryType = 'track' is supported. More query types coming soon.

Why the TNS prefixed name?

TNS stands for Telerik NativeScript

iOS uses classes prefixed with NS (stemming from the NeXTSTEP days of old): https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/

To avoid confusion with iOS native classes, TNS is used instead.

License

MIT