我这样发出UNUserNotification:
Label
它将显示一个带有标题和正文的通知,以及两个自定义操作按钮(接受和拒绝,这是一个来电)。它也可以播放声音,但由于某种原因,如果应用程序是前台,则不会。
我还尝试用它伪造一个持久性通知,就像Whatsapp通过每隔约4秒钟重复一次本地通知来做到这一点一样,但是第二次它显示通知时声音被切断了。这不是第一个声音,第二个声音是自己播放的,但是这次并没有完全播放。声音只有1-2秒。
我不明白为什么会有这些差异,如何使它始终播放声音(前景,背景,不运行),以及如何确保第二次显示通知时声音不会被切断?>
答案 0 :(得分:0)
在应用程序运行时收到通知时,通常会将通知静音,以便应用程序可以更本地化的方式处理它们。
如果我没记错的话,收到通知会打电话给
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
class SessionsController extends Controller
{
public function __construct()
{
$this->middleware('auth')->except(['create', 'login']);
}
public function create()
{
$data = [
'title' => 'Login',
'body_class' => 'hold-transition login-page',
];
return view('auth.login', $data);
}
public function login(Request $request)
{
$this->validate($request, [
'username' => 'required',
'password' => 'required',
]);
$user = User::checkCredentials($request->username, $request->password);
if (!$user) {
return back()->with([
'class' => 'alert-danger',
'message' => 'Please check your credentials',
]);
}
// set session active flag to true
$user->session_active = true;
$user->save();
auth()->login($user);
return redirect()->route('dashboard');
}
public function destroy()
{
$user = auth()->user();
$user->last_login = date('Y-m-d H:i:s');
$user->session_active = false;
$user->save();
auth()->logout();
return redirect()->route('login')->with([
'class' => 'alert-success',
'message' => 'You logged out successfully',
]);
}
}
在收到通知时调用此方法,并且如果应用程序在前台运行,则通常将其静音。完成处理程序确定应采取的操作以及是否应显示通知或发出声音等。
在这种情况下,如果someCondition为true,则它应该像往常一样自然显示通知,否则不执行任何操作。
尝试在您的应用中使用此方法调用func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler:
@escaping (UNNotificationPresentationOptions) -> Void) {
if someCondition {
completionHandler(.alert)
} else {
completionHandler(.init(rawValue: 0))
}
}
,通知应显示