'preview', EXCERPT_PREFERENCE => 'excerpt', POST_CONTENT => 'preprocessed', ENABLE_WP_SUPER_CACHE => '0' ); protected $buildop = array( FACEBOOK_APP_ID => '', GOOGLE_SENDER_ID => '' ); protected $accountop = array( NOTIFICATION_TYPE_KEY => 'single' ); public function getInstallLink($slug){ $action = 'install-plugin'; return wp_nonce_url( add_query_arg( array( 'action' => $action, 'plugin' => $slug ), admin_url( 'update.php' ) ), $action.'_'.$slug ); } public function __construct(){ add_action('admin_init', array($this,'admin_init')); add_action('admin_menu', array($this, 'add_page')); add_action('admin_notices', array($this, 'my_plugin_admin_notices')); $this->scriptOptions = get_option($this->scripts_option); if((empty($this->scriptOptions['scripts']) || ($this->scriptOptions['count'] < 5))) { add_action( 'print_scripts_array', array($this, 'add_scripts'), 999); add_action('wp_print_scripts', array($this, 'add_late_scripts'), 999); $this->scriptOptions['count'] = $this->scriptOptions['count'] +1; } } function my_plugin_admin_notices() { } public function installpwmobileapp() { $this->buildop[HOST_NAME] = get_bloginfo('url');; $this->buildop[APP_NAME] = get_bloginfo('name'); $this->buildop[EMAIL] = get_option('admin_email'); $this->buildop[AUTHENTICATION_KEY] = $this->getToken(64); $this->op[PWAPP_MENU] = $this->getFirstMenu(); $this->op[pw_mobile_app_settings::$androAppCss] = '#content-sidebar{ display:none; } #secondary { display:none !important; } .sidebar, .site-header, .footer-widgets { display:none; } #menu-header-menu{ display:none; }'; $this->op[pw_mobile_app_settings::$postProcessedCss] = '.androapp img{ max-width: 100%; }'; $this->op[pw_mobile_app_settings::$shareImagePreference] = 'first'; $this->op[pw_mobile_app_settings::$sharePreference] = 'EXCERPT'; $this->op[pw_mobile_app_settings::$shareTextWithImage] = 'TITLE'; $this->op[pw_mobile_app_settings::$shareSuffixText] = 'via'; $this->op[pw_mobile_app_settings::$shareSuffixLink] = 'POST'; $this->op[pw_mobile_app_settings::$shareImageWithCustomFunction] = '1'; $this->buildop[pw_mobile_app_settings::$tagTextColorKey] = "#ff808080"; $this->buildop[pw_mobile_app_settings::$tagBgColorKey] = "#E6E6E6"; $this->buildop[pw_mobile_app_settings::$feedBgColorKey] = "#FFFFFF"; $this->buildop[pw_mobile_app_settings::$feedTitleColorKey] = "#000000"; $this->buildop[pw_mobile_app_settings::$feedContentTextColorKey] = "#000000"; $this->buildop[pw_mobile_app_settings::$screenBgColorKey] = "#E6E6E6"; $this->buildop[pw_mobile_app_settings::$actionBarTitleColorKey] = "#FFFFFF"; $this->buildop[pw_mobile_app_settings::$actionBarBgColorKey] = "#F4832C"; if(!get_option($this->option_name)) { add_option($this->option_name, $this->op); } if(!get_option($this->build_option_name)) { add_option($this->build_option_name, $this->buildop); } if(!get_option($this->account_tab_key)) { add_option($this->account_tab_key, $this->accountop); } if(!get_option($this->scripts_option)) { $scriptOptions = array(); $scriptOptions['count'] = 0; $scriptOptions['scripts'] = null; add_option($this->scripts_option, $scriptOptions); } $this->doCurlRequest($this->buildop[HOST_NAME], "INSTALL", $this->buildop[EMAIL]); } public function doCurlRequest($host, $action, $email){ if(function_exists('curl_init')){ $url = $this->androAppHost."/appCreator/log.php?action=".$action."&email=".urlencode($email)."&host=".urlencode($host); $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); curl_close($ch); //echo $output; } } public function deactivate() { $options = get_option($this->build_option_name); $this->doCurlRequest($options[HOST_NAME], "UNINSTALL", $options[EMAIL]); delete_option($this->option_name); delete_option($this->build_option_name); delete_option($this->account_tab_key); } // White list our options using the Settings API public function admin_init() { $this->plugin_settings_tabs[$this->get_started_option_name] = 'Get Started'; register_setting($this->get_started_option_name, $this->get_started_option_name); add_settings_section( 'section_get_started', 'Welcome to AndroApp Native Android Mobile App', array( &$this, 'options_do_getstarted' ), $this->get_started_option_name ); $this->plugin_settings_tabs[$this->build_option_name] = 'Look & Feel'; register_setting($this->build_option_name, $this->build_option_name); add_settings_section( 'section_build_settings', 'Look & Feel', array( &$this, 'build_options_do_page' ), $this->build_option_name ); $this->plugin_settings_tabs[$this->option_name] = 'Configure'; register_setting($this->option_name, $this->option_name); add_settings_section( 'section_app_settings', 'Configure dynamic settings for your app', array( &$this, 'options_do_page' ), $this->option_name ); $this->plugin_settings_tabs[$this->account_tab_key] = 'Account Settings'; register_setting($this->account_tab_key, $this->account_tab_key); add_settings_section( 'section_publish_settings', 'Account Settings', array( &$this, 'accounts_do_page' ), $this->account_tab_key ); } // Add entry in the settings menu public function add_page() { add_options_page('AndroApp', 'AndroApp', 'manage_options', $this->plugin_options_key, array($this, 'plugin_options_page')); } /* * Renders our tabs in the plugin options page, * walks through the object's tabs array and prints * them one by one. Provides the heading for the * plugin_options_page method. */ function plugin_options_tabs() { $current_tab = isset( $_GET['tab'] ) ? $_GET['tab'] : $this->get_started_option_name; screen_icon(); echo ''; } function add_scripts($todo) { //echo "

Add Scripts

"; //print_r($todo); if(is_single()){ $this->process_scripts($todo); } return $todo; } function add_late_scripts() { global $wp_scripts; if(is_single()){ $this->process_scripts($wp_scripts->queue); } } function process_scripts($scriptsHandle){ global $wp_scripts; $options = get_option($this->scripts_option); $scripts = $options ['scripts']; //print_r($scripts); if(empty($scripts)){ $scripts = array(); } $scripts = $scripts + $this->process_scripts_inner($scriptsHandle); $options['scripts'] = $scripts; $options['count'] = $this->scriptOptions['count']; update_option($this->scripts_option, $options); } function process_scripts_inner($scriptsHandle){ global $wp_scripts; $scripts = array(); foreach( $scriptsHandle as $handle ) : //echo $handle."
"; if(!empty($wp_scripts->registered[$handle]->src)) { $scripts[$handle] = convertToFullUrl($wp_scripts->registered[$handle]->src); }else{ $deps = $wp_scripts->registered[$handle]->deps; $scripts = $scripts + $this->process_scripts_inner($deps); } endforeach; return $scripts; } function clearScripts(){ $this->scriptOptions['scripts'] = null; $this->scriptOptions['count'] = 0; update_option($this->scripts_option, $this->scriptOptions); header("Location: ?page=pw_mobile_app_options"); } /* * Plugin Options page rendering goes here, checks * for active tab and replaces key with the related * settings key. Uses the plugin_options_tabs method * to render the tabs. */ function plugin_options_page() { $tab = isset( $_GET['tab'] ) ? $_GET['tab'] : $this->get_started_option_name; if(isset($_GET['clear_scripts_list'])){ $this->clearScripts(); } ?>
plugin_options_tabs(); ?>
You need to submit your app to Google App Store such that your readers can install your mobile app.

You have two options
  1. Submit it yourself
    Create a new account on google play developer console and submit your app yourself. You need to pay one time fee of $25. Generally it takes upto 48 hours(after the payment) for new accounts to get approved.

  2. Leave it onto us
    We can submit your app from our account, ownership of the app can be transferred to you later at any point of time.
    We will need following details from you

    1. One Application Icon of 512×512 size, same which is used while creating the app
    2. One feature graphic of 1024×500 size
    3. App Description
    4. 2-3 screenshots
    For more details, drop an email @ contact@androapp.mobi

https://play.google.com/store/apps/details?id=".$options[PACKAGE_NAME].""; echo '

'.$applinktext.'

'; } ?>

Annual Renewal

AndroApp is completely free for the first year, after that you can purchase annual subscription from here. Mention your email id and site link in shipping address. We will activate your annual subscription.

Please get in touch with us @ contact@androapp.mobi for any more clarifications.

account_tab_key); ?>

