# Beta testing the iOS mobile app

**URL:** https://meta.discourse.org/t/beta-testing-the-ios-mobile-app/49662
**Category:** Development
**Tags:** feedback
**Created:** [September 3, 2016, 4:13am UTC](https://meta.discourse.org/t/beta-testing-the-ios-mobile-app/49662 "2016-09-03T04:13:10Z")
**Posts on this page:** 20
**Page:** 6

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [September 16, 2016, 8:37pm UTC](https://meta.discourse.org/t/beta-testing-the-ios-mobile-app/49662/123 "2016-09-16T20:37:46Z")

</div>

> [@johndbritton](#):
>
> Using it leaves me wanting more speed.

More speed on which device? iOS devices are _insanely_ fast compared to Android:

 ![](https://global.discourse-cdn.com/meta/original/3X/8/7/875f56fccb9e223fd1f8e003f4903c0218f80aee.png)

---

<div class="post-metadata">

### Author: ![johndbritton](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/johndbritton/32/118434_2.png) [@johndbritton](https://meta.discourse.org/u/johndbritton)
#### Post date: [September 16, 2016, 8:53pm UTC](https://meta.discourse.org/t/beta-testing-the-ios-mobile-app/49662/124 "2016-09-16T20:53:56Z")

</div>

> [@codinghorror](#):
>
> More speed on which device?

I’m on an iPhone 6S. It’s not so much the speed of the app that’s the problem, it’s the speed of the network connection. The time from when I click a site in the list to the site being loaded in the browser is too long. When I switch from one site to another and back, it requires a full reload.

I think it’d be nice if the app pre-loaded the Discourse sites and kept them in memory when switching between them rather than reloading the whole page each time.

---

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [September 16, 2016, 9:01pm UTC](https://meta.discourse.org/t/beta-testing-the-ios-mobile-app/49662/125 "2016-09-16T21:01:52Z")

</div>

Doubtful we can do anything about that at the current time. @eviltrout tells me when we upgrade from Ember 1.12 to Ember 2.9+ the load time will improve, though.

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [September 16, 2016, 11:00pm UTC](https://meta.discourse.org/t/beta-testing-the-ios-mobile-app/49662/126 "2016-09-16T23:00:35Z")

</div>

> [@johndbritton](#):
>
> it’s the speed of the network connection.

Well… that is only part of the problem, even when all the resources are cached I am counting 1.5 seconds from when I click on a site till I can see it on an iPhone 7. Feel free to multiply that number by 3-8 for Android speeds.

Our first render is expensive, and all you see is “white” until the site is ready.

@eviltrout will be looking at adding a “loading” state so you don’t just see white while stuff is loading, this should improve the experience a bit.

There are other things we need to explore which we will probably next year.  
I am super duper extra double reluctant to add any “mobile app specific” hacks to work around these kind of issues for a few of reasons.

- We need to focus on a faster / better experience on the mobile site. If the app cheats then we are throwing in the towel and forcing people to use an app which is against our interests. The app is a value add, not a replacement.

- We use Safari View Controller, which basically gives us a single API call “show website”. We can not “warm stuff up” on iOS 10, there are simply no APIs to load a page without it being visible.

- This pain is actually a reality check on the real experience we have, I think being aware of the problem is a good thing.

---

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [September 16, 2016, 11:11pm UTC](https://meta.discourse.org/t/beta-testing-the-ios-mobile-app/49662/127 "2016-09-16T23:11:42Z")

</div>

This also implies you’d have shared assets _between websites_, that is, one set of dependencies that can be pulled down a single time and re-used on `discuss.foo.com` as well as `talk.bar.org`…

---

<div class="post-metadata">

### Author: ![johndbritton](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/johndbritton/32/118434_2.png) [@johndbritton](https://meta.discourse.org/u/johndbritton)
#### Post date: [September 16, 2016, 11:15pm UTC](https://meta.discourse.org/t/beta-testing-the-ios-mobile-app/49662/128 "2016-09-16T23:15:36Z")

</div>

> [@sam](#):
>
> We use Safari View Controller, which basically gives us a single API call “show website”. We can not “warm stuff up” on iOS 10, there are simply no APIs to load a page without it being visible.

There’s also the case for jumping between multiple Discourse sites and keeping them in memory (much like tabs on a desktop browser).

You could potentially stick multiple Safari View Controllers in a parent controller that lets you toggle between the various sites without throwing out the page each time the user wants to switch between sites in the app.

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [September 16, 2016, 11:18pm UTC](https://meta.discourse.org/t/beta-testing-the-ios-mobile-app/49662/129 "2016-09-16T23:18:20Z")

</div>

I am not sure if this is technically possible, but will investigate at some point.

> [@codinghorror](#):
>
> This also implies you’d have shared assets between websites

This is a great point, and make me think, since our vendor.js only changes once every few months we could engineer it so it is shared between all our hosted sites.

---

<div class="post-metadata">

### Author: ![Tom\_Newsom](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tom_newsom/32/115981_2.png) [@Tom\_Newsom](https://meta.discourse.org/u/Tom_Newsom)
#### Post date: [September 17, 2016, 8:59pm UTC](https://meta.discourse.org/t/beta-testing-the-ios-mobile-app/49662/130 "2016-09-17T20:59:02Z")

</div>

Or even just cache it for each site. Check to see if the version number’s changed since last visit. If not, use the cached version of the client app.

---

<div class="post-metadata">

### Author: ![shaz](https://avatars.discourse-cdn.com/v4/letter/s/ba9def/32.png) [@shaz](https://meta.discourse.org/u/shaz)
#### Post date: [September 19, 2016, 5:40am UTC](https://meta.discourse.org/t/beta-testing-the-ios-mobile-app/49662/131 "2016-09-19T05:40:34Z")

</div>

Are you accepting new beta testers or did we miss the boat? Thanks.

---

<div class="post-metadata">

### Author: ![sipp11](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sipp11/32/104156_2.png) [@sipp11](https://meta.discourse.org/u/sipp11)
#### Post date: [September 19, 2016, 5:24pm UTC](https://meta.discourse.org/t/beta-testing-the-ios-mobile-app/49662/132 "2016-09-19T17:24:40Z")

</div>

I also love to try this out if you still need more testers.

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [September 20, 2016, 1:09am UTC](https://meta.discourse.org/t/beta-testing-the-ios-mobile-app/49662/133 "2016-09-20T01:09:42Z")

</div>

Invites are out, PM me if I missed anyone

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [September 20, 2016, 1:18am UTC](https://meta.discourse.org/t/beta-testing-the-ios-mobile-app/49662/134 "2016-09-20T01:18:55Z")

</div>

I just released very significant build.

As usual a big thank you to @joffrey\_jaffeux who got the “notification” feature in.

You now have a little 🔔 in the top right that allows you to view your notifications.

- New tab shows all new notifications across all sites you are tracking (new is defined as new since you opened the app, it is reset if you kick app to background)

- Replies, basically strips out likes

- All is everything across all sites

To support this change I needed to amend it so we request a **read/write** key as opposed to just a \*_read_ key. This means that you will need to re-authorize.

I fixed the “auth” sequences in a few ways:

- SSO login, google login etc all forward stuff properly to the auth screen, this was a great general fix to auth

- The app now clears the “connect” button a bit faster so it is less confusing.

If you wish to use the app with any of your sites you **must upgrade to latest** , a bunch of internal adjustments were required to support the notification window. For example, I needed to add an API to mark a notification read and clean up some internal bugs in Discourse.

Hope you enjoy the build, keep the feedback coming.

Note: we are pretty much **done** feature wise with the app till our public release. All that is left is polish and android notification collapsing.

---

<div class="post-metadata">

### Author: ![sman591](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sman591/32/121179_2.png) [@sman591](https://meta.discourse.org/u/sman591)
#### Post date: [September 20, 2016, 6:50am UTC](https://meta.discourse.org/t/beta-testing-the-ios-mobile-app/49662/135 "2016-09-20T06:50:26Z")

</div>

What can we do to get iOS notifications on individually-hosted communities?

I had started making almost this exact same application, and had actually started first with the notification part. [A lightweight middleman server](https://github.com/herrd/herrd-push-server) would forward notification requests to Apple’s (or Google’s) servers, therefore taking out the requirement of all Discourse instances to have private, global push notification credentials, and providing a layer to restrict to which communities & users they can notify.

Can something like this be provided? I’d be happy to dedicate time to it, or adapting my initial work to support it.

---

<div class="post-metadata">

### Author: ![riking](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/riking/32/170938_2.png) [@riking](https://meta.discourse.org/u/riking)
#### Post date: [September 20, 2016, 5:15pm UTC](https://meta.discourse.org/t/beta-testing-the-ios-mobile-app/49662/136 "2016-09-20T17:15:58Z")

</div>

Perhaps it would be a good idea to have something that looks like OAuth scopes?

So this app would request the `notifications` scope, “read and manage your notificaitons”, and have a `full` and `read_full` scope – the current default – for “full account access” for any applications we haven’t thought of yet.

~~Certain URLs, like `/session/current`, would be permitted with any / a blank scope list (identity is kinda a basic requirement, no need to restrict that).~~  
Actually, looking at the contents of that again, perhaps a `/session/whoami.json` is needed…

Would probably also want to silo off all `/admin` URLs into its own `admin` scope - so full permissions would be `full,admin`.

---

<div class="post-metadata">

### Author: ![henrikbg](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/henrikbg/32/57512_2.png) [@henrikbg](https://meta.discourse.org/u/henrikbg)
#### Post date: [September 20, 2016, 9:17pm UTC](https://meta.discourse.org/t/beta-testing-the-ios-mobile-app/49662/137 "2016-09-20T21:17:09Z")

</div>

Following startup, there’s a window that shows up and it says that no Discourse sites have been added (note that I already have sites entered prior to startup). That window then disappears and it shows the sites you’ve added. Personally, this is very noticeable and it would be great if there’s a blank window with a Discourse logo on it before the sites load.

I’ve created a video to better illustrate the issue.

https://www.youtube.com/embed/jyhTN7ghqZk?feature=oembed&wmode=opaque

iPhone 6 128 GB  
iOS 10.0.1 (14A403)  
Build 1.0 (11)

---

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [September 20, 2016, 11:20pm UTC](https://meta.discourse.org/t/beta-testing-the-ios-mobile-app/49662/138 "2016-09-20T23:20:48Z")

</div>

I am kind of unhappy this asks for what looks like FULL READ WRITE in permissions now. That is not a good feeling.. ☹

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [September 20, 2016, 11:27pm UTC](https://meta.discourse.org/t/beta-testing-the-ios-mobile-app/49662/139 "2016-09-20T23:27:40Z")

</div>

I can look at adding scopes per @riking’s suggestion to user api keys, so we ask for “read/write notifications” or something along those lines.

---

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [September 20, 2016, 11:29pm UTC](https://meta.discourse.org/t/beta-testing-the-ios-mobile-app/49662/140 "2016-09-20T23:29:49Z")

</div>

Yeah full read write is _terrible_. It’s gonna post as me? Also what does “write notifications” even mean? Is that app going to WRITE a notification?

I think what you want is

> Read and clear notifications

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [September 20, 2016, 11:34pm UTC](https://meta.discourse.org/t/beta-testing-the-ios-mobile-app/49662/141 "2016-09-20T23:34:59Z")

</div>

The actual technical permissions the app needs now are:

- Read current user details
- Access message bus (which is a read but technically a POST)
- Mark notification as read
- Read notifications list
- Reset max seen notification id

We can up with scopes that cover these kind of activities eg:

Discourse for iOS can:

- read/write notifications
- read private user information
- receive updates from site

This would actually be an improvement over the original state which allows global read cause we can be surgical.

It’s not too complicated of a change, and 99.9% servers side.

---

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [September 20, 2016, 11:36pm UTC](https://meta.discourse.org/t/beta-testing-the-ios-mobile-app/49662/142 "2016-09-20T23:36:48Z")

</div>

I _STRONGLY_ object to the wording “write notifications”.

That implies the app will send notifications to you in Discourse. Is that the case?

I vastly prefer

> Read / clear notifications

[Previous page](https://meta.discourse.org/t/beta-testing-the-ios-mobile-app/49662.md?page=5)

[Next page](https://meta.discourse.org/t/beta-testing-the-ios-mobile-app/49662.md?page=7)
