可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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.
回答1:
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.
回答2:
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
回答3:
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
回答4:
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.