Push Notification Settings

Google API Key: We use Google Messaging API's for push notifications, Follow instructions here to create a Google API project, enable "Google Cloud Messaging for Android" api, and enter your API Key here(This is needed to send push notifications to you app)

" value="" />
Google Project Number: Enter your Google Project Number for the project created in above step.

Note: You need to publish new build everytime you change it

" value="" />
Notification Type: Select Push Notification Type, select notification style to handle more than one notifications.

" value="stack" />Stack (Group notification)
" value="single" />No Stacking(Each notification will be shown separately)

Facebook Share Settings

Facebook Application ID: Facebook App ID (for facebook share), Create a new app from here OR add android platform in your existing app. We will email the app settings after you generate your first build.
Leave it blank for using AndroApp Facebook App(You will not have access to insights)

Note: You need to publish new build everytime you change it

" value="" />

Monetization Settings

We are using top performing mobile ad network AdMob by Google. Please create an account on Admob and enter ad id's here.
Top Ad Unit: " value="" />
Bottom Ad Unit: " value="" />
List View Ad Unit: " value="" /> of size , show it after every posts.
Interstitial Ad Unit: " value="" /> show it after every page screens.

✓"; } function isTimeZoneError(){ try{ $this->androapp_json_get_timezone(); return false; }catch(Exception $e){ return true; } return false; } function options_do_getstarted(){ $sectionTobeOpened = -1; $stepOneCompleted = false; if(is_plugin_active('json-rest-api/plugin.php') && !$this->isTimeZoneError()){ $stepOneCompleted = true; }else{ $sectionTobeOpened = 0; } global $options ; $options = get_option($this->build_option_name); $stepTwoCompleted = false; if(!empty($options[CLIENT_ID])){ $stepTwoCompleted = true; }else{ if($sectionTobeOpened == -1){ $sectionTobeOpened = 1; } } $stepThreeCompleted = false; if(!empty($options[LAUNCHER_ICON])){ $stepThreeCompleted = true; } else{ if($sectionTobeOpened == -1){ $sectionTobeOpened = 2; } } $accountOptions = get_option($this->account_tab_key); $stepFourCompleted = false; if(!empty($accountOptions[GOOGLE_SENDER_ID])){ $stepFourCompleted = true; }else{ if($sectionTobeOpened == -1){ $sectionTobeOpened = 3; } } if($sectionTobeOpened == -1){ $sectionTobeOpened = 4; } ?>

Follow these 5 steps to see your mobile app in Google play store

You have completed this step

You have already installed WP REST API (WP API) Plugin.

Move over to the next Step Now.

isTimeZoneError()) { ?>

WP REST API does not work correctly for your current timezone, Click here to change it and come back.

(Please change your timezone by +-30 minutes or more and see if this link works fine:

getInstallLink('json-rest-api'); ?>

Your mobile app will use json calls to get the data from your site, for that you have to enable WP REST API plugin. This plugin is maintained by wordpress core team and will soon be included in the wordpress core, till then

Click here to install WP REST API (WP API) plugin.

And move over to the next Step.

2print_checkMark();}?>Generate Android apk file

Click below button to generate android apk file now

render_invisibleForm(); }else{ ?>

You have completed this step

We sent your mobile app download link to your email id, please check your mail and install it on your android phone.
In case you did not receive any mail, Don't worry, just drop an email to us @ contact@androapp.mobi, we will be happy to help you.

And move over to the next Step.

3print_checkMark();}?>Configure Look and Feel and Other Settings

You have completed this step, However

Go to Look & Feel tab to change App Name, Logo, Colors and email id, you can also generate build from there again. Remember you have to upload a new apk to Google Play Store everytime, you make some changes in this section.

Go to Configure tab to change dynamic settings, like Menu Items, Image Preview options, Share Text options etc. These settings can be changed anytime, you don't really need to publish a new build everytime, just restart your app and browse, you will see the changes.

And move over to the next Step.

4print_checkMark();}?>Create /Google Messaging/Admob/Facebook Accounts

You have completed this step, However

