Adding a simple alexa skill, doable in time? getting started with alexa - alexa

I have some devices I want to give my clients. E.g. they take it home.
basically I want them to be able to ask the device like an echo dot:
Ask MYAPP, what song is Number One
Ask MYAPP, what song is Number Two
.. etc
and then it reads the name of a song.
My question is: I have never worked with alexa or amazon service.
How long will it take to get it certified?
Do i need to get it certified?
is there an issue with playing a song?
I don't own a device, can I test it well enough without owning one?
is the alexa skill api easy and I get this done rather quickly or is it difficult to get started?
what's a good place to help get me started? i quickly looked at creating a skill set and the procedure seems heavy weight. Is there maybe a forum or some chat where the gurus hang out?

How long will it take to get it certified? - Once you submit the app it will take max 7 business day to get certified (Most of my apps certified in 2 days) - Please read here for certification checklist
Do I need to get it certified? - Yes, it should get certified for your app to be available on Amazon Alexa skill store. If it is not in skill store then other people cannot download to their device and will be available only in your account. To test app you don't need certification as you can try it from your Amazon account
is there an issue with playing a song? - You can play any audio files but current limit of audio file is 90 seconds. Please read more here
I don't own a device, can I test it well enough without owning one?- You don't need a device to test it. You can use echosim - https://echosim.io/ to test your app. Alternatively you can use Raspberry PI as you can enable Raspberry PI as an Alexa enabled device
is the alexa skill api easy and I get this done rather quickly or is it difficult to get started? - It is very easy to do. trust me I have learned and created an app in a week or so
what's a good place to help get me started?- First you need an Amazon account ( I believe you already have). Please find below links for simple end to end samples,
https://developer.amazon.com/alexa-skills-kit/alexa-skill-quick-start-tutorial
https://developer.amazon.com/blogs/post/Tx3DVGG0K0TPUGQ/New-Alexa-Skills-Kit-Template:-Step-by-Step-Guide-to-Build-a-Fact-Skill
There are couple of courses available in Udemy as well

Since this question is referred as related to some current #alexa-skill questions, I like to give some updates to the different points where Amazon has improved the Alexa environment within the 5 years after the initial answers:
Do I need to get it certified? Beside publishing a skill to all Alexa users, there are some other possibilities. You could add further users to your account (but be aware then they see all skills and depending on the roles might also do changes). Another option on skill level access is beta testing, but this is very limited. Last option is Alexa for business, where a skill can be distributed to devices of an organization - this is quite complex, but offers additional context and the option to limit accessibility of the skill to just the organization.
is there an issue with playing a song? besides integrating the audio in SSML, you have the Audio Player Directive, but be aware, that while your audio length has no limits, you leave the skill session. With Alexa Presentation Language Audio (APL-A) you keep the dialog session and have more audio capabilities as on SSML, but still face length limits. Staying inside the skill while not having audio length limits is possible when using APL (Video-)Player component with size 0, but this limits your skill to screen devices.
I don't own a device, can I test it well enough without owning one? The previous answer is not valid, since echosim.io is offline since April 5, 2021. But nowadays the development console has a very good simulator. Additionally you can use a local simulator with Visual Studio Code & ASK Toolkit
testing
is the alexa skill api easy and I get this done rather quickly or is it difficult to get started? In the last view years, Amazon extended the options on how to build & host a skill. With Alexa-hosted you do not need to care about AWS and connecting Alexa cloud with AWS or your own hosting solution and make use of all Skill features. If you need a simpler logic, you could use Alexa Blueprints, which covers the logic and you just provide the content (if you found a matching blueprint for your needed logic) - btw this is also an additional option for the certification question, since a blueprint is normally just for your account and you can share your blueprint instance with others, too.

Related

How do I localise my message when gathering consent with Google Founding Choices for GDPR in the EEA?

