Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ios] Works in the simulator but not in actual device #43

Open
GerardoLSJ opened this issue Jan 3, 2017 · 50 comments
Open

[ios] Works in the simulator but not in actual device #43

GerardoLSJ opened this issue Jan 3, 2017 · 50 comments

Comments

@GerardoLSJ
Copy link

I have this small template: https://github.com/GerardoLSJ/cordova-download-template-to-private-directory

On Android >= 4.1.2 works fine (after the alert when you push "play")
On iOS simulator too but in an actual device nothing is displayed :/

Any ideas?

@kailashanath
Copy link

Tried to deploy music controls in ionic 1 using the side menu starter template.installed the plugin and added this code the controller, works on android devices and ios simulator, but nothing is happening on IOS device. I also included the controller.js file here

controllers.js.txt

` $cordovaMusicControls.create({
track : 'My Music', // optional, default : ''
artist : 'Live Stream',
cover : "",
isPlaying : false, // optional, default : true
dismissable : true, // optional, default : false
// hide previous/next/close buttons:
hasPrev : false, // show previous button, optional, default: true
hasNext : false, // show next button, optional, default: true
hasClose : true, // show close button, optional, default: false
}, onSuccess, onFailure);

function events(action) {
  console.log(action);
  switch(action) {
    case 'music-controls-pause':
    $cordovaMusicControls.updateIsPlaying(false);
      console.log("pausing it");
    break;
    case 'music-controls-play':
      console.log("playing it");
      $cordovaMusicControls.updateIsPlaying(true);
    break;
    case 'music-controls-destroy':
      break;
    // Headset events (Android only)
    // Do something
      break;
    case 'music-controls-headset-plugged':
    // Do something
      break;
    default:
      break;
  }
}


// Register callback
$cordovaMusicControls.subscribe().subscribe(events);

// Start listening for events
// The plugin will run the events function each time an event is fired
$cordovaMusicControls.listen();
$cordovaMusicControls.updateIsPlaying(false);`

@0505gonzalez
Copy link
Collaborator

Hey guys, seems like the npm repository (which cordova and ionic cli tools use to install plugins) is not yet updated. I've asked @homerours to release the latest.

@0505gonzalez
Copy link
Collaborator

@GerardoLSJ Seems you got it working on emulator, make sure you start playing audio, this will switch music controls context over to your app. Let me know iOS version on your device and I will take a look as well.

@kailashanath
Copy link

@0505gonzalez Thanks for the fast response, I have checked it on the devices running IOS 9.3.2 and 10.2 and both of them are not showing any music controls

@GerardoLSJ
Copy link
Author

