我已经安装了asterisk server
并编译了最新的linphone
iOS源代码。
现在一切都很好,没有背景和锁定电话屏幕,呼叫。
当应用关闭或iPhone屏幕锁定时,我无法接收来自其他linphone
的电话(从Play商店下载)。
我已使用linphone
将SIP
注册到星号服务器。
我还创建了development/distribute certificates, APNS, VOIP
推送苹果帐户。
但我仍然无法接听iOS应用, 所以我的问题是:
flexisip, Opensips, kamailio
等,或者我可以使用Asterisk
和Linphone
或任何其他方式在应用关闭时收到通知或锁屏?还必须使用任何第三方服务器向wakeup the app, like pusher, onesignal
推送通知吗?
由于
答案 0 :(得分:1)
您可以使用flexisip。它是半工作的,没有文档
您可以使用星号或kamailio,但您应该通过外部脚本和拨号方案来推动自己。
答案 1 :(得分:0)
我也在思考线性电话和flexisip,但这对我不起作用。 我以为我可以放弃flexisip并直接从星号上推送,然后拨打分机号。 我有一个agi脚本,可从联系人获取pn-tok,然后进行推送:
$serverKey = " long string coming from firebase ";
$notif = ['title' => 'You have a call', 'body' => "Call from $CLI"];
$headers = [CURLOPT_HTTPHEADER => ["Authorization: key=$serverKey", 'Content-Type: application/json']];
$pjsipContact = ast_get_var("PJSIP_AOR(1000,contact)");
if(!empty($pjsipContact)) {
$pjsipUri = ast_get_var("PJSIP_CONTACT($pjsipContact,uri)");
preg_match('/pn-tok=([^;]+)/', $pjsipUri, $toArr);
if (count($toArr) == 2) {
log_cli("send noti to {$toArr[1]}");
curlGetPage('https://fcm.googleapis.com/fcm/send', json_encode(['to' => $toArr[1], 'notification' => $notif]), $headers, 443, 'POST', TRUE);
}
}
使用此agi,电话会收到推送并在通知中显示它,但是linphone无法恢复。 推送通知是否有一种特定的格式来实际上唤醒Linphone并使其重新注册?
谢谢。
答案 2 :(得分:0)
您当然可以在仅使用星号进行呼叫之前将其推送到自己编译的Linphone应用程序以将其唤醒。要点是使用DB Dialplan函数从客户联系信息中获取推送令牌,并将其传递给AGI脚本,然后该脚本将使用该令牌来发起推送并唤醒设备。您需要添加一个等待延迟,以允许电话首先重新注册,然后您可以对分机执行Dial()。在Android中,您需要使用“数据”消息类型而不是“通知”类型,否则手机将不会唤醒,仅显示通知。请参阅此帖子以获取有关如何完成此操作的详细信息。请注意,本文讨论了Android,但可以通过修改push.php脚本轻松地适应IOS。
https://community.asterisk.org/t/interest-in-implementing-sip-push-notification/75563/19
答案 3 :(得分:0)
对于voip呼叫,移动客户端必须接收推送通知,然后向SIP服务器注册自己才能接收Call-invite。因此,任何软交换或PBX都可以使用此机制来发起推送通知,并等待离线客户端联机并发送邀请请求。因此,PBX在客户端联机后在这里等待和转发邀请起着重要作用。
您可以使用此github repository中的推送脚本。