In order to be GDPR compliant and work with Admob mediation (in Europe), I need to implement a consent management platform (CMP) in my mobile apps (iOS and Android).
Here is the complete list of TCF/IAB compliant CPMs: https://iabeurope.eu/cmp-list/. According to me, Google Founding Choices seems to be a good solution. Reason? It's free.
After playing a bit with the new Founding Choices console, it seems that it is possible to create messages in different languages and to trigger them in the app to collect user consent, which is good. Nevertheless, only one message can be active at the time (!?)
As you can see on the image below (this is screenshot of my Google Funding Choices console), I duplicated the message in 3 different languages but only one can be active at the time, so I do not understand...
If you have any clue on how to localise the message based on the locale of the user device, it would be helpful :-)
Thanks!
Since December 2020, it is possible to localise a message with Funding Choices. An update of the SDK may be needed, but that functionality in now available.

What Blockchain projects run in native mobile apps & What are the challenges in implementing it?

I am looking for the list of blockchain projects which are implemented in mobile apps natively. If you can find some, please point me to the list. If not, please let me know why there are no much blockchain projects implemented in mobile natively. Could it be due to performance, gas cost, complexity etc?
There are many risks that you as mobile app developer need to take care of when you ship your DApp in a form of mobile application.
1: Security - building your own app for blockchain means you have to built key management by yourself.
In current state of DApp, we have MetaMask, Cipher browser, Status browser, Trust browser and many others. The main problem that they're trying to solve is account management, the private key management, recovery process & good UX.
All of these need to be taken care of by yourself if you want allow your users to sign up for an account aka creating private key and store it securely in the phone. If hackers managed to reverse engineer and exploit your mobile app, they will be able to crack down the private key vault (the place where you store the private keys for your customers in their phones). You are screwed.
MetaMask and the gang above have experts that know what they are doing and always put security as their main pillar in the engineering process. Apart from that, they also have design team that always come out with better UX ideas so that everyone can adopt blockchain easily.
Bottom line, if you have security and design experties in your team that know well how to handle the key management, recovery process (mnemonic/seed phrases) & etc, it's probably a good idea to build your own inside your mobile app. Otherwise, I strongly recommend you just build web DApps and leverage MetaMask or DApp browsers above.
2: Trust - the idea of blockchain itself it to make everything decentralize and transparent. When you build a mobile app for your DApp, means you making it centralize. Your solution lives somewhere, in a server.
You will be relying on Apple and Google everytime you want to push app updates. Imagine you are an iOS developer and Apple is taking very long time to review and approve your app update submission? There's nothing much you can do because you are in centralized/close loop environment.
If you make it as web based DApp, you can deploy your DApp updates at any time you want. In addition to that, you also can host it to IPFS or Swarm to make it really decentralized application.
The beauty of not making it as a mobile app here is, your users can browse the code because all they have in their browser are static files; HTML, CSS and JS. Your users can tell if you are doing something bad in your code. Because they can right click on your web DApp and see the page source.
But if you are doing this as mobile app, your users can't really know what is 'behind' the app and you will find hard times to convince them later that they are in a good company.
3: Development - Web3JS is the most popular and stable project right now. It acts like a bridge layer between your DApp UI and the blockchain. And of course, it's written and needs to be implemented in JS.
Even now we started to see Web3 has been ported out to many other flavors i.e. for Swift and Kotlin, they are still new. Means, you will spend a lot of man hours later trying to debug and solve issues that only less people know to help/fix it.
To share my experience, I'm a Rubyist and there are some Web3 flavors for Ruby now. But, from what I've tested, they are still far from perfect and stable and at last, I decided to port everything to Web3JS for front-end components and Go for back-end. components.
FYI, the Ethereum Geth client is written in Go, check-out go-ethereum project. That means, everything that you need to do later i.e. creating transaction, signing transaction, querying blocks/transactions, creating/retrieving private key & etc has been tested and being used in real production. At any time when you are stuck, you can go ahead, read the source code of go-ethereum to learn how they do specific thing (the list above).
I'm not going againts all these new flavors. What I'm trying to tell you here is, it's going to take time for all this new flavors to get matured and stable enough. My advice for you now, if you want to do DApp, use Web3JS. If you need some back-end work (your centralized server <> blockchain), use Go.
I hope this helps!

How to raise security for my Unity project?

