iOS Provisioning

@Eugene a few of my contacts have tried dynamic provisioning with iOS and failed. The provisioning bin file works fine on Android but not on iOS. It appears not to present them with their own WiFi network before the step of presenting them with the AP of the ESP.

Is your provisioning template the same as the one used for Android or do you have a slightly different one?

Actually on iOS dynamic provisioning starts with selecting the AP of the device. And we can’t do this within the app (like on Android) so we guide user to go to the phone’s Wi-Fi settings and connect to a Wi-Fi named “Your app name”. When we detect that phone’s connected Wi-Fi changed, we present user a second step - enter the details of the Wi-Fi network to send to the device…

So, where do they face a problem?

Of course.

1 Like

@Eugene perhaps I was misleading them a little because of the way it’s done with Android but they have tried every conceivable way.

If my firmware uses an AP name of Costas and they select an app name in My Apps of Eugene is that a problem i.e. do I need to ensure they call the My App Costas?

In Android it doesn’t matter what the names are as long as you select the AP of the ESP but obviously it makes sense to be consistent in the firmware and the App.

The AP name has to at least contain the app name. e.g “AppName” or “AppName 1” or “My AppName” should work.

1 Like

Thanks @Eugene

The actual AP name in the ESP is PeaceFairApp and I have lots of iOS screenshots from the “beta testers” showing this on their WiFi settings page.

As long as when they first set up My Apps they use a name of “PeaceFairApp” and select it at the appropriate time they will be taken to the next stage of entering their WiFi router details (SSID and PWD), right?

With this last part once they have clicked on PeaceFairApp do they manually close WiFi settings or will it close automatically and give them the next Blynk provisioning screen?


It won’t close automatically WiFi settings.
But we do a little trick here: although Blynk app is in the background at this moment, we still check if the phone’s connected Wi-Fi changes. At the moment we detect desired WiFi change, we throw push notification - usually it displays on phone’s top and when user clicks it - the Blynk app is brought back to front.

BTW, regarding AP name restrictions - we will be removing this on iOS, user will be able to select any WiFi network, same as on Android.


@Eugene confirming that using the correct “paired” name in My Apps works fine for iOS.

[347372] WiFi SSID: Gargoyle Pass: *************
[347373] Blynk cloud: xxxxxxd2a3f94b3exxxxb3d57ebfxxxx
[348567] Switching to STA...
[349840] Connecting to WiFi: Saphia
[354311] Disconnected
    ___  __          __
   / _ )/ /_ _____  / /__
  / _  / / // / _ \/  '_/
 /____/_/\_, /_//_/_/\_\
        /___/ v0.4.8 on NodeMCU

[354315] Connecting to
[354819] Ready (ping: 246ms).
[354927] Configuration stored to flash
[355401] Time sync: OK
1 Like

Eugene I’m trying out dynamic provisioning on IOS and getting all sort of weird issues I can’t seem to work out.
I have latest IOS app running. Couple of the issues described below:

My code is and setup is:

#define PRODUCT_WIFI_SSID             "plantwemos"  

I also create an app called “plantwemos”
I also create My App called “plantwemos”

Hardware: Wemos ESP8266 D1 mini

Question 1/Issue:
What I’d like to understand is that do any of these names for AP, app, MyApp matter i.e. do they need to have same names or subsets ?

Question 2/Issue:
When I click on “go to settings” it drops me into the “ALLOW BLYNK ACCESS PAGE” in IOS settings. I need to then manually move up the SETTINGS heirachy to Wifi. Is this a known issue ?

Question/Issue 3:
Then when I select the wifi e.g. “Plantdemo” I then correctly get returned back to the app via the notification popup.
However I cannot select any wifi access point … only one is populated. Is there no way for me to select others ? e.g. sometimes it picks a 5Ghz Wifi AP which my ESP cannot support.

Question/Issue 4:
When I select LOG OUT from “My App” and then select "“Create New Account” it simply just logs me back into the account I previously created i.e. does not allow me to create a new account. Is there a way I can create a new Account without having to create a new “My App” ?

Question/Issue 5:
On rare times it does work I receive the screen “Can’t connect Try starting over.”. I select “Close” and screen disappear and I’m in the working app.

Question/Issue 6:
Other times I get the following crash on setup:

[108645] Blynk cloud: 6e34c1be67e74ae882ad436897d2103d @
[108650] Switching to STA...

Exception (28):
epc1=0x40227273 epc2=0x00000000 epc3=0x40000f68 excvaddr=0x00000098 depc=0x00000000

