Push notifikace a Linphone

Programy, které slouží k volání přes internet z počítače nebo chytrých mobilů.
Uživatelský avatar
xsouku04
Administrátor
Příspěvky: 8160
Registrován: pát 15. říj 2010 11:11:44
Bydliště: Brno
Kontaktovat uživatele:

Push notifikace a Linphone

Příspěvek od xsouku04 »

Dnes jsem trochu pokročil s pochopením toho, jak fungují push notifikace u Linphone.

Push notifikace mohou pomoci, pokud jsou nespolehlivé příchozí hovory, protože aplikace spí a na příchozí hovor nereaguje. Push notifikace také mohou pomoci šetřit baterii telefonu a data, protože není třeba udržovat spojení s VoIP operátorem. Push notifikace by měla aplikaci spolehlivě probudit, i když na některých telefonech tam může být nesmyslné zpoždění při doručování push notifikací. Zpoždění způsobují úpravy androidu výrobcem telefonu a přehnaná snaha šetřit baterii za každou cenu. Proč si to google lépe nepohlídá, nechápu. U jiných telefonů fungují push notifikace rychle a na 100% spolehlivě.

V nastavení SIP účtu je volba: Povolit push notifikace . Lze to zapnout nebo vypnout.

Tahle volba způsobí, že se při registraci začnou do Contact SIP hlavičky vkládat údaje pro SIP push.

Tedy pokud je volba zapnutá Hlavička Contact obsahuje:

Contact: <sip:763427@81.200.57.61:55863;pn-prid=c75amzVlRK-y0-vqu7WfOT:APA91bFV3sSOutrLZOGnN0uF8OXNpGDX3tb2UtSJYeayKdjExpJi8a2dagZJiPApId1UEoLz9Z-kNewnipGIhwwK_VB3_fXBo_Gwegl-5cu_GaOCAwJm4WWS0NEdS1Szu_LNf_T5OEyN;pn-provider=fcm;pn-param=929724111839;pn-silent=1;pn-timeout=0;transport=udp>;+sip.instance="<urn:uuid:e17bb843-1da4-0078-8ebd-a336339f586b>";+org.linphone.specs="lime"

Pokud je vypnutá obsahuje jen:

Contact: <sip:763427@192.168.0.117:38205;transport=udp>;+sip.instance="<urn:uuid:e17bb843-1da4-0078-8ebd-a336339f586b>";+org.linphone.specs="lime"

Parametry pn-prid,pn-provider,fcm a pn-param jsou právě ty, pomocí kterých se dá dělat push. Ale linphone to za nikoho neudělá. Nejenže to musí podporovat SIP server, ale aby bylo push kam poslat, je prý nutné udělat si vlastní build linphone. Tedy není možné použít Linphone z google play tak, jak je tam vystaven nyní, protože není kam tyto parametry posílat. (Ledaže by bylo někde zveřejněné URL, kam tyto parametry poslat)

Aby bylo možné udělat pohodlné nastavování pomocí QR kódu (provisioning), je také potřeba být vývojář nebo mít rootnutý android telefon, protože jinak se k vygenerovanému konfiguračnímu souboru nedá dostat. Android totiž chrání data každé aplikace jako by to byla bankovní, takže je nedovolí číst ani majiteli telefonu. Nutné prý je provést si vlastní Google Play services configuration .

Tedy když to shrnu, aby v Linphone fungovaly push notifikace, je třeba mít speciálně upravený SIP server (nebo použít SIP server přímo od linphone, který se jmenuje flexiSIP - ale to raději, ne protože je to černá skříňka napsaná v c) a také si sám přeložit a distribuovat vlastní kopii Linphone, aby bylo možné push notifikace doručovat. Proč to takto Linphone komplikuje bez toho aby k tomu poskytl nějakou srozumitelnou dokumentaci nerozumím.