Go to Account Settings tab and

  1. update Google Cloud Messaging for Android api key and project number for Push Notifications to work.
  2. update Facebook App ID for sharing
  3. Create Google AdMob account for monetizing your app and fill Ad id's.

And move over to the next Step.

5Publish Your App on Google Play Store

You need to create a new apk after Step 4, Go to Look & Feel section to create the new apk for your mobile app.
publish_do_page(); ?>

account_tab_key); $tagTextColor = $options[pw_mobile_app_settings::$tagTextColorKey]; $tagBgColor = $options[pw_mobile_app_settings::$tagBgColorKey]; $feedBgColor = $options[pw_mobile_app_settings::$feedBgColorKey]; $feedTitleColor = $options[pw_mobile_app_settings::$feedTitleColorKey]; $feedContentTextColor = $options[pw_mobile_app_settings::$feedContentTextColorKey]; $screenBgColor = $options[pw_mobile_app_settings::$screenBgColorKey]; $actionBarTitleColor = $options[pw_mobile_app_settings::$actionBarTitleColorKey]; $actionBarBgColor = $options[pw_mobile_app_settings::$actionBarBgColorKey]; ?> " value=""/> " value="" /> " type="color" value="" /> " type="color" value="" /> " type="color" value="" /> " type="color" value="" /> " type="color" value="" /> " type="color" value="" /> " type="color" value="" /> " type="color" value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="getstarted" />
build_option_name); $accountOptions = get_option($this->account_tab_key); $tagTextColor = $options[pw_mobile_app_settings::$tagTextColorKey]; $tagBgColor = $options[pw_mobile_app_settings::$tagBgColorKey]; $feedBgColor = $options[pw_mobile_app_settings::$feedBgColorKey]; $feedTitleColor = $options[pw_mobile_app_settings::$feedTitleColorKey]; $feedContentTextColor = $options[pw_mobile_app_settings::$feedContentTextColorKey]; $screenBgColor = $options[pw_mobile_app_settings::$screenBgColorKey]; $actionBarTitleColor = $options[pw_mobile_app_settings::$actionBarTitleColorKey]; $actionBarBgColor = $options[pw_mobile_app_settings::$actionBarBgColorKey]; $args = array( 'posts_per_page' => 5, 'offset' => 0, 'category' => '', 'category_name' => '', 'orderby' => 'post_date', 'order' => 'DESC', 'include' => '', 'exclude' => '', 'meta_key' => '', 'meta_value' => '', 'post_type' => 'post', 'post_mime_type' => '', 'post_parent' => '', 'post_status' => 'publish', 'suppress_filters' => false ); $postslist = get_posts( $args ); ?>

These settings go into your mobile app and can't be changed once you publish your app in android app store. You have to publish your app again, everytime you update these settings, so carefully fill these before generating the build.

This is just approximate html preview, without menu and share icons, we recommend to generate the build and test on device after basic settings here.
Application Name: Define application name (This is the name which will appear in play store).
" value="" onChange="document.getElementById('actionBarTitle').innerHTML=this.value;"; />
Site Url: Enter Your site url (most probably you don't need to edit it).
" value="" />
Application Icon: Upload a png image of 512x512 dimension.
Theme Colors: Action Bar background color: " type="color" value="" onChange="document.getElementById('actionBar').style.background = this.value;" />
Action Bar Text color: " type="color" value="" onChange="document.getElementById('actionBarTitle').style.color = this.value;" />
Screen Background color: " type="color" value="" onChange="document.getElementById('androScreen').style.background = this.value;" />
Feed Title color: " type="color" value="" onChange="changeTextColor('androPostTitle', this.value);" />
Feed preview text color: " type="color" value="" onChange="changeTextColor('androPostContent', this.value);" />
Feed background color: " type="color" value="" onChange="changeBgColor('androFeed', this.value);" />
Category title color: " type="color" value="" onChange="changeTextColor('tagTitle', this.value);" />
Category Background color: " type="color" value="" onChange="changeBgColor('tagTitle', this.value);" />
" value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="" /> " value="getyourapp" />
post_content); if(!empty($firstImage)) { ?>
"; ?>
post_title;?>
post_content))), 0, 115); ?>
ID); if($category[0]){ echo $category[0]->cat_name; } ?>

Email: We will send generated apk link to this mail id.

