我正在基于 PJSUA2 构建一个支持推送通知的 android VOIP 应用程序。
我需要将推送通知 (FCM) 令牌作为联系人 uri 参数发送到服务器(在我的情况下为星号),以便我可以使用来自服务器的脚本检索它并在发送来电请求之前发送通知以唤醒客户端.
我将参数放在联系人uri参数中
acfg.getSipConfig().setContactUriParams(buildParams(contactParameters));
contactParams
是一个HashMap<String, String>
带参数名称和值的方法,whilebuildParams
是下面的方法:
private String buildParams(Map<String, String> params) {
StringBuilder builder = new StringBuilder();
for (String k : params.keySet()) {
builder.append(';');
builder.append(k);
String v = params.get(k);
if (v != null && v.trim().length() > 0) {
builder.append("=\"");
builder.append(v);
builder.append('\"');
}
}
return builder.toString();
}
没有 FCM 参数一切正常,但是
- 使用以下参数构建联系人 uri
;pn-provider="fcm";pn-tok="LONG FCM TOKEN"
会使呼叫在 32 秒后挂断(请参阅问题PJSUA2 Android - Incoming calls drop after 32 seconds) - 拆除
;pn-provider="fcm"
工程 - 只发送一部分令牌工作(在 pn-tok 中,连同 pn-provider 参数)
我认为这可能是“无效字符问题”,但实际上似乎是“最大长度问题”。
Contact 标头是否有 Contact 标头最大长度或 URI 最大长度?如果是,是 PJSIP 限制还是 SIP 限制?