Is there an iOS API for accessing call logs? - ios

I want to access the call log of the device in my application. I have R&D a lot and found some posts here on Stack Overflow as well (for example, this one), but none of them have clear vision whether we can do this.
When I look into these apps:
Truecaller
quickReminder
...it seems that they managed to get the call history in their app and customized it as well.
Any help/feasibility would be appreciated.

It is not possible to extract the call log programmatically.
First of all Apple officially does not expose any public API to access the call log. That means you can hack all you want to access the call log(Using private API's) but when submitting your app to Apple by sure it will be rejected.
Regarding the app you have mentioned(quickRemainder)
It gets the call log using a cvs file or a text file. It is not taking the info via device calllog db.
Extract from their app description.
You can import text or cvs files containing phone calls into this app.
TrueCaller does not get the call log they just use the app to search the contacts and update the contacts with info they got. They are not reading the callogs
Update: Apple has introduced framework called Callkit. Though you cannot access all the call log, you can have some control over calls like
Identifying incoming calls
Blocking calls
etc
https://developer.apple.com/reference/callkit

Related

iOS application with CallKit - access last call

I am newbie in ios app development. I want to create application for ios with the following functionality. When the phone is receiving incoming call (no matter if the number is in the contact list or not) I want when the call is over and the phone's owner opens my application to see he's last call's number there.
Is that possible? I've read about CallKit API but I am still not sure if this can help me. Is it possible phone's owner to give such permissions to my app so it can access this information?

Access call history on iOS

In my iOS application I need to get all call history (dialled,recieved,missed) from an iOS device and display as a list in my application.
So many answers are there previously for this question.But I didn't get exact answer for my question.
If anybody worked on this question previously please let me know the answer immediately.
There is no public API for accessing the call history on iOS.
If you wanted to do this in a private app that couldn't be released on the App Store you could look at this link.
There are apps on the store that use the above method, but I wouldn't rely on it passing review. I think the apps that do use it may have slipped through the net.
Apple has introduced framework called Callkit. Though you cannot access all the call log, you can have some control over calls like
Identifying incoming calls
Blocking calls etc
https://developer.apple.com/reference/callkit

How to display view contact on call screen and get info comming call?

I want to display a view on call screen of iPhone and get info comming call but I can't.
I found one link access private API but it saying that apple will not approve this,
But i saw some application on appstore.
Link
https://itunes.apple.com/au/app/contact-notes/id660212820?mt=8
Can any body tell me how to do this?
You may have luck using the APIs in the new CoreTelephony framework Apple added, specifically the CTCall class. This doesn't reveal the caller, but it may be possible to somehow get that.
Using private APIs in any way is not recommended and will break on future releases of the OS, and it's doubtful if you'll even get in the App Store using them. Don't do it.
It's possible that the application you cited as an example uses these private APIs, seeing as it has iOS 5 compatibility. If you really need to use that API, it's possible to obfuscate your use of it with method swizzling, or getting function pointers and calling those, although that can will break when Apple changes their private APIs.
Lastly, you could download and install this app, then dump its symbols to see what APIs it uses.

How to share links via FB App when I am offline

I am developing an mobile app for iPhone. The app will primary used by people who are on holiday in a different country and will be offline most of the time, due to high costs for internet traffic.
However, the company for which I am developing the app wants to users to be able to use the "Facebook Share" functionality also when people are not connected to the internet.
It should work on a way that they click the SHARE link button in the app, but then get a message that they are offline and the link will get shared as soon as they are online again.
I am trying to figure out how to do this. Can I pass the link I want to share to the official FB App via fb:// protocol (or whatever) and the FB App handles the post/share as soon as it is online again?
Or do I have to do it on my own, put the links I want to share in a internal database and then post them to the wall when I am online again?
Or any other ways??
Any suggestions would be welcome, I would prefer a very quick solution and hope someone maybe has an idea how to do this. I was hoping I can pass the share-link to the official FB App and this one handles everything when it goes online again !?
Thanks for your ideas!
Your approach should be to make your link-sharing code automatically cache requests until they are sent. The app then doesn't need to concern itself with the details - it can just post the link and get a 'failed', 'success', or 'postponed' response from your API and notify the user accordingly.
Your link-sharing code can then internally check if it can currently post to FB and if not (either because the user is currently offline or perhaps the Facebook token is expired) it will store it for later. This class will then re-check periodically (for example when the app comes to the foreground or when the class is initialised the next time the app starts) for connectivity and then it will check if the token is still valid and perform FB login if required. Once it has a valid token it can then iterate through the pending requests and act upon them.
If you really want to make it nice and clean, you can separate out the code that accepts incoming requests to do something, checks if it can be performed now, does it or stores it for later, and periodically checks any requests in the pending queue. This class will not have any idea what the requests do or how they are performed, it will work with another class that implements a protocol to do the actual work and knows about facebook, etc. There may even be an existing design pattern for such a setup, but I don't know what it's called if there is.
Update: I did some research and found this is very similar to the "Fire-and-Forget Pattern".

Facebook iOS SDK Pass parameter with app requests

I would like to have my native iOS app send a request with a parameter to a Facebook user on iOS. If they accept, it will launch my native iOS app and pass it the parameter. Is this possible?
I am having marginal success using [facebook dialog:#"apprequests" andParams:dict andDelegate:self]. I am getting the bookmark counter to increment on Facebook iOS app, but I do not see the individual requests. If I tap the bookmark it launches my app but I do not see how I can get the "data" parameter I passed with the request, or even the request_id.
On desktop I see the individual messages under "Requests" section of "Apps and Games". If I accept a request, I can see it pass the request_id to my (simple echo) canvas URL. I read this can be used to fetch the associated data. But, this does not help me on iOS. My app only runs on iOS, so this canvas app will eventually just be a "this app only works on iOS," but it seemed to be necessary to get the requests to flow.
Neither of these are showing me Notifications, so maybe I am doing something basic wrong. Or, is there some other way to pass a message to a Facebook user, with a URL they could click (to launch and feed my app its parameter).
One other odd thing, I do not see how to get rid of the Requests. If I "X" them on the desktop client, it asks me if I want to stop receiving all requests from my app, and if I say no, it only hides them temporarily.
Leif, Hi - I'm the engineer at Facebook who wrote the tutorial you've referenced.
I've taken a look at the issue you've mentioned - this is in fact not a bug in the documentation and is by design.
The incoming url from a request on iOS looks something like this:
fb480369938658210://authorize?expires_in=3600&access_token=BAAG05NeN86IBAC31YWMWRHVrNCAYMy0Rv1OtqZCwdH8QDBUAt5KgZCsIbU0EOZAvMms2tZCANV9sZBWSkEzStDtt4i7YnYZA4bPgGx2XaI5s22iBMxIZAneZAv7ADi3Wi20ZD&target_url=http%3A%2F%2Fm.facebook.com%2Fapps%2Ffriendsmashsample%3Ffb_source%3Dnotification%26request_ids%3D364209433669109%252C379616028785376%252C494409170593789%252C489782271042929%252C328564930575784%26ref%3Dnotif%26app_request_type%3Duser_to_user
This is bundling together several requests, with multiple request ids into a single url.
To get the extra data coupled with this request, it is not required to have the user_id. Hitting graph.facebook.com/*request_id* is enough.
You can actually see this outlined in the documentation here: https://developers.facebook.com/docs/requests/#deleting under the 'Request ID Format' heading.
The code contained in the Friendsmash sample and on the tutorial works correctly - I verified it just now. So it should serve as a good guide to the OP's question.
Thanks!
I have been struggling with this too.
First, the FB iOS SDK requests tutorial is a good start.
However, there are also a few bugs that makes things not work as expected:
It seems that currently, a mobile web url has to be set up for the FB app in order for requestIds to be forwarded from the native FB app to your native app. See this bug report.
The tutorial mentioned above uses an erroneous graph path for the request object. I uses "request-id" where it should be "request-id"_"user-id". I have filed a documentation bug report on that issue.

Resources