How can I make deep links clickable on Google Calendar - android

I am trying to save a deep link in my calendar and make it clickable.
My URI has a format like
appname://timer?2000sec&ringtone?jinglebells.
On iOS, in the Calendar, I see it properly. It shows the text in red and if I click it, it opens the app. This, btw, is under "notes", not in the URL field.
On Android however this does not seem to be working properly, the Deep Link is not recognized. It works in other places! I know if the info.plist has a wrong name for the scheme it won't recognize, but I created an HTML page with the appname:// as hyperlink, and if I open it in chrome and click it, it does exactly what it is supposed to, so the AndroidManifest.xml should be set up correctly. But unless I specifically mark it as a Link (be it hyperlink or anything else) it is seen by Android as plane text.
Now, is there a way to force Android to see it as something clickable in the notes field in the Calendar?
Side info:
<!-- Deep linking, this is under the mainActivity <activity> tag -->
<meta-data android:name="flutter_deeplinking_enabled" android:value="true" />
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="rheinbahnnextgen" />
I am using flutter for this, the package I am using is https://pub.dev/packages/add_2_calendar

As I just found out, Google Calendar supports hyperlinks
link

Related

Android deep link and issues non clickable links or not working links

I made an Android application in which I want to implement deep linking (example: http://myApp/seeMore?id=123456)
When I send a sms via intent, I receive it, and the link is clickable, and it opens the content of the application I want to see!
What's the problem? If I send myself the link via whatsapp (or messenger), I receive it, but this same link in the whatsapp message is not clickable!
I also tried the format myApp://seeMore?id=123456 (with the Manifest xml updated as it should be), but nothing happens, the link sent is not clickable, even via SMS.
The only time I had a clickable link in whatsapp and messenger, it's with the http://myApp.com/seeMore?id=123456 format. But when I click on the link, it opens the browser saying that the page does not exist.
And I saw that in this case, I have to link my app to my website but I don't have a website... And I don't want to have one!
Questions :
Is there a way to make "myApp://seeMore?id=123456" clickable in SMS, Whatsapp, Messenger apps? By forcing in the code to say that it's a hyperlink? something else? :) )
Is it possible to make the link "http://myapp.com/seeMore?id=123456" work to point directly to my apk and not to the browser? (Did I configure my intent-filter wrong?) I saw a style attribute verifyAuto=true in the xml manifest, but when I tried, it didn't work...
Is it possible to generate a clickable link (even if it's not a url?) via intent send to messenger/whatsapp?
Does anyone have any idea whatsoever for my concern? :)
Here it is, if you have any idea, I'm interested! Thanks for reading and possibly helping me :)
Translated with www.DeepL.com/Translator (free version)
My current AndroidManifest:
<activity
android:exported="true"
android:name=".vue.activity.GraphActivity"
android:screenOrientation="landscape"
android:launchMode="singleTask"
android:parentActivityName=".vue.activity.MainActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "http://speedchyps/course” -->
<data android:scheme="http"
android:host="speedchyps"
android:pathPrefix="/course" />
<!-- note that the leading "/" is required for pathPrefix-->
</intent-filter>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".vue.activity.MainActivity" />
</activity>
Config when i try "maJolieAppli://seeMore?id=123456":
<intent-filter android:label="#string/filter_view_example_gizmos">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "speedchyps://course” -->
<data android:scheme="speedchyps"
android:host="course" />
</intent-filter>

invoking an intent using html link

I am trying to implement a new feature for my android application.
scenario :
when some event occurs, the camera sends an email to my (Gmail) account.
on opening the mail, it will have a link (html).
when user clicks on that link, it should launch my application Home activity.
I need to understand :
how to create that html link.
how can i make the link to launch my application Home activity.
kindly help me to understand what all things i need to do in my application.
I used "Blackbelt's" user comment and i was able to get the intent html link working.
But my problem is : i want to use a custom scheme "mobile" instead of "http"
I am using Gmail to use the link. But when i send using custom scheme. Gmail doesnt recogonise as hyperlink. So i cannot click on the link.
Please help me how to use a custom scheme. with gmail
you need to register an intent-filter for your Activity on the AndroidManifest.xml file, defining a custom url. . E.g.
<activity android:name="path.to.YourActivity" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https"
android:host="it.is.my.app" />
</intent-filter>
</activity>
So if you press on a link like https://it.is.my.app, you should be prompted with the android intent chooser, with your app

Custom URI in Android devices and iOS devices

I had a problem with Custom URI.
Custom URI : scheme:\music\album\tamil\albumID
When I mail this as text it appears as link in iOS devices as link but not in Android devices.
When user select/click the Cutom URI it should navigate to my app and have to show the appropriate content.
This custom URI is passed from one website's button click. In iOS device its react as link not in Android devices.
The web end passing the Custom URI as below
href="scheme://music/tamil/album/albumID"
As a Android developer what should I do to resolve this ?.
Or from web end how to pass the Custom URI as link?.
I think your mail provider/client is responsible for this behaviour. Gmail for example removes custom URIs and replaces href links from <a> tags. This may be for security reasons, not sure why. I suggest you to use "http" as scheme. Then Android will prompt you to open with browser or your app. Add intent filter as below example.
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="http" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
You may also add a android:host, and android:path or android:pathPrefix if needed.
Another option is to use a redirect 302. An example for php is below. The drawback is this will open the browser at first.
<a href="openmyapp.php?cat=music&albumID=9128">
<?php
header("Location: scheme://". $_SERVER['QUERY_STRING']);
exit;
?>

Launch android app when a link is tapped on SMS

I don't know if many people have tried this but I am trying a build an app that requires user to tap on a link on the sms he/she receives and this will launch the android app. Is it possible to do in android? If yes, how can I do this? I know this can be done in IOS. Any suggestions or help will be appreciated. Thank You.
In you Manifest, under an Activity that you want to handle incoming data from a link clicked in the messaging app, define something like this:
<activity android:name=".SomeActivityName" >
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<action android:name="android.intent.action.VIEW" />
<data android:scheme="com.your_package.something" />
</intent-filter>
</activity>
The android:scheme="" here is what will ensure that the Activity will react to any data with this in it:
<data android:scheme="com.your_package.something" />
In the SomeActivityName (Name used as an illustration. Naturally, you will use your own :-)), you can run a check like this:
Uri data = getIntent().getData();
String strData = data.toString();
if (strScreenName.equals("com.your_package.something://")) {
// THIS IS OPTIONAL IN CASE YOU NEED TO VERIFY. THE ACTUAL USAGE IN MY APP IS BELOW THIS BLOCK
}
My app's similar usage:
Uri data = getIntent().getData();
strScreenName = data.toString()
.replaceAll("com.some_thing.profile://", "")
.replaceAll("#", "");
I use this to handle clicks on twitter #username links within my app. I need to strip out the com.some_thing.profile:// and the # to get the username for further processing. The Manifest code, is the exact same (with just the name and scheme changed).
Add an intent-filter to your app that listens for links that follow the format you want your app to be launched on.
However, this will be a global listener, and any link that fits the format even outside the SMS app will trigger your app. So if the user taps a similar link in the web browser, your app will attempt to respond to it.
Additionally, if there is another app besides yours that can handle this link, Android will create a chooser that allows the user to pick whichever app they want to use. There is nothing you can do about this, except suggest that the user make your app the default handler for such links.
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE"
<data android:scheme="https" android:host="${hostName}" android:pathPattern="/.*" />
</intent-filter>
Previous answers are OK but don't forget to specify the pattern.
See more details here.
Also define your hostname inside Gradle file like:
android {
defaultConfig {
manifestPlaceholders = [hostName:"subdomain.example.com"]
}
}
More info about manifestPlaceholders here.

What makes Google Maps/Youtube able to display the 'Complete this action with' menu?

And if possible, how can I get this behavior for 'my' app?
For example, when a user navigates to the URL 'example.com/*' (any page starting with example.com), I'd want it so the 'complete this action with' menu shows up listing all of the browsers and this particular app?
I've done some reading of the Intent documentation, but it seems like you can only create them for phone data, not web URLs.
Edit: anyone? I've looked into this some more, but haven't had any luck. I'd like to set a bounty, but I don't have that option yet. If it isn't possible, I guess I'll just make a way to paste in a URL.
It's pretty simple, actually! What you want is an intent filter with the BROWSABLE category set, and a <data> tag set up to match your URL.
Inside your <activity>, add:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="http" android:host="www.example.com" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
and set up the action and categories how you want, and change the data tag values to something relevant to your application. This will allow your link (in this case, http://www.example.com/) to be launched in your application by the browser.
Take a look at http://developer.android.com/guide/topics/intents/intents-filters.html#ires
It's really well described how to use intent filters and why, especially in the section Common cases (http://developer.android.com/guide/topics/intents/intents-filters.html#ccases).

Categories

Resources