dart FlutterDio辅助对象后返回空值

doinxwow  于 2023-01-10  发布在  Flutter
关注(0)|答案(1)|浏览(132)

我使用Fire Base消息传递为另一个设备发送消息。我得到了另一个设备的密钥和令牌,但该职位只是在 Postman 工作,我在我的设备上成功接收通知。但当我使用下面这样的代码时,它返回空值为什么发送消息函数中从职位请求返回的值为空。职位请求在 Postman 工作正常,我没有'我看不出有什么逻辑错误,希望有人能帮我解决这个问题

import 'package:dio/dio.dart';
class DioHelper{

  static Dio ?dio ;

  static init(){
    
    dio = Dio(
      BaseOptions(
        baseUrl: 'https://fcm.googleapis.com/fcm/',
        receiveDataWhenStatusError: true,

      ) ,
    ) ;

  }

  static Future<Response?> getData({
    required String url,
    Map<String, dynamic> ?query,
    String lang = 'en',
    String ?token,
  }) async
  {
    dio?.options.headers =
    {
      'Content-Type':'application/json',
      'Authorization': 'key=key=${myapi}',
    };

    return await dio?.get(
      url,
      queryParameters: query??null,
    );
  }

  static Future<Response?> postData({
    required String url,
    Map<String, dynamic> ?query,
    required Map<String,dynamic> data ,
  })async
  {
    dio?.options.headers={
      'Content-Type':'application/json',
      'Authorization': 'key=${myapi}',
    };
    return await dio?.post(url,data: data ,queryParameters: query) ;
  }

  static Future<Response?> putData({
    required String url,
    Map<String, dynamic> ?query,
    required Map<String,dynamic> data ,
    String lang='en' ,
    String ?token ,
  })async
  {
    dio?.options.headers={
      'Content-Type':'application/json',
      'Authorization': 'key=key=${myapi}',
    };
    return await dio?.put(url,data: data ,queryParameters: query) ;
  }

}

使用Di-helper函数

void sendMessageForOneUser(String tokens,String title,String body,String image){
    print('sendmessages');
    DioHelper.postData(url:'send',data:{
      "to":tokens,
      "notification":{
        "title": title,
        "body":body ,
        "mutable_content": true,
        "sound": "Tri-tone",
        "image":image
      }
    }).then((value){
      print(value);
    }).catchError((onError){
      print(onError.toString());
    });
  }

我不知道为什么不工作以为它对 Postman 很好

bis0qfac

bis0qfac1#

在客户端代码中使用**"key=your_server_key"是一种*serious security risk,因为它允许恶意用户向您的用户发送他们想要的任何消息。在生产级应用程序中使用This is a bad practiceshould not be used
您可以尝试此代码从客户端(应用程序端)发送推送通知,但
我建议您避免这种方式***直到和除非您不使用服务器为您的移动的应用程序。尝试调用自己的服务器API从您的服务器端发送推送通知,而不是从客户端(移动应用程序端)发送推送通知。

Future<void> sendPushNotification(String receiverToken) async {
  try {
    const postUrl = 'https://fcm.googleapis.com/fcm/send';
    final data = {
      "registration_ids": [receiverToken], //CAN pass multiple tokens
      "collapse_key": "type_a",
      "notification": {
        "title": 'NewTextTitle',
        "body": 'NewTextBody',
      }
    };

    final headers = {
      'content-type': 'application/json',
      'Authorization': 'FCM_API_SERVER_KEY' // 'key=YOUR_SERVER_KEY'
    };

    final response = await http.post(postUrl,
        body: json.encode(data),
        encoding: Encoding.getByName('utf-8'),
        headers: headers);

    if (response.statusCode == 200) {
      debugPrint('test ok push FM');
    } else {
      debugPrint(' FCM not sent successfully');
    }
  } catch (ex) {
    debugPrint('send push notification api error: $ex');
  }
}

要获得更好的方法,请检查此link

相关问题