GerardoLSJ commented Jan 3, 2017

               my_media.play();

		MusicControls.create(notificationData, function(success){
			console.log('SUCCESS SHOW: '+success);
		},function(error){
			console.log('ERROR SHOW: '+error);
		});

}`

I know there is sound before the MusicControl.Create(), but I'm not sure if this is the best aproximation, the emulator is running 10.1, my device is running 10.0.2

I try using a setTimeout() in case there was a delay of the "media.play()" but nothing happen

@GerardoLSJ
Copy link
Author

I update my template: https://github.com/GerardoLSJ/cordova-download-template-to-private-directory

I was getting the audio from an interal location with the plugin Media.

I change to an html5 audio tag

var audio = document.getElementById("myAudio"); audio.play();

And It seems to work
img_0140

@kailashanath
Copy link

@GerardoLSJ are you able to change the title in the music control? As far as i know, this music control is automatically generated from the html 5 audio element, that is why there is no title and the url is showing. It is not created by the music control plugin.

@GerardoLSJ
Copy link
Author

GerardoLSJ commented Jan 4, 2017

On the init it appears the title and album that I give it, after I push pause appears the URL, I'm going to try to modify this.
I have to give it a little "SetTimeout" (800ms) I think it override the information from the HTML5 tag or something, once I click something it returns to the normal "url"

img_0141
img_0143

@re2005
Copy link

re2005 commented Jan 6, 2017

@GerardoLSJ thanks for the plugin.

I'm experiencing the same issue you have described above.

And it works on iOS simulator but unfortunately not on my device.

I've tried add to the config.xml some parameters but still didn't work

<feature name="BackgroundAudio"> <param name="ios-package" value="BackgroundAudio" /> <param name="onload" value="true" /> </feature>

Cheers

@0505gonzalez
Copy link
Collaborator

I'm using https://ionicframework.com/docs/v2/native/mediaplugin/ to play the audio, in my case a timeout is not required. This plugin does not override the data displayed in controls

@ghenry22
Copy link
Contributor

https://github.com/shi11/RemoteControls

this plugin still works well for music controls on iOS. It might serve as a good reference.

@soramister
Copy link

Any update on this issue?

@0505gonzalez
Copy link
Collaborator

@soramister @GerardoLSJ Do you guys have sample code I can try out? I'm not able to reproduce

@0505gonzalez
Copy link
Collaborator

I'd be glad to help if I can repro the problem

@soramister
Copy link

soramister commented Jan 24, 2017

I created a repository with a blank application here:
https://github.com/soramister/TestMusicControls

It contains just a play/pause button. If you play the music on the simulator, the plugin works, but not in a real iOS device.

@GerardoLSJ
Copy link
Author

https://github.com/GerardoLSJ/cordova-download-template-to-private-directory

This one is in Phonegap/Cordova plain, I download a song from the internet show up an "alert" and then once I push "Play" button in the simulator appears but in device dont'

@soramister
Copy link

Any updates?

@brainrepo
Copy link

Thanks for the plugin! I am using it on ionic2 application but I have the same problem! In the simulator works well but not in device :(

@ramoncarreras
Copy link

Yes, same problem here. Using ionic2 too.

@Mushaqdeen-J
Copy link

Hi I am using Phonegap, this plugin works in Android but not working on iPhone or iPad. Is there anything additional plugin I have to install to make works in iOS and iPad. Please help me.

@soramister
Copy link

@0505gonzalez Have you been able to reproduce the problem with the code I posted?

@gbelmm
Copy link

gbelmm commented Feb 14, 2017

+1 help please

@erikpolder
Copy link

+1 Works in simulator but not on device.

Device ios 10.2.1
Cordova CLI: 6.5.0
Ionic Framework Version: 2.0.1
Ionic CLI Version: 2.2.1
Ionic App Lib Version: 2.2.0
Ionic App Scripts Version: 1.1.0
ios-deploy version: 1.9.1
ios-sim version: Not installed
OS: macOS Sierra
Node Version: v6.9.5
Xcode version: Xcode 8.2.1 Build version 8C1002

Any further settings then Inter-App Audio and Background Modes required in Xcode that we are missing maybe?

@0505gonzalez
Copy link
Collaborator

Sorry guys been pretty busy, I'll give this a try soon.

@0505gonzalez
Copy link
Collaborator

@soramister do you have the background audio capability enabled on your project?

@0505gonzalez
Copy link
Collaborator

@soramister I tried your example and was able to reproduce. However, I haven't gotten to the bottom of the issue in your repo. I rebuilt the example from scratch and was able to get it working on a physical device properly. Here's an example. https://github.com/0505gonzalez/music-controls-example

Can someone try and let me know if it works for you? And @soramister let me know if you find out why your example does not work properly, I did not have much time to inspect carefully.

@erikpolder
Copy link

Suddenly it start working for me as well. I did platform rm ios. Removed all plugins. Installed all plugins. Added the ios platform. Reinstalled my certificates from Apple. Updated the xcode project with the suggested settings as Xcode suggested. Enabled the Capabilities. After that running the app on device everything worked as it should. Before all this I tried the steps one by one without luck. Unfortunately I can not tell exactly what the problem was.

@ramoncarreras
Copy link

Removed ios platform and all plugins. Re-installed ios platform and all plugins with no luck. I'm still facing same issue. Works in the simulator but not in a real device.

@epolder what capabilities did you enabled in xcode?

@gbelmm
Copy link

gbelmm commented Feb 21, 2017

+1 no found..

@erikpolder
Copy link

Inter-App Audio and Background Audio. I do not know i Background Audio is needed. I did also see in my provision profile that Inter Audio was enabled on my certificate att developer.apple.com

@0505gonzalez
Copy link
Collaborator

@ramoncarreras have you tried my example?

@gbelmm
Copy link

gbelmm commented Feb 22, 2017

@gbelmm
Copy link

gbelmm commented Feb 22, 2017

no found :(

@soramister
Copy link

@0505gonzalez Thank you for your example. Your project work on my computer.
As a result I worked some time to find out what is the difference and why it is not working.

It seems the plugin cordova-plugin-background-mode is the reason it does not work.
I had it on my project but it is not in yours.

If you just add this plugin to your project and rebuild, you will see it does not work anymore on your example. It is maybe some kind of conflict or anything.

Tell me if you can not reproduce this

@gbelmm
Copy link

gbelmm commented Feb 22, 2017

If I remove cordova-plugin-background-mode the problem is that the app closes when it blocks the cell

:(

@gbelmm
Copy link

gbelmm commented Feb 22, 2017

help please

@soramister
Copy link

@0505gonzalez Did you have time to take a look at my previous message?
The fact the plugin is not working on iOS devices is really blocking for me...

@aliendb
Copy link

aliendb commented Mar 19, 2017

As you mentioned in comment earlier @soramister (testing example from @0505gonzalez), this plugin works if background audio plugin is not used. I used a different background plugin, a simple implementation, with same results.

In the background plugin try removing the AVAudio​Session​Category​Option​Mix​With​Others option. This worked for me. Not sure if it will for all iOS versions or plugin combinations.

Example code: https://github.com/aliendb/iosbgaudio/blob/master/BackgroundAudio.m

@soramister
Copy link

@aliendb I tried your solution to remove the AVAudio​Session​Category​Option​Mix​With​Others option.
Unfortunately it does not work.

If you edit directly the official background audio plugin, can you reproduce your fix?

@aliendb
Copy link

aliendb commented Mar 27, 2017

@soramister -
I did some checking and saw that in the plugin.xml from the plugin you are using, (katzer/cordova-plugin-background-mode), there is no onload set with ios-package, so I added in an onload and saw that it worked to help with the background audio playing while the app is running in the background.

Changed from:

<feature name="BackgroundMode"> <param name="ios-package" value="APPBackgroundMode" /> </feature>

and modified it to

<feature name="BackgroundMode"> <param name="ios-package" value="APPBackgroundMode" onload="true" /> <param name="onload" value="true" /> </feature>

To confirm also, this was done along with removing the AVAudio​Session​Category​Option​Mix​With​Others option in APPBackgroundMode.m so that cordova-music-controls-plugin can work with the background plugin.
from
[session setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:NULL];
to
[session setCategory:AVAudioSessionCategoryPlayback error:NULL];


@gbelmm
Copy link

gbelmm commented Mar 27, 2017

@aliendb perfect solution !!!!!

@soramister
Copy link

@aliendb
THANK YOU!
Your solution is working.

Could you send your fix as a pull request to katzer/cordova-plugin-background-mode plugin? I can do it myself if you do not have time for it.

Thanks again!

@aliendb
Copy link

aliendb commented Mar 27, 2017

Thanks guys for confirming that the solution works.
@soramister as I'm not using katzer/cordova-plugin-background-mode plugin in my project at the moment, it will be great if you can make the pull request. thanks.

@soramister
Copy link

I created the pull request here:
katzer/cordova-plugin-background-mode#274

@ghenry22
Copy link
Contributor

Actually there should be no need for an on-load, you just set the plugin as enabled in your app code once device ready fires.

Note that the background-mode plugin continuously loops a sound in the background at volume 0 in order to try and "look" like it is playing background audio to keep alive apps that do not really need background audio.

If you actually have an audio app then you don't need the plugin to do this as you will be playing real audio in the background. In it's default state the background-mode plugin breaks the play/pause button the remote controls as it is always playing so play/pause never toggles.

If you are actually running an audio app make the following changes:
in the APPBackgroundMode.m file, in the configureAudioPlayer method change number of loops to be 1 instead of -1. This means it plays it's one silent sound to kick everything off but then relies on your app to play real background audio from then on.

audioPlayer.numberOfLoops = 1

You should still do the audioSessionCategory change above as well but it's less relevant when you are no longer constantly looping audio.

@al404
Copy link

al404 commented Jul 18, 2017

sorry but still getting the same issue and I'm not really sure what is the fix

I enable Inter-App Audio in my app

I use

MusicControls.create({
track : 'RPS',
artist : 'RPS',
cover : 'nocover.jpg',
isPlaying : true,
dismissable : true,
hasPrev : false,
hasNext : false,
hasClose : true,
album : 'RPS',
ticker : 'RPS'
});

MusicControls.subscribe(events);
MusicControls.listen();

when user hit PLAY

MusicControls.destroy();

when user hit PAUSE

i did not understand if i have to edit plugin files, right know it doesn't work in background

@fdambrosio
Copy link

I have same problem, I'm using Ionic3 and Videogular2.
I've activated Inter-App Audio but I see the music controls on Simulator, there's not in the IOS device

@tanvishah-syn
Copy link

Same here. I tried all the solutions mentioned above, however, am unable to get it working on iOS device. Works on android though. Am using ionic 3 and html5 audio player.

@tbergeron
Copy link

Anyone found a solution yet?

@tbergeron
Copy link

Is this working for anybody AT ALL?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests