Azure通信Calling SDK(安卓/iOS)来电推送通知问题求助
React Native集成Azure Communication Calling SDK来电推送问题
问题背景
我在React Native应用中集成Azure Communication Calling SDK实现语音通话功能:
- 应用处于前台且提前初始化
IncomingCallListener时,来电功能正常; - 若先发起通话,再在接收端设备初始化
IncomingCallListener,则无法收到来电。
按照要求在.NET服务器上配置了来电推送通知(iOS使用VoIP推送),发起来电时能收到Azure Event Grid的事件Webhook,但Azure Calling SDK对通知payload有特定格式要求,该格式未公开,导致无法正确处理来电推送。
另外,尝试通过Azure Notification Hub接收Azure直接推送的来电payload时,通知始终失败,错误为FCMv1 Authorization Errors。
处理来电payload的代码
public void setUpIncomingCall(Map<String, String> map, String acsToken, String displayName, Context context) { try{ if (callAgent == null) { CallAgentOptions callAgentOptions = new CallAgentOptions(); callAgentOptions.setDisplayName(displayName); callClient.createCallAgent(context, new CommunicationTokenCredential(acsToken), callAgentOptions).thenAccept(callAgent1 -> { callAgent = callAgent1; Log.e("incomingCall","created call agent"); incomingCallListener = new IncomingCallListener() { @Override public void onIncomingCall(IncomingCall incomingCall) { Log.e("setUpIncomingCall", "Incoming call received"); currentIncomingCall = incomingCall; } }; callAgent.addOnIncomingCallListener(incomingCallListener); PushNotificationInfo pushNotificationInfo = PushNotificationInfo.fromMap(map); if (pushNotificationInfo != null) { callAgent.handlePushNotification(pushNotificationInfo).thenAccept(aVoid -> { Log.e("handleCallPush", "Push payload mapping success"); }).exceptionally(throwable -> { throwable.printStackTrace(); Log.e("handleCallPush", "Failed to handleCallPush", throwable); return null; }); } else { Log.e("incomingCall","incomingCall error pushNotificationInfo null"); } }).exceptionally(throwable -> { Log.e("incomingCall", "setUpIncomingCall error", throwable); return null; }); } else { Log.e("incomingCall","existing call agent"); incomingCallListener = new IncomingCallListener() { @Override public void onIncomingCall(IncomingCall incomingCall) { Log.e("setUpIncomingCall", "Incoming call received"); currentIncomingCall = incomingCall; } }; callAgent.addOnIncomingCallListener(incomingCallListener); PushNotificationInfo pushNotificationInfo = PushNotificationInfo.fromMap(map); if (pushNotificationInfo != null) { callAgent.handlePushNotification(pushNotificationInfo).thenAccept(aVoid -> { Log.e("handleCallPush", "Push payload mapping success"); }).exceptionally(throwable -> { throwable.printStackTrace(); Log.e("handleCallPush", "Failed to handleCallPush", throwable); return null; }); } else { Log.e("incomingCall","incomingCall error pushNotificationInfo null"); } } } catch (Exception exception) { exception.printStackTrace(); Log.e("setUpIncomingCall", "setUpIncomingCall error", exception); } }
求助需求
- 告知Azure Calling SDK要求的来电推送payload格式;
- 解决Azure Notification Hub出现的
FCMv1 Authorization Errors问题。
内容的提问来源于stack exchange,提问作者Fahim Jubayer
相关产品推荐
相关产品推荐