ctx: cont 
sp: 3fff1440 end: 3fff1ad0 offset: 01a0

3fff15e0:  0000000c 00000014 3fff1640 00000000  
3fff15f0:  402216a4 3fff24fc 3fff3374 3fff2dd0  
3fff1600:  3fff2a62 00000000 3fff1a20 402046b8  
3fff1610:  3ffe8f34 00000000 3fff1a40 00000004  
3fff1620:  3fff2a62 40104456 3fff24fc 3fff2dd0  
3fff1630:  0000002a 3fff1f34 3fff24fc 401043d1  
3fff1640:  3fff2a2c 00333500 3ffee400 00000000  
3fff1650:  00000032 0000001c 3fff29bc 3fff1f69  
3fff1660:  3fff1f34 3fff1f34 3fff2a2c 4010453d  
3fff1670:  40215f1f 3fff2a2c 3fff2a62 40215f28  
3fff1680:  00000608 3ffea67e 3fff3374 3ffee1a8  
3fff1690:  00000002 00000000 00000020 3fff1f69  
3fff16a0:  3fff2a70 00000000 3fff2a2c 4021ba43  
3fff16b0:  3fff1f34 3fff1f69 3ffea67e 3ffea678  
3fff16c0:  00000001 00000002 00000000 3ffee1a8  
3fff16d0:  3fff399a 40104456 3fff24fc 3fff1d90  
3fff16e0:  3fff1f34 00000001 3fff29bc 4021bc2e  
3fff16f0:  3fff1f40 00000001 3fff3232 3fff2a00  
3fff1700:  3fff1f34 3fff1f40 3fff29bc 4021bde1  
3fff1710:  00000002 00000000 00000001 4010453d  
3fff1720:  40215f1f 3fff3964 3fff399a 3fff2a00  
3fff1730:  3fff29bc 3fff1f40 3fff1f34 4021bfac  
3fff1740:  ffff0000 00000000 3ffeabb1 3fff1dd0  
3fff1750:  00000014 3fff2e30 3fff29bc 4021c944  
3fff1760:  00000000 00000000 0000001f 40104ee9  
3fff1770:  3fff2e2c 000000ff 00000000 00000006  
3fff1780:  3fff1e8c 00000030 0000001f 00000000  
3fff1790:  00000046 00000014 3fff2e30 3fff29bc  
3fff17a0:  3fff1f34 3fff2a14 3fff2e30 4021c984  
3fff17b0:  3fff1f34 00000000 00000000 40218c5e  
3fff17c0:  fffffffc 00000000 00000000 4021c9aa  
3fff17d0:  3fff1f34 00000000 00000000 4021d0a3  
3fff17e0:  00001cb1 00000000 3fff2e30 4021a3e2  
3fff17f0:  3fff1f34 00000050 00000000 4021630c  
3fff1800:  3fff2e2c cc167ef9 000020fa 0000c001  
3fff1810:  3ffeaa65 401042c3 3fff2e2c 0000c001  
3fff1820:  3fff2e2c 00000000 00000001 40216a9a  
3fff1830:  00001cb1 cc167ef9 00000000 40101db2  
3fff1840:  40234df9 00000030 00000008 3fff1ef0  
3fff1850:  3fff1ef4 3fff1ef4 00000000 40216ac8  
3fff1860:  00000010 00000018 0000002b 40216b04  
3fff1870:  00000068 3fff1890 3fff1ef4 40216e6b  
3fff1880:  3fff19d7 3fff18c8 3fff1ef0 40219084  
3fff1890:  00000000 40101f8c 3fffc200 00000022  
3fff18a0:  3fff18c0 3fff18c4 3fff1ef0 402190d6  
3fff18b0:  00000000 00000000 3fff1ef0 40215de7  
3fff18c0:  00000000 00000000 00000000 ffffffff  
3fff18d0:  00000000 00000000 00000000 000005dc  
3fff18e0:  60000200 08000000 08000000 3fff1a24  
3fff18f0:  3fff1a20 3fff328c 3fff328c 40232d44  
3fff1900:  000005dc 3fff20a4 00000041 00000002  
3fff1910:  00000000 00000000 00000000 ffffffff  
3fff1920:  00000002 3fff1a28 00000010 3fffd85c  
3fff1930:  3fffc278 40101f8c 3fffc200 3fff1a20  
3fff1940:  3fff1a24 3fff1a28 3fff328c 40232dfa  
3fff1950:  3fff19b0 40234fb2 3fff4314 3fff328c  
3fff1960:  3ffefc9c 3fff0aa0 3fff20a4 3fff1a24  
3fff1970:  3fff1a20 3fff248c 3fff328c 40232d05  
3fff1980:  40232ff0 4000444e 3fff19b0 3fff19b0  
3fff1990:  00000008 00000016 00000016 3fff0aa0  
3fff19a0:  3fff19b0 3fff1a28 00000008 40237faa  
3fff19b0:  00000010 40237f95 000000c4 3fff1a20  
3fff19c0:  3fff1a24 3fff1a28 3fff328c 40232dfa  
3fff19d0:  3ffefc9c 3fff328c 3fff4314 401004d8  
3fff19e0:  3fff0900 4021e11e 00000001 3fff0aa0  
3fff19f0:  3ffefc9c 3fff328c 3fff4314 402352fe  
3fff1a00:  40232ff0 00000069 3fff3690 00000000  
3fff1a10:  000000d4 000002d4 3fff3e74 4021e1ed  
3fff1a20:  00000000 00000000 00000000 3ffefcae  
3fff1a30:  402259ef 3fff4314 00000000 3fffdad0  
3fff1a40:  3ffefcae 40236d85 00000001 00000000  
3fff1a50:  40236ef3 00000001 00000001 40236ea7  
3fff1a60:  3ffefce0 00000000 00000001 3fff3e74  
3fff1a70:  40236fb6 00000001 00000000 00000000  
3fff1a80:  40205375 000003e8 000003e8 402013e3  
3fff1a90:  3fffdad0 00000000 3fff074c 40203197  
3fff1aa0:  00000000 00000000 3fff0a99 40204ad5  
3fff1ab0:  3fffdad0 00000000 3fff0a99 4020d788  
3fff1ac0:  feefeffe feefeffe 3fff0ab0 40100710  

 ets Jan  8 2013,rst cause:2, boot mode:(1,6)

 ets Jan  8 2013,rst cause:4, boot mode:(1,6)

