【发布时间】:2020-09-07 13:04:15
【问题描述】:
Flutter 中是否有办法接收来自多个 firebase 项目的主题通知,我一直在寻找一种方法但没有运气,Flutter 插件似乎甚至没有通过 sender id 方法生成的令牌,我也在寻找一种使用rest api实现它但不知道从哪里开始的方法。欢迎任何方向。
【问题讨论】:
标签: flutter firebase-cloud-messaging
Flutter 中是否有办法接收来自多个 firebase 项目的主题通知,我一直在寻找一种方法但没有运气,Flutter 插件似乎甚至没有通过 sender id 方法生成的令牌,我也在寻找一种使用rest api实现它但不知道从哪里开始的方法。欢迎任何方向。
【问题讨论】:
标签: flutter firebase-cloud-messaging
Firebase Cloud Functions 应该可以帮助您。 Cloud Functions 允许您在服务器端执行数据库、身份验证、云消息传递和其他功能。您可以在 fiebase 控制台上创建 Web 应用程序并使用 https 调用函数。这是我发现非常有用的教程的链接:
https://www.youtube.com/playlist?list=PL4cUxeGkcC9i_aLkr62adUTJi53y7OjOf
【讨论】:
确实,firebase 对 Flutter 的依赖并不支持这个功能,但是你可以创建 methodChannel 来调用来自 Flutter 的原生代码
首先,在任意位置添加 MethodChannel
static const platform = const MethodChannel('flutter.native/helper'); //<-- This string argument is custom, but must the same in java code
Future<void> responseFromNativeCode() async {
String response = "";
try {
String senderID = '52723600452'; // <----- this is the identifier of another project
final String result = await platform.invokeMethod(
'onNewToken', <String, dynamic>{'senderId': senderID});
response = result;
print(response); // <----- this is the token, with this, you can receive notifications from another firebase project
} on PlatformException catch (e) {
response = "Failed to Invoke: '${e.message}'.";
print(response);
}
}
此解决方案仅适用于 android,但是,您也需要实现 ios... swift
现在...您需要在android中实现methodChannel并添加firebase实现...这是一个示例
public class MainActivity extends FlutterActivity {
private String CHANNEL = "flutter.native/helper";//This string must be same in flutter declaration
private String token = "";
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
super.configureFlutterEngine(flutterEngine);
new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)
.setMethodCallHandler((call, result) -> {
if(call.method.equals("onNewToken")){//This string must be same too in flutter declaration
String senderId = call.argument("senderId");
TokenOtherProject a = new TokenOtherProject();
AsyncTask b = a.execute(senderId);
try {
b.get();//This is like await in flutter
result.success(token);//with this, you send the token to flutter project... and handler in page or idk
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
private class TokenOtherProject extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... params) {
try {
token = FirebaseInstanceId.getInstance().getToken(params[0],
FirebaseMessaging.INSTANCE_ID_SCOPE);
} catch (IOException e) {
e.printStackTrace();
}
new Handler(Looper.getMainLooper()).post(new Runnable(){
@Override
public void run() {
Log.d("*TokenNuevo: " , token + " ");
}
});
return null;
}
}}
您可以获得有关如何与本地人交流的更多信息... flutter fcm 包必须有这个功能但没有:/
不管怎样……祝你好运
【讨论】: