I have a Wordpress webpage working great, now I've been asked to develop an Android application with a simple web view that would load the webpage but when using the app it have to change some web behaviors.
Usually you go to the Home, and you have categories like: Services, last deals, projects...
The idea when using the app is going direct to the login page and change the menĂº categories, so some pages would be hidden and another ones would appear.
I've seen the #media way to do it, but I don't want to apply all these changes by resolution, but for type of device.
I checked this out: https://wordpress.org/plugins/simple-mobile-url-redirect/ but then when I redirect to the custom URL and I do the changes, I don't know how to preserve them, while navigating to other pages.
Is there any way of preserving that "mobile session"? or would it be a good choice to create a sub domine and replicate the webpage for mobile? (www.mobile.webpage.com)
I understand your situation and the best idea would be to generate screens using your own code. IN order to get the data from WordPress, you can call WP-Rest handles to get the data.
Alternatively if you only want to load webview, your web team will need to do custom code in order to facilitate your request. The idea is to send query variables to the website when calling from mobile app. Once the url is called, the WP code needs to set up transient/session/cookie and display custom result if transient/session/cookie is set.
I am sorry, I can't find the exact code that I used for somewhat similar work but if your web team has ever dealt with transient or custom session, they should be able to do this without any issue.
Related
I am currently creating an android application in which I use the location and 2 symbol Id's of the user to create an aprs comressed packet, and I need in one screen to ask the user for input and show him the content of the packet.
But I also need to display a web page, therefore I need to know if it is possible to use web interface to display a web page in a navigation bar application ? (the type of the app was decided since I need one screen for input and output and one screen for the web page).
you can use Chrome Custom Tabs
link
As far as i could understand you should use 'WebView' to show webpage, further you can use interfaces to communicate between web page JavaScript code and android code.
Please refer following links :
https://developer.android.com/reference/android/webkit/WebView.html
https://developer.android.com/guide/webapps/webview.html
First, a disclaimer: i'm completely new to iphone, android or any mobile development. In the other side, i've been developing websites (php, javascript) for long time.
I have a website which is adapted for mobile and works great. But, there are some features i need such as prevent the screen from dimming (my site is designed to be used for many hours without user interaction while being permanently visible or for example being able to send notifications (with sound, etc., to attract user attention)).
This has lead me to consider a webview. From what i've seen, it's about creating a native app which just a webview (browser without toolbars) and using html and javascript to operate. It will use some native functions to perform some native actions (such as the ones i want).
I've searched around and i don't have a specific response to this: can i tell a webview to, permanently load the content from a remote site ? i mean, my site is php based (zend), with many jquery content manipulation. Can i tell him something like LOAD htp://www.mysyite.com and let him do everything else from it ? absolutely no local content applies, everything is remote. The webview would just be an "interface" to the website.
And additional question is: can i use jquery on it ? ajax calls ? geolocation ? i mean, in a browser i can, i just wonder if inside a webview i can.
I've read that phonegap does this. But most of the time, when taking about phonegap and about webview i general, i read people talking about loading locally the page not remotely in a permanent basis.
Finally, yes, i will build a native app in the future. But now, i simply don't have time to learn about android, ios and blackberry at the same time. Thanks a lot for your responses.
For Android only:
Can i tell him something like LOAD htp://www.mysyite.com and let him do everything else from it ? absolutely no local content applies, everything is remote. The webview would just be an "interface" to the website.
Yes, of course you can. Suppose you have a webview in an activity (it's really easy), you would load the web page something like:
WebView myWebView = .... // get a reference from XML or if you just created get its ref
myWebView.loadURL("http://www.mysite.com");
I would start with this API Guide article. Also, taken from WebView JavaDoc:
A WebView has several customization points where you can add your own behavior. These are:
Creating and setting a WebChromeClient subclass. This class is called when something that might impact a browser UI happens, for instance, progress updates and JavaScript alerts are sent here (see Debugging Tasks)
Creating and setting a WebViewClient subclass. It will be called when things happen that impact the rendering of the content, eg, errors or form submissions. You can also intercept URL loading here (via shouldOverrideUrlLoading()).
Modifying the WebSettings, such as enabling JavaScript with setJavaScriptEnabled().
Injecting Java objects into the WebView using the addJavascriptInterface(Object, String) method. This method allows you to inject Java objects into a page's JavaScript context, so that they can be accessed by JavaScript in the page.
Please be also aware that the webview is not that powerful as the phone's browser. Here is a SO thread where a friend posted an interesting question. You might find helpful the answers he got.
This app already exists in the Apple App store and Android markets. It is an app that uses a lot of native code and is not a candidate to be fully html5ed.
Longwinded Description
I want to have a Web-based series of settings pages. Some of these pages will live locally on the mobile device, and some will be hosted on a remote server. The native app will need to communicate with the local web pages to get and set information in the webpage using javascript.
For instance, the first page shown in the WebView/UIWebview will be a local index page. If the remote website is down, the links on the index page to the remote pages will be greyed out. On loading the WebView, the native app will need to detect the reachability of that page and send javascript to the page to grey out the buttons. Likewise, some settings changes made in the local web pages need to be sent back to the Native app for processing.
Short and Sweet Requirements Summary
Embed remote and local webpages in a webview
Theses webpages will be the same for both Android and iOS
Local pages use JavaScript to get data from and send data to the Native Mobile App
Potential Solution Pathways
A. PhoneGap
I realize that Phonegap would work well for this if my application was entirely a web app. From my reading it seems like Phonegap doesn't really like to be embedded in a native app for part time work.
What? You say it's really easy and I've been grossly misinformed? Enlighten me oh wise one.
B. Roll My Own
I'm open to rolling my own solution, however the methods for getting and setting information via Javascript from the Webviews to the Native Apps seems quite disparate. More-so the getting than the setting (bogus URLs for iOS, very nice AddJavaScriptInterface for Android). Also, it seems like this path could lead to a severe maintenance headache in the future.
Say what? Your genius programmer friend has made a website describing this process in excruciating detail? Tell me more.
C. 3rd Party Library
The perfect 3rd party library that does everything I want (and more!) exists? Save me from my ignorance.
Decision
In the future, it seems like PhoneGap's 'Cleaver' project will be the best way to do this.
Since it's not ready for Android yet, it seems that the current (Early June '12) best solution for write-once-embedded-HTML is to use a fake URL scheme to communicate from the web page to the native app (both platforms can execute JS on the page directly when going from native app to web page).
For Android this is simpler to do. Take a look at WebView's addJavascriptInterface method. You can create your own object with methods that can be called directly in the HTML javascript.
iOS requires a bit of trickyness. Best solution for these types of problems is a couple things:
For callbacks to iOS you will need to basically make up your own URL scheme like native://somehost.com/somepath When your javascript wants to inform the iOS code use window.location = 'native://somehost.com/somepath';
Set the UIWebView delegate to an object that defines webView:shouldStartLoadWithRequest:navigationType: it will look something like this
if ([request.URL.scheme isEqualToString:#"native"]){
if([request.URL.host isEqualToString:#"somehost.com"]) {
//Do the code you need to do here, branch off depending
//on the path and/or host, you can parse parameters here too
return NO; //This will keep UIWebView from trying to actually load
//your made up scheme
}
}
return YES; //If the request isn't one you want to intercept return YES/true
//so UIWebView will load the page
To have your iOS code send information or call functions in your javascript you can use WebView's stringByEvaluatingJavaScriptFromString:. This will return the result of a javascript expression so you can also use it to get some information from the page itself. To call a function use something like this
[webview stringByEvaluationgJavaScriptFromString:#"myJavaScriptFunction();"]
You can also handle the made up scheme in Android by creating a custom WebViewClient and overriding the shouldOverrideUrlLoading method similarly to the iOS code above except the return calls are backwards, you return true if you handled the URL and the WebView should do nothing more, and false if you want the WebView to handle loading. Be sure to create and assign the custom WebViewClient to the WebView using setWebViewClient. To call javascript functions on the actual WebView do something like webview.loadUrl("javascript:myJavaScriptFunction();");
PhoneGap iOS has a concept called Cleaver where you can embed the web view into a native iOS app. Randy McMillian has a good example here. On the Android side work is being done to bring the same functionality. So we are not there yet but we will get there.
Hey I'm building an app that will allow a user to log into a site (mygranturismo.net) and then will display their personal info, (cars owned, trophies earned, level status, etc) in a layout on the screen. i need to be able to get this info and place certain bits right where i want, also some may be clickable links to other info inside the site. I don't want to simply link to the site, i want to access certain parts and display then in my custom app. an example would be the difference between twitter on Android vs twitter on a pc browser. Any help would be much appreciated.
It sounds like what you're describing is a native mobile application to work with an existing website that's not optimized for mobile. If you own the website, you can create private pages for simplified data retrieval. If it's a website that you don't own, you will need to read the raw HTML and extract the useful info from it. How you do it is up to you, but it will involve string searches and cut/paste of info from the HTML text. The danger in doing this is that if the website owner changes the layout of his pages it will probably break your application.
I am working on an application that uses WebView to display multiple documents that are hosted online. Preferably, I'd like to have it set so that no scrolling is required. Instead, a "Next" button could be used to bring up a "new page" that would be a continuation of the text.
For example, one of the documents this application would read can be found at
http://www.missionstclare.com/english/May/whole/morning/24m.html
Is there a way to easily break the document up so that it only shows what would fit in the viewport?
Note: This is for an android app using eclipse.
There is no easy, out-of-the-box way to do it.
If you are running the server, then you can check for the user agent and serve a smaller page to the device.
If you are not, you will need to use an URLConnection, retrieve the text, parse it, and display chunks of it in the WebView.