Udělat potřebné změny na SIP proxy je pro nás jednoduché, ale provést vlastní build Linphone znamená učit se něco nového. Pokud byste byl někdo ochoten nám s tím pomoci, klidně i za úplatu, ozvěte se. Proč tohle nedělá sám Linphone, nechápu.

Musíme tak vlastně vytvořit klon Linphone, který se asi bude muset jmenovat jinak, ale budou mu fungovat push notifikace. Nejspíš bychom pak mohli službu nabízet i pro jiné VoIP operátory na celém světě.


Tyto informace mám převážně od vývojáře ACR phone, tedy měly by být relativně spolehlivé a přesné. ACR phone má vlastní push server, který jsme jim pomáhali zprovoznit. Je jen třeba tuhle možnost zapnout v nastavení linky. Možné je také použit PUSH server provozovaný přímo Odorik.cz dle návodu - http://www.odorik.cz/w/acr_phone:acr_phone . ACR Phone ale nemusí každému vyhovovat protože úplně nahrazuje volací aplikaci androidu, tedy je to poměrně velký zásah do fungování telefonu. To má ale výhody v podobě dokonalé integrace SIPu do androidu (např. společná historie hovorů a podobně).
jadu
Příspěvky: 153
Registrován: pon 09. úno 2015 13:35:30

Re: Push notifikace a Linphone

Příspěvek od jadu »

Pokud byste chtěl, dopisoval jsem si teď nedávno se Sylvainem Berfinim, což je jejich šéf vývoje aplikace, řešili jsme neočekávané chování programu při určitém nastavení aplikace ve spojitosti s Androidem 14, a byl velmi vstřícný a ochotný. Třeba by mohl být v něčem nápomocen či ochoten navázat spolupráci nebo alespoň poskytnout nějaký vhodný hint. Že je nutné upravit SIP server, to je jasné. Nejsem si ale jist, zda je nutné distribuovat i vlastní verzi Linphone pro uživatele, ale zas tak do hloubky jsem to nezkoumal.

Po přechodu na Android 14 se spojení drží ještě lépe než na původním Androidu 9. Zásadní změny chování notifikací za těch 5 verzi ale znamenají nutnost dobře je pro Linphone nastavit, jinak se může stát, že telefon zvoní, ale display se nerozsvítí nebo na zamykací obrazovce je jen notifikace o příchozím hovoru bez možnosti hovor přijmout či odmítnout.
Uživatelský avatar
xsouku04
Administrátor
Příspěvky: 8160
Registrován: pát 15. říj 2010 11:11:44
Bydliště: Brno
Kontaktovat uživatele:

Re: Push notifikace a Linphone

Příspěvek od xsouku04 »

jadu píše: sob 09. pro 2023 9:12:58 Pokud byste chtěl, dopisoval jsem si teď nedávno se Sylvainem Berfinim, což je jejich šéf vývoje aplikace, řešili jsme neočekávané chování programu při určitém nastavení aplikace ve spojitosti s Androidem 14, a byl velmi vstřícný a ochotný. Třeba by mohl být v něčem nápomocen či ochoten navázat spolupráci nebo alespoň poskytnout nějaký vhodný hint. Že je nutné upravit SIP server, to je jasné. Nejsem si ale jist, zda je nutné distribuovat i vlastní verzi Linphone pro uživatele, ale zas tak do hloubky jsem to nezkoumal.

