构建APK时没有flutter_local_notification通知



我将我的应用程序设置为获取通知,即使它与工作管理器和flutter_local_notification关闭并且它与模拟器一起工作正常,但是当我构建APK时,我没有收到任何通知 我试图更改图标,但没有任何反应

我认为权限或向Androidmanifest添加某些内容存在问题.xml 这是代码的一部分

import 'dart:convert';
import 'package:flutter/material.dart';
import 'choosingpage.dart';
import 'package:workmanager/workmanager.dart';
import 'package:flutter/material.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:http/http.dart' as http;
import 'package:hive/hive.dart';
import 'package:path_provider/path_provider.dart';
const simplePeriodicTask = "simplePeriodicTask";
// flutter local notification setup
void showNotification( v, flp) async {
var android = AndroidNotificationDetails(
'channel id', 'channel NAME', 'CHANNEL DESCRIPTION',
priority: Priority.High, importance: Importance.Max);
var iOS = IOSNotificationDetails();
var platform = NotificationDetails(android, iOS);
await flp.show(0, 'Message from Manager', '$v', platform,
payload: '$v');
}

Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Workmanager.initialize(callbackDispatcher, isInDebugMode: true); //to true if still in testing lev turn it to false whenever you are launching the app
await Workmanager.registerPeriodicTask("5", simplePeriodicTask,
existingWorkPolicy: ExistingWorkPolicy.replace,
frequency: Duration(minutes: 15),//when should it check the link
initialDelay: Duration(seconds: 5),//duration before showing the notification
constraints: Constraints(
networkType: NetworkType.connected,
));

runApp(new MaterialApp(

// routes: {
//   // When navigating to the "/" route, build the FirstScreen widget.
//   '/': (context) => firstpage(),
//   // When navigating to the "/second" route, build the SecondScreen widget.
//   'allresult': (context) => allresult(),
//   'userpage': (context) => userpage(hi),
// },
//     initialRoute: 'allresult',
theme:
ThemeData(primaryColor: Colors.red, accentColor: Colors.yellowAccent),
debugShowCheckedModeBanner: false,
home: choosingpage(),
));
}
void callbackDispatcher() {
Workmanager.executeTask((task, inputData) async {
var box ;
String username;
String userpass;
String company;
final dir = await getApplicationDocumentsDirectory();
Hive.init(dir.path);
box = await Hive.openBox('app_data');
username = box.get('usernamelogin');
userpass = box.get('userpasslogin');
company = box.get('company');
print(username);
print(userpass);
print(company);
FlutterLocalNotificationsPlugin flp = FlutterLocalNotificationsPlugin();
var android = AndroidInitializationSettings('@mipmap/ic_launcher');
var iOS = IOSInitializationSettings();
var initSetttings = InitializationSettings(android, iOS);
flp.initialize(initSetttings);
var map = Map<String, dynamic>();
map['user'] = username;
map['pas'] = userpass;
map['com'] = company;

var url ="web site" ;
final response = await http.post(
url,
body: map);
var userdata = json.decode(response.body);
print(userdata["notf"]);
String mass=userdata["notf"];
String datenotf=userdata["datenotf"];
print(userdata);

//  if(mass!=""){
//   showNotification("$mass", flp);
// } else {
// print("no messgae");
// }
if(mass!=""){
showNotification("$mass", flp);
}
if(datenotf!=""){
showNotification("$datenotf", flp);
} 

return Future.value(true);
});
}

如果这只是 apk 发布版本的问题,则可能与 ProGuard/R8 完成的缩小有关。您可以通过将"--no-shrink"标志传递给颤振构建命令来禁用缩小作为测试。

即: 颤振构建 APK --不收缩

发布生成配置

在创建应用的发布版本之前(这是构建 APK 或应用捆绑包时的默认设置(,您可能需要根据此链接自定义 ProGuard 配置文件并添加以下行:

-keep class com.dexterous.** { *; }

这样做之后,还需要添加特定于插件使用的 GSON 依赖项的规则。这些规则可以在这里找到。示例应用有一个合并的 Proguard 规则 (proguard-rules.pro( 文件,该文件将这些规则组合在一起以供参考。

⚠️ 按照此处的说明,确保已配置应保留的资源,以便 R8 编译器不会丢弃通知图标等资源。如果不这样做,您可能无法看到您在应用的通知中指定的图标。示例应用程序使用的配置可在此处找到,其中指定应保留所有可绘制资源,以及用于播放自定义通知声音的文件(声音文件位于此处(。

文档链接

最新更新