gpt4 book ai didi

使用 Agora Flutter 来电视频/音频调用通知

转载 作者:行者123 更新时间:2023-12-05 05:52:50 24 4
gpt4 key购买 nike

我一直在开发一个应用程序,我需要在我的应用程序中实现音频和视频通话,这是我使用 Agora.io 完成的,但问题是我必须显示来电通知,如果应用程序在前景或背景。我已经尝试了很多东西,但我仍然无法配置它。我正在使用 agora_rtc_engine 包来调用电话。

如有任何帮助,我们将不胜感激。

谢谢

我目前使用的代码:

调用方法

class CallMethods {
final callRef = FirebaseFirestore.instance.collection('Calls');

Stream<DocumentSnapshot> callstream({@required String id}) =>
callRef.doc(id).snapshots();

Future<bool> makeCall({@required Call call}) async {
try {
log('Making call');
call.hasdialed = true;
Map<String, dynamic> hasDialedMap = call.toMap(call);

call.hasdialed = false;
Map<String, dynamic> hasNotDialedMap = call.toMap(call);

await callRef.doc(call.senderid).set(hasDialedMap);
await callRef.doc(call.receiverid).set(hasNotDialedMap);

return true;
} catch (e) {
print(e);
return false;
}
}

Future<bool> endCall({@required Call call}) async {
try {
log('ending call');
await callRef.doc(call.senderid).delete();
await callRef.doc(call.receiverid).delete();

return true;
} catch (e) {
print(e);
return false;
}
}
}

Call Utils:用于调用电话

class CallUtils {
static final CallMethods callmethods = CallMethods();

static dial(
BuildContext context, {
@required User from,
@required var to,
}) async {
Call call = Call(
senderid: from.id,
// senderpic: from.avatar.url,
callername: from.name,
receiverid: to.id,
// receiverpic: to.avatar.url,
receivername: to.name,
channelid: Random().nextInt(999999).toString(),
);

bool callmade = await callmethods.makeCall(call: call);
call.hasdialed = true;

if (callmade) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => VideoCallScreen(call: call),
),
);
}
}
}

之后我有一个 pickup 布局,用于包裹所有屏幕以显示来电通知。

接听电话布局:

(user.value.id != null)
? StreamBuilder<DocumentSnapshot>(
stream: callmethods.callstream(id: user.value.id),
builder: (context, snapshot) {
if (snapshot.hasData && snapshot.data.data() != null) {
Call call = Call.fromMap(snapshot.data.data());
if (!call.hasdialed) {
return PickupScreen(call: call);
} else {
return widget.scaffold;
}

} else {
return widget.scaffold;
}
},
)
: widget.scaffold,

最佳答案

可以通过 firebase 推送通知和后端 API 服务来完成。

发件人:

一旦调用电话,您将发布带有调用者和接收者 ID 的后端 api 服务,并且您的后端服务进一步负责向接收者发送带有有效载荷的推送通知。

接收端:

当接收方收到推送通知时,您可以将其配置为自动打开您的应用程序并显示包含所有负载信息的屏幕。也许你可以向他展示一个带有接受和拒绝按钮的屏幕,如果他接受,你可以将他连接到 Agora。

检查 this用于负载配置。

关于使用 Agora Flutter 来电视频/音频调用通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70031266/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com