Po přechodu na Android 14 se spojení drží ještě lépe než na původním Androidu 9. Zásadní změny chování notifikací za těch 5 verzi ale znamenají nutnost dobře je pro Linphone nastavit, jinak se může stát, že telefon zvoní, ale display se nerozsvítí nebo na zamykací obrazovce je jen notifikace o příchozím hovoru bez možnosti hovor přijmout či odmítnout.
Díky. Ještě mohu zkusit pročíst si mailing list a zkusit se zeptat tam. Asi bych to měl ze slušnosti udělat, abych hned neotravoval hlavního vývojáře. Kdyby byl zájem, klidně bych poskytnul tu naši SIP outbound push proxy jako opensource. Je podle mého názoru mnohem jednodušší a lépe udržovatelné běžnými smrtelníky než ten jejich speciální SIP proxy napsaný v C. Je to skript pro Kamailio. Celé to má jen cca 1000 řádků včetně podrobné dokumentace, je to dobře škálovatelné a funguje v podstatě se všemi SIP VoIP operátory a kdyby ne, není problém si to malinko upravit a obejít tak případné chyby či zvláštnosti konkrétních VoIP operátorů.
To že android 14 funguje dobře i bez push notifikací, je zvláštní, protože podle vývojáře ACR Phone google omezuje běh na pozadí čím dál více. Prý ani nedovolí (až na výjimky) aplikacím nastavit alarm, aby se mohly probudit v určitý čas a provést obnovení registrace. Pokud by aplikace používala alarm, a nedostala výjimku (nebo to není rovnou aplikace jejíž hlavní funkce je budík), tak ji vykopnou prý z google play. Trend je zhoršující se. A tedy push notifikace jsou důležitější a důležitější. A nezbývá, než i pro přeregistraci budit telefon push notifikací (tak to dělá ACR phone - push pro přeregistraci po vypršení registrace posílá naše proxy). Bohužel ani tak push notifikace nefunguje na všech telefonech spolehlivě. Např. na mém Xioami redmi note 10s mi chodí s náhodným zpožděním i notifikace od RB banky. Samozřejmě záleží na nastavení konkrétního telefonu a úpravách androidu u konkrétního výrobce telefonu. Výrobce může provést změny k horšímu (většinou), ale někdy možná i k lepšímu, že může jít nastavit, aby android aplikaci neuspával.

Na Iphone je push notifikace jediná možnost již delší dobu. Bez podpory push, nelze mít spolehlivé příchozí VoIP hovory. Push tam ale funguje spolehlivě.
jadu
Příspěvky: 153
Registrován: pon 09. úno 2015 13:35:30

Re: Push notifikace a Linphone

Příspěvek od jadu »

Já jsem se k němu dostal náhodou. Napsal jsem na linphone-android(zavináč)belledonne-communications.com a protože to byl asi zapeklitý oříšek, rovnou mi odpověděl on a pak jsme to pár dní řešili. Vzhledem k tomu, že to bylo minulý týden dokončené, tak si to bude určitě pamatovat, klidně se na mne odkažte.

Ano, je to obecně s každou novou verzí Androida složitější, notifikace nerozsvítí telefon, aplikace je násilně usnutá. Ale když se jí přidělí výjimka na baterii a data, povolí full screen intents, tak se to chová poměrně dobře. Nemám ale srovnání, mám jeden telefon s Androidem 14 a je to Xperia, ta je relativně málo modifikovaná.

Jsem velmi rád, že se tím zabýváte; zkoušel jsem řadu VOIP aplikací, ale protože nechci integrovaný dialer, je výběr dost omezený a Linphone mi zatím vychází naprosto nejlépe. Kvalita hovoru i na kodecích s nízkým bitrate je působivá. Takže pokud k tomu přibude i push, bude to skvělé.
Uživatelský avatar
xsouku04
Administrátor
Příspěvky: 8160
Registrován: pát 15. říj 2010 11:11:44
Bydliště: Brno
Kontaktovat uživatele:

Re: Push notifikace a Linphone

Příspěvek od xsouku04 »

Tak přestože je mailing list celkem mrtvý, tak jsem našel příspěvek, který potvrzuje to, že pokud chci fungující push, musím mít vlastní build linphonu.

https://mail.gnu.org/archive/html/linph ... 00012.html

Vývojáři Linphone to neusnadňují nejspíše proto, že se jim nechce tomu dělat podpora zdarma. Případně možná také pak snadněji seženou zákazníky ochotné platit za vlastní SIP klient (odvozený od Linphone) včetně SIP serveru s podporou push. Tedy asi fakt nezbývá než případně udělat vlastní opensource clon Linphone a z něj vlastní build. Ale protože jsem to nikdy nedělal, asi bych tím strávil hodně času.

