我知道如何创建无声推送通知(通过播放无声的声音文件)。 我还想发送不振动手机的推送通知。
按照下面的建议设置静音文件时,手机在锁定或应用程序未激活时仍然会振动。
我的有效负载仍然振动:
{
aps = {
alert = {
"loc-key" = "SOME_KEY";
};
badge = 1;
sound = "silence.caf";
};
}
这可能吗?
省略声音键应该可以解决问题:
{"aps":{"alert":{"loc-key":"SOME_KEY"}, "badge":1}
文档指出“如果声音文件不存在或指定默认值,则播放默认警报声音。”。他们没有说的是,如果您根本不提供声音键,则不会播放任何声音。如果没有声音播放,手机也不应该振动。
我是这样做的:服务器向设备发送一个带有声音文件名的推送,该设备是无声的。 就是这样。
示例:
来自服务器的传入负载:
{ aps = { "content-available" = 1; sound="silence.mp3" }; data-id = 1234; }
设备在
AppDelegate
中处理它:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
NSInteger data_id= [userInfo[@"data-id"] integerValue];
NSLog(@"Data-id: %i", data_id);
//
// code...
//
// UIBackgroundFetchResultNoData/UIBackgroundFetchResultFailed/UIBackgroundFetchResultNewData
completionHandler(UIBackgroundFetchResultNewData);
}
当您注册推送通知时,不要询问声音类型(
UIRemoteNotificationTypeSound
)
- (void)registerForRemoteNotificationTypes:(UIRemoteNotificationType)types
您可以通过在通知设置中手动删除声音权限来测试这一点
[[UIApplication sharedApplication]registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeBadge];
请尝试使用上面的代码AppDelegate的applicationDidFinsihLaunching方法来注册远程通知
我也遇到过类似的问题。可以通过在项目功能中设置后台获取来修复振动
我必须添加 AppDelegate :
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
NotificationCenter.default.post(name: Notification.Name.init("didReceiveRemoteNotification"), object: completionHandler, userInfo: userInfo)
}
并检查“后台模式”功能中的“远程通知”。
然后我发送一条仅包含数据的通知:
device.send_message(
messaging.Message(
data = data,
), app = FCMApp)