Voip integration in swift 3 - ios

Can we integrate VoIP services through the new framework CallKit without using any server services or push notification?
I am really new to this concept, also checked the speaker box app as a sample app but didn't get much idea how it would be working.
Please, share your feedback if anyone has integrated CallKit.
Thanks

The CallKit framework provides programmatic access to VoIP functionality, as well as call blocking and identification. Apps can use CallKit to receive incoming calls and make outgoing calls using the native phone UI.
Reference for call kit.
Can we integrate VoIP services through new framework call kit without using any server services or push notification?
No we can't use it. You will need third parties like Twilio, Plivo, or ICELink and create your own server. Then provide CallKit the data required, it will handle the call and UI stuff. You can read the apple docs for more ideas.

If a CallKit app only intends to make outgoing calls, then it may be possible to not have a server component. But if the app intends to receive incoming calls while the app may not be running (e.g. when it is suspended), those incoming calls must be signaled via Push Notification, and those push notifications are typically sent by a backing server.

Related

Wake up the Voip app from background , when a call received in standard iphone application

What my requirement is "I need to wake up my application from the background when a call comes in my iPhone".Is Any way to do so? Shall we get a unique number for the each user in
You'll need to use PushKit notifications and CallKit that can start the app even when the app is killed.
The CallKit is not really absolutely necessary, since it "just" allows you to provide standard calling interface. But it is a very nice feature to have - user is used to standard iOS interface for answering/declining calls, so I would definitely recommend to go with CallKit, instead of just standard notifications.
You can take a look at this tutorial, or just google together the PushKit, CallKit and Voip to get other relevant tutorials.
VoIP Push notifications is your solution.
I don't like the "link" answers myself, but here is how to do it:
Voice Over IP (VoIP) Best Practices (Apple documentation)
Roughly saying, VoIP pushes allow you to wake up your application and your code will be executed.
You may also be interested in CallKit, if you're working on soft-phone application.

iOS VOIP notification Linphone

I have set up the latest linphone iOS code (version 3.16.6) and I am able to make audio and video calls but if my app is in background or killed, not getting calls.
Please guide me in details that what I have to do to get the calls even when app is in background or killed.
Please let me know if there is server interaction part also there.
You have to wake up your application with voip-notification, before receiving call on background.
So you can implement your solution which send notification before every call. Notification wake an app and app receive the call
You can use callkit for UI, but callkit itself doesn't handle any background or voip work.
Use some working solution for example FlexiSip from Belledonne
http://www.linphone.org/technical-corner/flexisip/overview
FlexiSip have builtin support for iOS push notification, but you will need to generate certificates and do some server work :)
EDIT
Voip notification process.
Before every SIP Invite you have send voip notification to target device. Voip notification wake application which will be ready for accepting SIP call.
I'm not sure if you use proxy or if you making just direct calls. If you are using proxy you can try FlexiSIP which should handle this logic for you (I didn't tried). Of course you will need to provide your voip certificates to it.
If you making direct calls without SIP proxy, source application should call same API of some web service which send voip notification for target device (For example Houston API). And after you can send SIP invite from source to target application.

iOS - own VoIP Asterisk client app

Recently I've started making a client VoIP app from scratch in swift. I have Asterisk server and i want to receive incoming calls (doesn't need to handle outgoing calls) from Asterisk (not from iOS users). How can I implement handling VoIP calls and signalisation (register, reject call) using native tools? If it's impossible to register to a VoIP account with CallKit and PushKit - what would be the best open source solution? I've never made an app for iOS and don't know all capabilites of CallKit and PushKit yet.
CallKit is for front-end functionality of calling apps. It will not help you with connecting a client to your server. If you have never made an iOS app before then making a VOIP app is probably not the best place to start. You will almost certainly have to make your client from scratch unless Asterisk has a library for iOS.

Lock Screen UI with incoming Call

I am working on a video/audio call app. Now when my phone is locked and another user is calling me then from the lock screen I will get a notification and if I swipe the notification then the call automatically received. I used UILocalNotification for getting notification.
But I don't want like this. I want to see the UI same as when another user call me when my phone is unlocked that is there will be receive/reject option with my UI. I want to receive call like Viber or skype. How can I do that?
You should be looking into the PushKit framework form Apple.
The PushKit framework provides the classes for your iOS apps to
receive VoIP pushes from remote servers. VoIP pushes provide the
functionality that VoIP apps need to perform on-demand processing of
the push before displaying a notification to the user.
Apple Documentation
There are some tutorials might help you.
Tutorial 1
Tutorial 2
Update
To display the system-calling UI for your app's VoIP services you can use CallKit.
CallKit documentation
Sample code from Apple
Here is a tutorial which explains it well.
http://www.techjini.com/blog/enhance-voip-app-user-experience-using-pushkit-callkit/
https://www.raywenderlich.com/150015/callkit-tutorial-ios

iOS Twilio Receive Incoming SMS

I am developing an iOS messaging app that uses Twilio to send and receive SMS and MMS. The tutorial on Twilio about the iOS client seems to only cover outgoing and incoming calls. I understand that sending an SMS/MMS would mean that I send a HTTP request to my server, in which my server sends the request to Twilio in order to complete the sending. However, how would I receive messages on my app?
I know that Twilio numbers have web hooks that execute when the number receives this message, but how would I get this message to my app. I don't believe that there are delegate methods included like the voice ones. The only solution that I could think of right now would be to use push notifications from my server to the phone. Is there any other possible way? Thanks.
I was recently in a similar situation to yours, but my app only cares about receiving a response within a 2 minute window while the app is opened.
Regardless, I would say that your best options include 1) push notifications, 2) sockets (probably via Socket.io), or 3) background polling. If you plan to have your application receive the message agnostic of its state (open, closed, etc), then I would highly suggest using push notifications. I'm using Parse as my Twilio backend and it makes creating and working with push notifications a breeze :)

Resources