wdt reset



Not sure what you mean. After getting back to the app you should enter network name (ssid) and password which you want to pass to the device. It is a text input field where you can type whatever you want if the proposed not good for you.

I’ll look into this, but as far as I remember - no, each App Preview inside Blynk app is tied to the one and only imaginary account.

Most of the times, it means that although the provisioning itself went well, the app couldn’t connect to the server to check if the provisioned device went online. It could be, for example, because the internet connection on your iPhone wasn’t established back fast enough (after provisioned device dropped its AP).

BTW we’re working on a slightly improved UI of provisioning which will have a better process/errors explanations.

thanks for taking the time to respond.
my remarks below in mars

Not sure what you mean. After getting back to the app you should enter network name (ssid) and password which you want to pass to the device. It is a text input field where you can type whatever you want if the proposed not good for you.

[mars: ok, I thought it would work like Android app which has a dropdown so you can pick from others if the selected option is not suitable, which is a much better experience for end-user]

I’ll look into this, but as far as I remember - no, each App Preview inside Blynk app is tied to the one and only imaginary account.

[mars: ok this is not clear how it works or how it would work in real life for published apps. I’d like to really understand the full user experience before i PUBLISH, I know there is a document from @pavel but I think it needs more details and need to explain clearly the workflow differences between IOS and Android. my example scenario is:

  • end user at a rental home links h/w to wifi AP and creates account
  • end user leaves rental home and a new family arrives. How do I ensure the new family member can now re-create a new account such that the old end-user can no longer access. I assume the process of going through the new CONFIG process will create a totally new AUTH code and therefore the old end-user can no longer access device.]

[mars: awesome, looking forward to i ;-)]

Agree. Moreover, we understand the importance of provisioning for business apps and eager to make as simple as possible. We’d love to make iOS provisioning process exact the same as on Android - but all the differences are due iOS api limitations, which Apple believes is the right thing to do: apps can’t connect to or even get a list of available networks…
On previous iOS versions we could at least send user right to the system’s Wi-Fi settings page, but unfortunately Apple restricted that and, like you mentioned above, always lands you to the app-specific settings page. Thus, working on the updated provisioning UI, we’ll have nothing left but to instruct user to manually go to system’s Wi-Fi settings.

In Blynk App Preview the login page mimics user registration/login, just for better overall UX preview. App Previews don’t handle accounts management.
Of course, in in real app you have real registration/login happening.

Correct. Dynamic provisioning basically means sending SSID, PSWD and Blynk AUTH to the device.

Thanks for your responses. makes it’s more clear.