FEATURE: Native app banner improvements

FEATURE: Native app banner improvements

This commit adds some improvements to native app banners for iOS and Android

  • iOS and Android now have separate settings for native app banners

  • app banners will now only show for users on TL1 and up

  • app ids are now in a hidden site setting to allow sites to switch to their own app, if desired

  • iOS only: the site URL is passed to the app arguments

diff --git a/app/controllers/metadata_controller.rb b/app/controllers/metadata_controller.rb
index c508df5..e7d16a5 100644
--- a/app/controllers/metadata_controller.rb
+++ b/app/controllers/metadata_controller.rb
@@ -51,13 +51,13 @@ class MetadataController < ApplicationController
 
     manifest[:short_name] = SiteSetting.short_title if SiteSetting.short_title.present?
 
-    if SiteSetting.native_app_install_banner
+    if current_user && current_user.trust_level >= 1 && SiteSetting.native_app_install_banner_android
       manifest = manifest.merge(
         prefer_related_applications: true,
         related_applications: [
           {
             platform: "play",
-            id: "com.discourse"
+            id: SiteSetting.android_app_id
           }
         ]
       )
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 69d1979..a541086 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -325,6 +325,10 @@ module ApplicationHelper
     request.env[ApplicationController::NO_CUSTOM]
   end
 
+  def include_ios_native_app_banner?
+    current_user && current_user.trust_level >= 1 && SiteSetting.native_app_install_banner_ios
+  end
+
   def allow_plugins?
     !request.env[ApplicationController::NO_PLUGINS]
   end
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb
index e12c493..092d291 100644
--- a/app/views/layouts/application.html.erb
+++ b/app/views/layouts/application.html.erb
@@ -46,8 +46,8 @@
     <%= render_google_universal_analytics_code %>
     <link rel="manifest" href="<%= Discourse.base_uri %>/manifest.webmanifest" crossorigin="use-credentials">
 
-    <%- if SiteSetting.native_app_install_banner? %>
-        <meta name="apple-itunes-app" content="app-id=1173672076">
+    <%- if include_ios_native_app_banner? %>
+        <meta name="apple-itunes-app" content="app-id=<%= SiteSetting.ios_app_id %>, app-argument=discourse://new?siteUrl=<%= Discourse.base_url %>">
     <%- end %>
 
     <%= render partial: "common/discourse_stylesheet" %>
diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml
index bf274cc..24e0147 100644
--- a/config/locales/server.en.yml
+++ b/config/locales/server.en.yml
@@ -1892,7 +1892,9 @@ en:
 
     topic_page_title_includes_category: "Topic page title includes the category name."
 
-    native_app_install_banner: "Asks recurring visitors to install Discourse native app."
+    native_app_install_banner_ios: "Displays DiscourseHub app banner on iOS devices to regular users (trust level 1 and up)."
+
+    native_app_install_banner_android: "Displays DiscourseHub app banner on Android devices to regular users (trust level 1 and up)."
 
     share_anonymized_statistics: "Share anonymized usage statistics."
 
diff --git a/config/site_settings.yml b/config/site_settings.yml
index 3c45ced..86ae8b3 100644
--- a/config/site_settings.yml
+++ b/config/site_settings.yml
@@ -1826,7 +1826,17 @@ uncategorized:
     default: true
     client: true
 
-  native_app_install_banner: false
+  native_app_install_banner_ios: false
+
+  native_app_install_banner_android: false
+
+  ios_app_id:
+    default: "1173672076"
+    hidden: true
+
+  android_app_id:
+    default: "com.discourse"
+    hidden: true
 
   pwa_display_browser_regex:
     default: "iPad|iPhone"
@@ -1913,7 +1923,7 @@ user_preferences:
       - normal
       - larger
       - largest
-  
+
   default_title_count_mode:
     type: enum
     default: notifications
diff --git a/db/migrate/20190417135049_migrate_native_app_banner_site_setting.rb b/db/migrate/20190417135049_migrate_native_app_banner_site_setting.rb
new file mode 100644
index 0000000..57423a7
--- /dev/null
+++ b/db/migrate/20190417135049_migrate_native_app_banner_site_setting.rb
@@ -0,0 +1,20 @@
+class MigrateNativeAppBannerSiteSetting < ActiveRecord::Migration[5.2]
+  def up
+    execute "INSERT INTO site_settings(name, data_type, value, created_at, updated_at)
+             SELECT 'native_app_install_banner_android', 5, value, now(), now()
+             FROM site_settings
+             WHERE name = 'native_app_install_banner'"
+
+    execute "UPDATE site_settings
+             SET name = 'native_app_install_banner_ios'
+             WHERE name = 'native_app_install_banner'"
+  end
+
+  def down
+    execute "UPDATE site_settings
+             SET name = 'native_app_install_banner'
+             WHERE name = 'native_app_install_banner_ios'"
+
+    execute "DELETE FROM site_settings WHERE name = 'native_app_install_banner_android'"
+  end
+end

GitHub sha: 7cd62177

2 Likes