In a nutshell, my project consists of:
A secure RESTful API web service (hosted on Heroku), handling requests/responses for a database. It accepts & returns JSON data
A Unity desktop application, which doubles as a Twitch API chat bot, and communicates with the webservice to update the state of the game, as well as the state of the database.
IMPORTANT: This game is meant to be run by Twitch streamers, and played by users in Twitch chat
So my question is... Even though my web service is secure, what can I do to ensure that someone won't simply reverse engineer my Unity application to figure out how to properly communicate with my web server?
Encrypted HTTP traffic stops packet sniffing, but is a moot service if you can still use the same methods the application uses to interact with the data. Perhaps I'm being too paranoid, but there are plenty of tools out there that specifically target Unity & C# projects, so it really wouldn't take much effort.
One idea I had was to use the Twitch API to check if the user is actively streaming the game, and only allow them to start the game if the web service can't find a duplicate IP address in the database with an "isStreaming" flag set. This works in theory... but in practice, anyone can set up a fake Twitch account and a fake or "blank" stream on their machine, and then run some reverse-engineered code from the game.
Is there anything else I could do to minimize a hacker's ability to interact with my database?
The Simple Answer
Unity-compatible Code Obfuscation
Thanks to Unity's plugin system, there are actually some decent options for this. Some are paid options that exist in the Asset Store, as well as some 3rd party paid/free options that are simply unrelated to Unity (but could still work). Some of the free options, such as ConfuserEx, are also open source, allowing you to make custom code changes to how your work can be obfuscated.
The More Complex Answer
I made a simple C# Class Library and filled it with some pointless functionality (for testing)
I compiled a release build of the library
I obfuscated it through ConfuserEx using Aggressive settings (Maximum settings had Unity spitting out Invalid IL code errors)
I added an Assets/Plugins folder to my Unity project, and placed the compiled library there
I created a new C# script to test the library from within Unity
... And although the decompiled code was unintelligible, it still worked as expected within Unity. I used an IL/C# decompiler tool (such as JustDecompile) to compare the differences between the obfuscated binary and the original binary.
So if I really wanted to, I could follow these very same steps for all of my important bits of code (or even for the majority of my client project), as well as implementing any aforementioned security measures... And so hopefully, it's now going to be too much of a chore for anyone to understand the inner-workings of my project.

in-app A|B Testing for Mobile

Is there a good solution for A|B Testing in mobile apps like online? I know with iOS it's against the TOS to have different user experiences with identical actions, but what about Android? And what about firms like Apsalar which claim to offer A|B Testing in their analytics for apps? How would one implement that?
Artisan mobile makes an A/B testing solution for iOS and Android.
The basic idea is that you drop the SDK in your app and then put it out in the app store. You can use the service to create A/B tests and optimize your application without having to touch the code or go back through the app store for each test.
For mobile apps, A/B testing basically works by replacing static, hard-coded objects with dynamic objects that can be controlled from a remote server.
This methodology raises a potential performance issue: What if the end user's device is not connected to pull configuration data for an object being tested? We've built Splitforce (http://splitforce.com) to seamlessly setup and manage A/B testing in mobile apps while controlling for performance risk.
Los details
Once the SDK and experiment has been integrated, non-technical product or marketing folks can setup new tests or tweak existing tests on-the-fly - without having to resubmit to the app stores or hassle engineers.
On first app launch, the mobile app requests configuration data from the server and then caches that data locally on the device. This is to both ensure a consistent user experience on subsequent app launches, and prevent corrupt test results by guaranteeing accurate attribution of conversion events to variations.
If the end user's connection fails or is timed-out on first app launch, the library displays a hard-coded 'default' variation. And to make sure that everything is looking good before you go live, we've built a 'shake to preview' functionality in debug mode that does just that :-)
Once the app is deployed with Splitforce event data are stored locally and sent back to the website to be displayed for each variation alongside measurements of observed improvement and statistical confidence.
Instructions on integration of the SDKs and new tests can be found at https://splitforce.com/documentation.
And how is it used?
We've seen Splitforce used to A/B test:
UI elements + layouts (color, text, images, ad/menu placements)
UX workflows
Game dynamics + rules
Prices + promotions
We've also seen the tool used to control mobile apps remotely, by essentially setting one variation of a test subject to 100%.
Yes there is: E.g. the company Leanplum offers a Visual Interface Editor for iOS and Android: This requires no coding, and Leanplum will automatically detect the elements and allow you to change them. No engineers or app store resubmissions required.
Apple must have updated their TOS (https://developer.apple.com/app-store/review/guidelines/#user-interface) - At least I am not aware of anything that prohibits altering the UI in a way that the Leanplum Visual Editor is doing it.
Generally that is achieved by method swizzling (iOS) and reflection (Android).
To learn more about the Leanplum Visual Interface Editor, check out leanplum.com. They offer a free 30-day trial.
(Disclaimer: I am an Engineer at Leanplum.)
I wrote a small open source project called Switchboard.
It let's you A/B test, remote configure and stage rollout things in your native mobile app. It contains a server component that specifies what information the application should have and 2 native clients for android and iOS.
You can find the codebase at github.com/keepsafe/switchboard and a blog post about how you can use it HERE
The new kid around the block is Arise.io. They provide an A/B testing service for iOS and Android.
I wrote MSActiveConfig, an extremely flexible framework to do remote configuration + A/B testing on iOS, with a portable format to be able to implement clients on other platforms: https://github.com/mindsnacks/MSActiveConfig.
This framework is being used in applications with more than 5 million users.
There have been a spate of new entrants in this field...you could check out Swerve, Appiterate, leanplum...all of them seem to be having SDKs for iOS as well, not really sure whether and how Apple TOS allows for that, but since there are some many of them doing it, there must be a way.
Yes, new entrants are showing up in app A/B testing practically every week! But, I think Appiterate has gone two steps ahead of other competitors by creating a visual interface, without any need to re-write code. I have seen their platform (you can ask for an invite. I got a demo within 12 hours) and believe me, it is actual WYSIWYG that they are providing.

Need help understanding chat, XMPP, jabber id's, etc

I'm creating a mobile app that runs on iOS, Android, BB and Win7. It's a location-based app and you can join groups and then be able to see the location of other members of the group. That's all fine and good. I'm currently using GAE to manage the groups.
Now I'd like to add the ability for members of the group to chat with each other. No 1-1 IM but 1-many chat room. So when you've accessed a certain group in the app, you can type a message and all other members of that group will be able to see your message. I started down the road of mobile push (APNS, C2DM, etc) but thought there had to be a better way. I only want the messages coming in if the app is actually running anyway, so the important part of mobile push is not important in this case. But I of course don't want to poll either.
So I started looking into XMPP and it seems like the right solution, but I'm new to this technology. I don't want the user to have to already have, or create some online IM presence with some service of his choice. I'd like to just have a "Username" pref in the mobile app and that's all he ever needs to do.
So that's where I really need some help. Can I programatically create a chat room somewhere and ids for the users of the group? Would I need to host my own XMPP server (which I understand will not work with GAE).
Or am I just of course altogether than there's a better solution?
Thanks very much for any help.
Warren
I use QuickBlox.com as a back-end for my application. It has built-in Chat module based on XMPP and also a Messages module which can help you to send cross platform pushes to iOS, Android and WP7.
By the way, chat module supports groups in MUC (multi user chat) and they also have a sample to integrate the chat into our app.
Check http://hosted.im/ there is free plan (5 users) at least you can test it.
Regarding XMPP implementation, you can do what you want but you will need to run your own xmpp server
Servers:
ejabberd
openfire
jabberd
jabberd2
tigase
I don't know if GAE support extension I can't help you here.
Hope this help a little bit.
even the question is little bit old i think this will be useful for other techbees.. :)
You can use Quickblox as your server with registering with them they have different plans for users including free plans.
Also if you want you can maintain your own server.
aSmack is good library for implementing XMPP for android. You can get both the jar and source from the aSmack site. just google it.
But from my own experience its a little bit tough to implement the Multi user Chat..

Resources