Zoiper, zdá se, podporuje push server jen jako placenou službu, protože nevědí, že SIP hesla není nutné skladovat (stačí jen přeposílat registrace) a vše se dá postavit škálovatelně. https://community.zoiper.com/1896/confi ... ion-coming
alfi
Příspěvky: 721
Registrován: čtv 03. led 2013 15:31:10

Re: Push notifikace a Linphone

Příspěvek od alfi »

xsouku04 píše: pát 08. pro 2023 20:51:50 Tedy pokud je volba zapnutá Hlavička Contact obsahuje:

Contact: <sip:763427@81.200.57.61:55863;pn-prid=c75amzVlRK-y0-vqu7WfOT:APA91bFV3sSOutrLZOGnN0uF8OXNpGDX3tb2UtSJYeayKdjExpJi8a2dagZJiPApId1UEoLz9Z-kNewnipGIhwwK_VB3_fXBo_Gwegl-5cu_GaOCAwJm4WWS0NEdS1Szu_LNf_T5OEyN;pn-provider=fcm;pn-param=929724111839;pn-silent=1;pn-timeout=0;transport=udp>;+sip.instance="<urn:uuid:e17bb843-1da4-0078-8ebd-a336339f586b>";+org.linphone.specs="lime"

Pokud je vypnutá obsahuje jen:
Contact: <sip:763427@192.168.0.117:38205;transport=udp>;+sip.instance="<urn:uuid:e17bb843-1da4-0078-8ebd-a336339f586b>";+org.linphone.specs="lime"

Parametry pn-prid,pn-provider,fcm a pn-param jsou právě ty, pomocí kterých se dá dělat push. Ale linphone to za nikoho neudělá. Nejen že to musí podporovat SIP server, ale aby bylo push kam poslat, je prý nutné udělat si vlastní build linphone. Tedy není možné použít Linphone z google play tak jak je tam vystaven nyní, protože není kam tyto parametry posílat. (Leda že by bylo někde zveřejněné URL kam tyto parametry poslat)
FCM už jsem dlouho nezkoušel, ale jestli to dobře chápu, dlouhé id je id zařízení, které si aplikace přihlásila ve FCM a jde na něj posílat notifikace. Ale jen z klienta, který je spárovaný se stejným uživatelským účtem, tj. nemůže na něj posílat úplně kdokoliv. Jedna možnost je, že vám dají klíč ke stejnému účtu (tohle nejspíš máte na proxy od ACR?), druhá možnost je udělat vlastní build aplikace, ke které si push klíč uděláte sami :) Pořád to musí být spárováno, tj. aplikace i server či proxy je u stejného vývojáře - a nepůjde to vyrobit univerzálně pro libovolný SIP server.
Aneb adresa, kam pushe posílat, je známá, chybí vám spíš odpovidající klíče? Viz třeba https://firebase.google.com/docs/cloud- ... redentials (zajímavé, jestli Registration token, který se má udržovat bezpečně, posílají přes nešifrovaný SIP..)
Uživatelský avatar
xsouku04
Administrátor
Příspěvky: 8160
Registrován: pát 15. říj 2010 11:11:44
Bydliště: Brno
Kontaktovat uživatele:

Re: Push notifikace a Linphone

Příspěvek od xsouku04 »

