丰富的推送通知 - 视频不会在通知内容扩展中播放
Rich Push Notification - Video won't play in Notification Content Extension
我正在处理富通知的 Notification Content Extension
并且能够成功加载 images
和 gif
,如下图所示:
现在我正在尝试播放视频,并且正在执行以下播放代码。
- (void)didReceiveNotification:(UNNotification *)notification {
//self.label.text = @"HELLO world";//notification.request.content.body;
if(notification.request.content.attachments.count > 0)
{
UNNotificationAttachment *Attachen = notification.request.content.attachments.firstObject;
NSLog(@"====url %@",Attachen.URL);
AVAsset *asset = [AVAsset assetWithURL:Attachen.URL];
AVPlayerItem *item = [AVPlayerItem playerItemWithAsset:asset];
AVPlayer *player = [AVPlayer playerWithPlayerItem:item];
AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
playerLayer.contentsGravity = AVLayerVideoGravityResizeAspect;
player.actionAtItemEnd = AVPlayerActionAtItemEndNone;
playerLayer.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
[self.VideoPlayerView.layer addSublayer:playerLayer];
[player play];
}
}
在 NSLog 中,我也得到了视频文件 url。但那不会玩。如果有人有解决方案,请提供帮助。
谢谢。
我用那个代码犯了一个非常小的错误。我们必须检查 startAccessingSecurityScopedResource
是否我执行如下代码
- (void)didReceiveNotification:(UNNotification *)notification {
if(notification.request.content.attachments.count > 0)
{
UNNotificationAttachment *Attachen = notification.request.content.attachments.firstObject;
if(Attachen.URL.startAccessingSecurityScopedResource)
{
NSLog(@"====url %@",Attachen.URL);
AVAsset *asset = [AVAsset assetWithURL:Attachen.URL];
AVPlayerItem *item = [AVPlayerItem playerItemWithAsset:asset];
AVPlayer *player = [AVPlayer playerWithPlayerItem:item];
AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
playerLayer.contentsGravity = AVLayerVideoGravityResizeAspect;
player.actionAtItemEnd = AVPlayerActionAtItemEndNone;
playerLayer.frame = CGRectMake(0, 0, self.VideoPlayerView.frame.size.width, self.VideoPlayerView.frame.size.height);
[self.VideoPlayerView.layer addSublayer:playerLayer];
[player play];
}
}
}
正在播放视频。呜呜...
- 检查你的代码。确保资源已下载到您的磁盘。
- 如果您想播放 url,您应该从通知 userInfo 中获取 url 并在您的内容扩展中播放它
解决 Ankur patel 在评论中提出的问题:
- 您应该创建通知内容扩展。
- (void)didReceiveNotification:(UNNotification *)notification
是一个 UNNotificationContentExtension 协议
这里是Swift5中Notification播放视频的解决方法
func didReceive(_ notification: UNNotification) {
let content = notification.request.content
titleLabel.text = content.title
subtitleLabel.text = content.body
playerController = AVPlayerViewController()
preferredContentSize.height = 475
// fetch your url string from notification payload.
let urlString = "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerBlazes.mp4"
if let url = URL(string: urlString) {
guard let playerController = self.playerController else { return }
let player = AVPlayer(url: url)
playerController.player = player
playerController.view.frame = self.playerBackgroundView.bounds
playerBackgroundView.addSubview(playerController.view)
addChild(playerController)
playerController.didMove(toParent: self)
player.play()
}
}
还有一些使用通知内容扩展的条件,希望您全部遵守。
我正在处理富通知的 Notification Content Extension
并且能够成功加载 images
和 gif
,如下图所示:
现在我正在尝试播放视频,并且正在执行以下播放代码。
- (void)didReceiveNotification:(UNNotification *)notification {
//self.label.text = @"HELLO world";//notification.request.content.body;
if(notification.request.content.attachments.count > 0)
{
UNNotificationAttachment *Attachen = notification.request.content.attachments.firstObject;
NSLog(@"====url %@",Attachen.URL);
AVAsset *asset = [AVAsset assetWithURL:Attachen.URL];
AVPlayerItem *item = [AVPlayerItem playerItemWithAsset:asset];
AVPlayer *player = [AVPlayer playerWithPlayerItem:item];
AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
playerLayer.contentsGravity = AVLayerVideoGravityResizeAspect;
player.actionAtItemEnd = AVPlayerActionAtItemEndNone;
playerLayer.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
[self.VideoPlayerView.layer addSublayer:playerLayer];
[player play];
}
}
在 NSLog 中,我也得到了视频文件 url。但那不会玩。如果有人有解决方案,请提供帮助。
谢谢。
我用那个代码犯了一个非常小的错误。我们必须检查 startAccessingSecurityScopedResource
是否我执行如下代码
- (void)didReceiveNotification:(UNNotification *)notification {
if(notification.request.content.attachments.count > 0)
{
UNNotificationAttachment *Attachen = notification.request.content.attachments.firstObject;
if(Attachen.URL.startAccessingSecurityScopedResource)
{
NSLog(@"====url %@",Attachen.URL);
AVAsset *asset = [AVAsset assetWithURL:Attachen.URL];
AVPlayerItem *item = [AVPlayerItem playerItemWithAsset:asset];
AVPlayer *player = [AVPlayer playerWithPlayerItem:item];
AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
playerLayer.contentsGravity = AVLayerVideoGravityResizeAspect;
player.actionAtItemEnd = AVPlayerActionAtItemEndNone;
playerLayer.frame = CGRectMake(0, 0, self.VideoPlayerView.frame.size.width, self.VideoPlayerView.frame.size.height);
[self.VideoPlayerView.layer addSublayer:playerLayer];
[player play];
}
}
}
正在播放视频。呜呜...
- 检查你的代码。确保资源已下载到您的磁盘。
- 如果您想播放 url,您应该从通知 userInfo 中获取 url 并在您的内容扩展中播放它
解决 Ankur patel 在评论中提出的问题:
- 您应该创建通知内容扩展。
- (void)didReceiveNotification:(UNNotification *)notification
是一个 UNNotificationContentExtension 协议
这里是Swift5中Notification播放视频的解决方法
func didReceive(_ notification: UNNotification) {
let content = notification.request.content
titleLabel.text = content.title
subtitleLabel.text = content.body
playerController = AVPlayerViewController()
preferredContentSize.height = 475
// fetch your url string from notification payload.
let urlString = "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerBlazes.mp4"
if let url = URL(string: urlString) {
guard let playerController = self.playerController else { return }
let player = AVPlayer(url: url)
playerController.player = player
playerController.view.frame = self.playerBackgroundView.bounds
playerBackgroundView.addSubview(playerController.view)
addChild(playerController)
playerController.didMove(toParent: self)
player.play()
}
}
还有一些使用通知内容扩展的条件,希望您全部遵守。