I have a web app calling a native app on android via an iframe intent which does not work in chrome 25 according to the following....
https://developers.google.com/chrome/mobile/docs/intents
The intent was structured like the following....
app://Requesttype=Testing&Type=123&tn=0000000000
In the new intent:// scheme how would I go about passing the parameters listed after app:// to the native application? I haven't been able to find an example.
With the new scheme, you can pass arguments as extras to the App, but you must encode the URI as follows:
<a href="intent://whatever/#Intent;scheme=myapp;package=com.what.ever.myapp;S.myextra=mystring;end">Do Whatever</a>
This will pass an extra String called "myextra" with the value "mystring". Having a look at the Android Code we can see how the extra parameters need to be coded. The "S" at the beginning of the "myextra" parameter defines it as a String. Other types can be:
String => 'S'
Boolean =>'B'
Byte => 'b'
Character => 'c'
Double => 'd'
Float => 'f'
Integer => 'i'
Long => 'l'
Short => 's'
For example, if we want to pass two extra parameters, an Integer and a String, we can do this:
<a href="intent://whatever/#Intent;scheme=myapp;package=com.what.ever.myapp;S.name=Perico%20de%20los%20Palotes;i.age=35;end">Do Whatever</a>
Note that you'll need to url-encode all the parameters.
In your Android app, you'll need to accept those extras. In the "onCreate" event of your Activity:
Bundle parametros = getIntent().getExtras();
if (extras != null){
String name = extras.getString("name");
Integer age = extras.getInt("age");
if (name!=null && age!=null)
{
//do whatever you have to
//...
}
}else{
//no extras, get over it!!
}
And, of course, add the filter android.intent.category.BROWSABLE in your manifest as shown in this link.
For the scheme URL:
appname://RequestType/?Type=123&tn=0000000000
You would want to map to an intent URL of:
intent://RequestType/?Type=123&tn=0000000000#Intent;scheme=appname;package=com.example.appname;end
Intents are not working after 4.4.4, So this is what i am doing for my app.
created custom scheme to launch my activity in the AndroidManifest.xml with the following intent filter
1)
<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="<<YOUR UNIQUE SCHEME(I SUGGEST YOUR PACKAGE NAME)"/>
</intent-filter>
2)
Construct market url with fallback url which opens your app through custom scheme created above.
market://details?id=<<your app package from AndroidManifest.xml>>&url=<<your app custom scheme from AndroidManifest.xml>>://yourdomain.com?encoded(p1=v1&p2=v2....etc)
this opens the store if your app is not installed, and opens the app with the intent data if the app is already installed, with your decoded parameters.
Hope this helps
You can no longer use an iframe and custom protocol to open a native app.
You can however use the existing intent:// syntax to launch and intent and pass it data, it has the added benefit of taking the user to the Play store if it is not installed.
You either encode the data in the "path" part of the syntax as documented so you could have intent://play/?a=1#Intent;......;end;
or you could encode it as an Extra.