alfi píše: sob 09. pro 2023 22:19:12 FCM už jsem dlouho nezkoušel, ale jestli to dobře chápu, dlouhé id je id zařízení, které si aplikace přihlásila ve FCM a jde na něj posílat notifikace. Ale jen z klienta, který je spárovaný se stejným uživatelským účtem, tj. nemůže na něj posílat úplně kdokoliv. Jedna možnost je, že vám dají klíč ke stejnému účtu (tohle nejspíš máte na proxy od ACR?), druhá možnost je udělat vlastní build aplikace, ke které si push klíč uděláte sami :) Pořád to musí být spárováno, tj. aplikace i server či proxy je u stejného vývojáře - a nepůjde to vyrobit univerzálně pro libovolný SIP server.
Aneb adresa, kam pushe posílat, je známá, chybí vám spíš odpovidající klíče? Viz třeba https://firebase.google.com/docs/cloud- ... redentials (zajímavé, jestli Registration token, který se má udržovat bezpečně, posílají přes nešifrovaný SIP..)
Myslím že takhle nějak to bude, proč to tak komplikují tomu nerozumím. ACR Phone mi dal normální GET URL na jeho server, které volám, když chci telefon probudit kvůli příchozímu hovoru, nebo přeregistraci. Stejné URL volá i ze své SIP outbound proxy. Já mám přístup jen k našemu proxy, kde případný problém opravím a pak mu jen pošlu, který řádek má změnit. Tedy soukromí jeho klientů (kam kdo volal) je maximálně zachováno a nikdo nepracuje na té proxy ani s nešifrovanými hesly - ty se jen zašifrované přeposílají. A přitom je to standardní outbound proxy takže jeho SIP klient kromě reakcí na push a přidávání těch push hlaviček do kontaktu nepotřeboval vůbec žádné změny. (Tohle Linphone už umí) Proč to ostatní tak nedělají nechápu. Nevidím v tom nějaký bezpečností problém zveřejnit url i kdyby to mělo být třeba jen pro registrované uživatele. Asi se na to zkusím zeptat nejdřív na mailing listu Linphone a poté na obecné podpoře.

Dnes si spousta lidí vystačí s tím, že zakážou aby androidu aplikaci Linphone uspával a pak jim to funguje dobře. Pravděpodobně to ale nebude v budoucnu možné stejně jako u IPhone, nebo možná jen pokud aplikaci nebudete stahovat z google play.
alfi
Příspěvky: 721
Registrován: čtv 03. led 2013 15:31:10

Re: Push notifikace a Linphone

Příspěvek od alfi »

xsouku04 píše: ned 10. pro 2023 11:23:39 Myslím že takhle nějak to bude, proč to tak komplikují tomu nerozumím. ACR Phone mi dal normální GET URL na jeho server, které volám, když chci telefon probudit kvůli příchozímu hovoru, nebo přeregistraci. Stejné URL volá i ze své SIP outbound proxy. Já mám přístup jen k našemu proxy, kde případný problém opravím a pak mu jen pošlu, který řádek má změnit. Tedy soukromí jeho klientů (kam kdo volal) je maximálně zachováno a nikdo nepracuje na té proxy ani s nešifrovanými hesly - ty se jen zašifrované přeposílají. A přitom je to standardní outbound proxy takže jeho SIP klient kromě reakcí na push a přidávání těch push hlaviček do kontaktu nepotřeboval vůbec žádné změny. (Tohle Linphone už umí) Proč to ostatní tak nedělají nechápu. Nevidím v tom nějaký bezpečností problém zveřejnit url i kdyby to mělo být třeba jen pro registrované uživatele. Asi se na to zkusím zeptat nejdřív na mailing listu Linphone a poté na obecné podpoře.
Kdoví.. buď je to nenapadlo nebo je za tím ještě něco jiného - třeba ceník? Nedaří se mi dohledat, jestli je FCM zdarma neomezeně nebo jen "až do". A pokud mají zákazníků hodně, třeba by se do limitu z jednoho účtu nevešli..?
Uživatelský avatar
xsouku04
Administrátor
Příspěvky: 8160
Registrován: pát 15. říj 2010 11:11:44
Bydliště: Brno
Kontaktovat uživatele:

Re: Push notifikace a Linphone

Příspěvek od xsouku04 »