" value="" />
By clicking on the below button you agree to our Terms & Conditions.

">

Select JS files you want to include $src) { ?>
Handle Script src Action
Add>>
No enqueued files detected.

Please try visiting a few pages on your site and then refresh this page.

You should clear this list once in a while to get rid of files that are no longer being used as this is not done automatically.


Selected Scripts
Clear Script File List

Define custom css here for postprocessed content type
option_name); $scriptOptions = $this->scriptOptions; ?>

Note:- You can change all below settings at runtime (without any need to create new apk). You need to restart your app and browse few pages to see the change.

Select Menu: Select the menu to be used for mobile app, you may use the same menu as your website, or create a new menu specifically for mobile app.



Image Dimension: We fetch the first image from the post content and use it to show on the feeds pages(list pages like, category and home) on mobile app. Select the image dimension for the same.

" value="full" />Full Image (Fit to width)
" value="preview" />Preview (fit to width with limited height)
" value="noimage" />No Image (Image from the preview text will be visible, if any)


Preview Text Setting: Select which text to be used for preview on feeds(category and home page) in mobile app.

" value="excerpt" />Excerpt
$action, 'plugin' => $slug ), admin_url( 'update.php' ) ), $action.'_'.$slug );?> " value="seo_meta_desc" />SEO Meta Description( install and Activate Wordpress SEO plugin)
" value="none" />No Preview Text (only title will be shown)


Post Content: Select the post content type to use for your app, we suggest to select different options and test in on mobile app live.

" value="preprocessed" onChange="onPostContentTypeChange();" />Pre Processed content (shortcodes will be stripped, except caption, galley, audio, video, playlist and wp_caption)
" value="postprocessed" onChange="onPostContentTypeChange();" />Post Processed (all shortcodes will be processed, you might need to add js files specifically)
render_scripts($scriptOptions['scripts'] , $options[pw_mobile_app_settings::$selectedScripts], $options[POST_CONTENT], $options[pw_mobile_app_settings::$postProcessedCss]); ?> " value="loadurl" onChange="onPostContentTypeChange();" />Load from Url (It will open post page directly, you can modify CSS to hide some content, OR use isAndroAppRequest() method to check if it is a AndroApp Request.).
"> Modify below css for mobile app requests
Example to check if it is a AndroAppRequest
if(function_exists('isAndroAppRequest') && isAndroAppRequest()){
//Code to be called for AndroApp Requests(mobile app)
}
Example to check if its not a AndroAppRequest
if(!function_exists('isAndroAppRequest') || !isAndroAppRequest()){
//Code to be called for regular requests
}


Share Image: " value="first" />Use First Image
" value="noimage" />Don't use image for sharing(share only text)
Share Text: Select the text to be used for share via WhatsApp and other share intents(excluding Facebook).

Select the text to be used without image(when no image is available to share)

Select the text to be used with image
Share Suffix: Suffix Text " value="" /> Suffix Link
Share Function Name: Custom share text, you can overwrite above share settings for few posts using this method
" value="" /> define a method in your themes functions.php file, if this function returns empty string, we will use above share settings.
function getShareText($post, $link){
	return "Share Text ". via ".$link;
}
					
" value="1" />Do not share Image When This function returns something


Enable WP Super Cache for mobile app: If you are using WP Super Cache, you can enable it for mobile app requests as well.

You have to disable debugging option and display comments at the end option from Debug tab of WP Super Cache Settings page.
also uncheck Don’t cache pages with GET parameters. (?x=y at the end of a url) option


" value="1" />Enable


name)){ return $menu->term_id; } } return null; } function getToken($length) { $key = ''; $keys = array_merge(range(0, 9), range('a', 'z')); for ($i = 0; $i < $length; $i++) { $key .= $keys[array_rand($keys)]; } return $key; } function androapp_json_get_timezone() { $tzstring = get_option( 'timezone_string' ); if ( ! $tzstring ) { // Create a UTC+- zone if no timezone string exists $current_offset = get_option( 'gmt_offset' ); if ( 0 == $current_offset ) { $tzstring = 'UTC'; } elseif ( $current_offset < 0 ) { $tzstring = 'Etc/GMT' . $current_offset; } else { $tzstring = 'Etc/GMT+' . $current_offset; } } $zone = new DateTimeZone( $tzstring ); return $zone; } }