Re: [sipcore] Push notifications with iOS 13 (RFC 8599)
Yehoshua Gev <yoshigev@gmail.com> Sun, 18 October 2020 09:36 UTC
Return-Path: <yoshigev@gmail.com>
X-Original-To: sipcore@ietfa.amsl.com
Delivered-To: sipcore@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id CEA413A0911 for <sipcore@ietfa.amsl.com>; Sun, 18 Oct 2020 02:36:57 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -0.197
X-Spam-Level:
X-Spam-Status: No, score=-0.197 tagged_above=-999 required=5 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 6wz_RHiES3A7 for <sipcore@ietfa.amsl.com>; Sun, 18 Oct 2020 02:36:55 -0700 (PDT)
Received: from mail-vs1-xe2a.google.com (mail-vs1-xe2a.google.com [IPv6:2607:f8b0:4864:20::e2a]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 344623A0906 for <sipcore@ietf.org>; Sun, 18 Oct 2020 02:36:55 -0700 (PDT)
Received: by mail-vs1-xe2a.google.com with SMTP id d19so4000393vso.10 for <sipcore@ietf.org>; Sun, 18 Oct 2020 02:36:55 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=aMf/tNI6zIoBEy9T2LoX0yjAAaTnxBV0dyGIpRK89kk=; b=uIKllk7JE7Niku2LdpncpeAd8F1eL6DQHGmMH4qMekFHcD9JPz+xY5WybFwqquKueT CoAhDoAbDrzt2Nftm+98JckFQ8kZb0Thi0u1kLzWKv2+MDs8WnEq7ueato05l2GPyQpM CcNVNEjvY/zJyEVfAANOQctABMFp4/QfVBbu0771Hb0GmeYUs6dc4ql/6oNRBNWOpm+Z 5qCAlc6iLzzZxwnNB/UY3dD/ZYcjL1RAQyk0nkldtoHR9tX+mFw+sv93pvuN0qVrhgC4 hGIthDH5mPn6KGgUOtVju8UpyJ4esY5UvgpcqrxQ7mCdBGdvGbSYxusDMvj4ERxHlEfU gEIg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=aMf/tNI6zIoBEy9T2LoX0yjAAaTnxBV0dyGIpRK89kk=; b=BQz+YX+Bb4F/yfow4oNS7y9d76hQCd80fkuQErR1QhB+J9TwN1dSdmW7mmBjXf44R6 N7e1x3BwENqnCVonrkuRklf2xH7i3LKcglBIJFACtkvcTI+mgDjp1cYM5TW+bnI2PRYo TqYIidUw2CZIif63Hk8NVz8tbhterhoyOqpVhVt0+kBZ3cqz3m/ImxN4RjBVJovVvWwK jd31ADczbI5oHUHBXLqMAaJAPMnHO+nCzKZh0wvT9pgLn9VJMkIMWn8PoQUvstNF8HSe LQfz6yHhSh4FhOJ7rDi5HXbgchiOqWYGY8M9Abq95Tw4UqZRJz4/4I36GL9iUZJaZl8n aDvw==
X-Gm-Message-State: AOAM533vahoKAHgfZE2iZHcYNVPOFQaXEBb53c4FNt8eU5HfXbrvOGKF NUGh19DmKq7Kp0GdrCzPOew0dmx2GFh4sqs6JRk=
X-Google-Smtp-Source: ABdhPJxm0deBqJGV5RHqf/w4/od/p42fjk02p+/c7syBijfXYV+eF5vwU+KdxSp6lIyisHeIeTiScPBzLhLogIE4/uw=
X-Received: by 2002:a67:f981:: with SMTP id b1mr5970907vsq.5.1603013814001; Sun, 18 Oct 2020 02:36:54 -0700 (PDT)
MIME-Version: 1.0
References: <CAF_j7yb_UeGsODVz1tYw021XCf7AxZOySLghcgAxa0sHr-ysbw@mail.gmail.com> <CAH_g9RxcXZV8KjaN6boLckKJywrZx_XCPaqEUdFowtHQn8kvkA@mail.gmail.com> <CAF_j7yYZOnqMp=3mf3bgHOb7pLdqe3-JFXdUJf59SK37u_q8nA@mail.gmail.com> <CAH_g9RzWD7aiR3Su-e05M5JmtFbQAFvS-xx5-1Ed8UqH83ujJg@mail.gmail.com>
In-Reply-To: <CAH_g9RzWD7aiR3Su-e05M5JmtFbQAFvS-xx5-1Ed8UqH83ujJg@mail.gmail.com>
From: Yehoshua Gev <yoshigev@gmail.com>
Date: Sun, 18 Oct 2020 12:38:17 +0300
Message-ID: <CAF_j7yZkHOWPjYTSaYk4LGqCLSUR+ghGm+MutzrJaM5DxRtRLQ@mail.gmail.com>
To: Simon MORLAT <simon.morlat@gmail.com>
Cc: sipcore <sipcore@ietf.org>
Content-Type: multipart/alternative; boundary="000000000000f4254d05b1eebc66"
Archived-At: <https://mailarchive.ietf.org/arch/msg/sipcore/40ehxtpR_hQlRea1LZmi0_62D68>
Subject: Re: [sipcore] Push notifications with iOS 13 (RFC 8599)
X-BeenThere: sipcore@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: SIP Core Working Group <sipcore.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/sipcore>, <mailto:sipcore-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/sipcore/>
List-Post: <mailto:sipcore@ietf.org>
List-Help: <mailto:sipcore-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/sipcore>, <mailto:sipcore-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sun, 18 Oct 2020 09:36:58 -0000
Thanks. So what should be the inputs to the logic that decides which push type to use? Would method + media types (of the SDP m= line) suffice? Or maybe just pre-defined types (voice, voice+video?, message and register) with pre-defined proxy logic for choosing between them? Do you think we could come up with a format that will be general and not Apple-specific? Is there interest in the group for this? Yehoshua On Sat, Oct 17, 2020 at 11:44 AM Simon MORLAT <simon.morlat@gmail.com> wrote: > Hi Yehoshua, > > Let me answer your questions. > > * The pn-param is used by the proxy to know the application ID, which is > necessary to know which credentials or TLS client certificate to connect to > the Apple push server. The voip&remote advertise that the app understands > both voip and remote push notifications, and as such two > certificates/credentials should be available to the server for this. > > 1. Yes. I saw your other suggestion, which is indeed more readable, but > breaks compatibility with RFC8599 . > > 2. The proxy has forcibly some platform specific logic to handle push > notifications. It cannot be unaware that for Apple platform, the "voip" > type must only be used for calls. Note that it is not a question of SIP > method, because SIP INVITE can be used to establish chat sessions with MSRP > protocol for example, and in this case a "voip" type notification must not > be used. > > 3. It could indeed, however it discloses information to push notification > servers. In linphone, we do not pass it for this reason. Instead, the > CallKit view is subsequently updated to display the caller-id once the > INVITE has arrived (which usually takes no more than a few seconds). > > The background updates push notifications ( > https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/pushing_background_updates_to_your_app?language=objc) > are reliable. They are indeed rate limited (3 per hour) which makes them > unsuitable to advertise calls or incoming messages. But in order to trigger > a REGISTER request it's good enough, and they do not require to show > something to the user: the work silently. > To make the system reliable, I imagine the registrar could send a > background push notification at 80 % of expire time, and then once a day > during a guard period of XX days in order to give additional chances for > apps that temporarily have no longer access to the network to finally > refresh their registration. > > Best regards, > > Simon > > > Le lun. 12 oct. 2020 à 16:40, Yehoshua Gev <yoshigev@gmail.com> a écrit : > >> Hi Simon, >> >> Thanks for your detailed explanation of the behavior you have implemented. >> >> One Q: How is the "pn-param=DEF123GHIJ.org.linphone.phone.voip&remote" >> used? >> Does the server really make use of the "&remote" suffix or it can be used >> like "DEF123GHIJ.org.linphone.phone.*" with the "*" being always replaced >> with the service? >> >> In any case, I'm willing to help with work on a new RFC, but sadly I >> don't have much time for it. >> >> Regarding the scope of the updated RFC, I think there are several issues >> that should be addressed: >> >> 1. How the UA passes several "pn-*"-sets for a single registration. The >> solution you've done on Linphone seems like a good approach if backward >> compatibility with RFC 8599 is required. >> >> 2. How would the proxy decide which pn-*-values-set to use for a specific >> push notification? For example, a naive approach is to pre-define a mapping >> between "pr-*"-set and SIP methods (i.e., INVITE will use a "voip" params). >> >> 3. (maybe unrelated) For good user experience, the caller-id should be >> passed along with the voip push notification so the UI of incoming calls >> can display it immediately. >> >> BTW, regarding triggering of registration refreshes, our iOS developers >> say that in order for a push notification to work reliably (i.e., assured >> to be processed by the application even if it is terminated), it must have >> some UI notification. This means that the user will be informed of each >> registration refresh. If this is true, then the expiry time must be kept >> very long (weeks/months) in any case. Is this also your understanding? >> >> >> Yehoshua >> >> >> On Sun, Oct 11, 2020 at 11:43 PM Simon MORLAT <simon.morlat@gmail.com> >> wrote: >> >>> Hi Yehoshua, >>> >>> Thank you for starting this discussion. >>> My company is developing the Linphone software (https://linphone.org), >>> an cross platform open-source SIP softphone and SDK. >>> The last version we published was for adding compatibility for iOS 13. I >>> admit it was a nightmare to comply with the new restrictions. >>> For push notifications, we based our work on RFC 8599 , but indeed we >>> had to somewhat extend the RFC in order to transmit 2 different push >>> notification tokens: >>> - the one for calls (PushKit kind of notifications) >>> - the one for IMs (using Remote push notification service). >>> >>> To answer your question: the "remote push notification" token could >>> apparently also be used for "Background push notifications" ( >>> https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/pushing_background_updates_to_your_app?language=objc >>> ), which are the push notifications we need to refresh a REGISTER that is >>> about to expire (or expired). So yes you need two different push services >>> and tokens. >>> >>> As of today, the Linphone app doesn't use push notifications for >>> triggering REGISTER refreshes: we use a very long expire time (one year) >>> instead. However we would prefer to switch to push-triggered REGISTER >>> refresh as soon as possible. >>> >>> The syntax extension we made to RFC8599 is described in our wiki: >>> >>> >>> https://wiki.linphone.org/xwiki/wiki/public/view/Lib/Getting%20started/iOS/#HUpdateContactURIparameters >>> >>> We designed this syntax to be compatible with RFC8599 syntax. To >>> summarize, here is a quick example to understand how we convey push tokens >>> for an app that needs to advertise calls and IMs: >>> >>> pn-prid=00fc13adff78512:voip&c11292f7b74733d:remote; >>> pn-param=DEF123GHIJ.org.linphone.phone.voip&remote;pn-provider=apns >>> >>> Notice the ":voip" and ":remote" token suffixes, and the "&". >>> We decided not to go with a multiple contact headers approach, each >>> contact uri bearing a pn-prid for either voip or remote service: the >>> forking by a proxy that is unaware of push notifications could result in >>> INVITEs to be duplicated. >>> >>> We had to go fast otherwise our app would stop working, but from the >>> beginning we have in mind that this issue should be raised and hopefully >>> resolved here at IETF, with or without our proposed syntax extension. >>> >>> Today due to Apple's recent changes, it looks like RFC8599 cannot be >>> used "as is" to make a SIP app for iOS. The risk that Google does the same >>> in near future exists. >>> Are there people interested here in collaborating to an RFC8599 update >>> to address this iOS platform evolution ? In other words, we need to solve >>> how to convey multiple pn-prid and pn-param for a same user-agent instance. >>> >>> Best regards, >>> >>> Simon >>> >>> >>> >>> >>> >>> >>> >>> Le dim. 11 oct. 2020 à 17:07, Yehoshua Gev <yoshigev@gmail.com> a >>> écrit : >>> >>>> Hi All, >>>> >>>> I hope it is ok to post this here and not on sip-implementors... >>>> >>>> We are trying to implement RFC 8599 for performing push notifications >>>> for Apple devices. >>>> >>>> Starting with iOS 13, there is a restriction on VoIP pushes [1]: "Apps >>>> receiving VoIP push notifications *must report the call quickly to >>>> CallKit, so it can alert the user* to the presence of the incoming >>>> call." >>>> >>>> According to RFC 8599, pushes are used for (at least) two >>>> different goals: >>>> 1) Initiating registration refreshes (section 5.5) >>>> 2) Notifying of incoming calls (section 5.6.2) >>>> >>>> Now, for a reasonable user experience, the registration refresh pushes >>>> must not trigger the UI of incoming call. >>>> However, when an INVITE is received, the UA must be awoken immediately, >>>> which is the purpose of VoIP push. >>>> >>>> Does it make sense to make a different push type for registration >>>> refresh and for incoming calls? >>>> >>>> I'm not sure this is possible with the current RFC (and it is also >>>> against the spirit of the RFC), but I can't think of another way around it >>>> (besides using regular pushes instead of VoIP pushes, which might introduce >>>> delays, or having a registration with infinite expiration that will not >>>> require refreshes, which might leave many zomby registrations). >>>> >>>> See some discussion here: [2], [3]. >>>> >>>> Thanks, >>>> Yehoshua >>>> >>>> [1] >>>> https://developer.apple.com/documentation/pushkit/pkpushtype/1614481-voip >>>> [2] https://developer.apple.com/forums/thread/117939 >>>> [3] https://www.linphone.org/news/ios-13-important-changes-voipim-apps >>>> >>>> _______________________________________________ >>>> sipcore mailing list >>>> sipcore@ietf.org >>>> https://www.ietf.org/mailman/listinfo/sipcore >>>> >>>
- [sipcore] Push notifications with iOS 13 (RFC 859… Yehoshua Gev
- Re: [sipcore] Push notifications with iOS 13 (RFC… Simon MORLAT
- Re: [sipcore] Push notifications with iOS 13 (RFC… Yehoshua Gev
- Re: [sipcore] Push notifications with iOS 13 (RFC… Christer Holmberg
- Re: [sipcore] Push notifications with iOS 13 (RFC… Yehoshua Gev
- Re: [sipcore] Push notifications with iOS 13 (RFC… Simon MORLAT
- Re: [sipcore] Push notifications with iOS 13 (RFC… Simon MORLAT
- Re: [sipcore] Push notifications with iOS 13 (RFC… Yehoshua Gev
- Re: [sipcore] Push notifications with iOS 13 (RFC… Christer Holmberg