Tak jsem se dozvěděl, že existuje RFC norma, která popisuje jak by mělo push fungovat u SIP klientů na Andoridu nebo iPhone. Zdá se ale, že velká část vývojářů SIP klientů pro mobilní telefony nevěnuje dostatečnou pozornost tomuto dokumentu, takže mají vlastní špatné řešení, kde uchovávají nešifrované hesla všech svých zákazníků u sebe na serveru (Zoiper, MizuDroid), nebo push nepodporují vůbec. Kdyby se této normě více vědělo, s jedním řešením by mohlo fungovat více různých SIP aplikací a nebyl by v tom takový chaos.

Ač jsem dnes viděl tu normu poprvé, tak přesně tak funguje náš outbound SIP proxy. Ty parametry Contact hlavičce jsme totiž přebrali od Linphone. A ten zbytek pokud má být udělán dobře jiné možnosti nenabízí.


Kód: Vybrat vše

     +--------+      +---------+        +-----------+    +-------------+
     |        |      |         |        |           |    | SIP         |
     | SIP UA |      | Push    |        | SIP Proxy |    | Registrar / |
     |        |      | Service |        |           |    | Home Proxy  |
     +--------+      +---------+        +-----------+    +-------------+
         |                 |                  |                   |
         | Subscribe       |                  |                   |
         |---------------->|                  |                   |
         |                 |                  |                   |
         | PRID            |                  |                   |
         |<----------------|                  |                   |
         |                 |                  |                   |
         | SIP REGISTER (PRID)                |                   |
         |===================================>|                   |
         |                 |                  |SIP REGISTER (PRID)|
         |                 |                  |==================>|
         |                 |                  |                   |
         |                 |                  | SIP 200 OK        |
         |                 |                  |<==================|
         | SIP 200 OK      |                  |                   |
         |<===================================|                   |
         |                 |                  |                   |
         |                 |                  | SIP INVITE (PRID) |
         |                 |                  |<==================|
         |                 |                  |                   |
         |                 |Push Request (PRID)                   |
         |                 |<-----------------|                   |
         |Push Message (PRID)                 |                   |
         |<----------------|                  |                   |
         |                 |                  |                   |
         | SIP REGISTER (PRID)                |                   |
         |===================================>|                   |
         |                 |                  |SIP REGISTER (PRID)|
         |                 |                  |==================>|
         |                 |                  |                   |
         |                 |                  | SIP 200 OK        |
         |                 |                  |<==================|
         | SIP 200 OK      |                  |                   |
         |<===================================|                   |
         |                 |                  |                   |
         | SIP INVITE      |                  |                   |
         |<===================================|                   |
         |                 |                  |                   |

         ------- Push Notification API
         ======= SIP

                    Figure 1: SIP Push Information Flow

Dle informací zde https://www.linphone.org/news/flexisip- ... ion-system Liphone podporuje tuhle normu.
Tedy jediný zádrhel by měl být opravdu v tom, že je nutné udělat vlastní registraci s google a vlastní build a push service.

A když budu hledat nějaký komerční sip client, tak mi stačí poslat odkaz na normu a zeptat se jestli to podporují. Ano/ne. Jinak začne marketingové oddělení vymýšlet nesmysly o vyvíjení na zakázku za desítky tisíc EUR.
jadu
Příspěvky: 153
Registrován: pon 09. úno 2015 13:35:30

Re: Push notifikace a Linphone

Příspěvek od jadu »

Tak mi to nedalo a zeptal jsem se. Toto je odpověď:

Hi,
Indeed push notifications sending requires two parts : a client identifier matching a server certificate.
The server certificate is fully private and owned by the service provider, that's why our app on the Store only supports push notifications for our own SIP service/server.

To my knowledge there is no service provider that gives access to the client identified for it's service, meaning we can't support push in our apps for other services as well.

If you'd like you have push notifications in Linphone, the easiest way is to rebuild the app and simply change/add your push identifier in the app matching your server certificates.

Best regards
Odpovědět