Publish two versions of the same app using Google iFrame - android-management-api

We have been using Android Management apis and integrated an iFrame to publish private apps to profiles and groups. Is there any way we can publish two versions of the same app? e.g. one versions for test group and when it gets approved then push it to production group.
The problem we are facing right now is that whenever we push an update, the app gets updated on both the groups.

No, the play store won't allow a second app with the same packageName to be uploaded, an error will be thrown stating that packageName already exists
This applies to any google play store, if you uploaded the APP on private play store, you cannot upload it on the public play store and vice versa.
Now for the problem you are facing, you can use a workaround :
Set "appAutoUpdatePolicy": "NEVER" in the policy so that the APP doesn't get automatically updated.
Push updates by specifying the minimumVersionCode in the policy of the application and send it out to the devices or groups that you want the APP to be updated.
{
"packageName": "com.example",
"aliasName": "Silverline MDM Client",
"installType": "REQUIRED_FOR_SETUP",
"lockTaskAllowed": false,
"defaultPermissionPolicy": "DEFAULT",
"minimumVersionCode" : "36"
}

Check this link to set up an open, closed, or internal test for your app. This way, you can let your testing team test and review the app before releasing it to production. It is also possible to add testing tracks to a private app in the managed play iFrame through the advanced edit functionality mentioned here. You can refer to the sample policy below on how to install test track app using its trackId.
{
"packageName": "com.sample.testtrack",
"installType": "FORCE_INSTALLED",
"accessibleTrackIds": [
4699274789592568069
]
}

Related

Teams Toolkit HelloWorld chat bot - Failed to send

I’ve just downloaded Teams Toolkit onto VSCode and used the plugin to create a Command Bot project. Completed all the prerequisites and configurations on my tenant (I’m the admin for our 365 business account)
Everything installs great.
I hit f5 to launch the debugger.
All prerequisite checks pass.
Chrome opens
I can [Add] my local debug bot into the web app version of teams
I go to send any message OR the helloWorld command that comes with the template app and it gives me “Failed to send message” error.
When I hit F12 to bring up the Chrome dev tools and go into the network tab to see the call that is being sent, I see and Error as the response payload: errorCode 201 errorSubCode 1 with the message “One or more of the user ids provided are not valid."
Payload:
{
"members": [
{
"id": "8:orgid:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"role": "Admin"
},
{
"id": "28:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"role": "Admin"
}
],
"properties": {
"threadType": "chat",
"chatFilesIndexId": "2",
"uniquerosterthread": "true",
"fixedRoster": "true"
}
}
Response
{
"errorCode": 201,
"message": "One or more of the user ids provided are not valid.",
"standardizedError": {
"errorCode": 201,
"errorSubCode": 1,
"errorDescription": "One or more of the user ids provided are not valid."
}
}
I haven’t written any custom code or made any changes. Just trying to launch the bot straight from Toolkit creation.
I've also tested the ngrok session that is connected to make sure that communication back to me is working fine. I see logging when I try to hit the ngrok url so I feel this is a failure at the point of Teams trying to send to their API.
I’ve followed all the steps in the documentation regarding setup. I would appreciate any help anyone would have on this.
Thank you
This is probably caused by incorrectly bot identity used in Teams channel registration in Bot Framework. Not quite sure what happen when calling the bot framework service to do the bot registration herre.
You can check if your App ID and password is correctly in Bot Framework registration:
The bot credentials in .fx configs:
The app password can be decrypted from local.userdata
To resolve this, could you please try one of the following solutions:
Create a new Command Bot and run F5 again.
Or, you can delete the local.userdata and state.local.json files in your current project. And then re-run F5, the toolkit should create a new AAD app for your bot registration in this case.

CodeMagic Error, can't publish to google store

It's my first time linking with codemagic, and I'm trying to link my GitHub to the store, then I have received this error,
Publishing failed :| Google Play failed to upload artefacts. The caller does not have permission: { "error": { "code": 403, "message": "The caller does not have permission", "status": "PERMISSION_DENIED" } }
I think the permission for the service account to access your application is not properly set up.
I would pay very close attention starting from the 8th point in this tutorial:
https://docs.codemagic.io/knowledge-base/google-play-api/
However, I also think that sometimes Google takes some time to get it going, in any case, I would retry creating the service account and paying very close attention to all the details - make sure the service account has access to the right application (also check your bundle id in your local settings etc).
Based on the CodeMagic documentation:
https://docs.codemagic.io/flutter-publishing/publishing-to-google-play/
It seems that the first time required to upload the AAB manually to the Google Play Store.
The very first version of the app must be added to Google Play
manually. You can download the app_release.aab from the build
artifacts. In addition, each uploaded binary must have a different
version; see how to automatically increment build version on
Codemagic.
In my case I've forgotten to invite service account as user in Google Play Console.

How can I turn my bot into a MS Teams app

I made a normal bot by using Microsoft Bot Framework and has deployed it to the Azure portal.
How can I possibly make it a Teams app other than channeling to Teams, for example, make it a Teams app package.
I checked some sample code on Github and noticed that general bots are a bit different from Teams bots, for example, general bots extend ActivityHandler but Teams bots extend TeamsActivityHandler. May I ask how can I turn my bot into a Teams app? Do I need to alter the code of the bot I made a lot?
Thanks
With a few exceptions, you don't really need to make changes to your bot code to deploy to Teams channel. However, I do think there are a few things you should be aware of and consider in your development. First of all, I'm going to assume you have or know how to turn on the channel from the Bot Service. Once you have done that, you can test your bot in Teams without even creating a Teams app by pasting the Microsoft App ID into the chat To: field (obviously it's not recommended to share this ID for general testing).
The main change you probably need is to remove mentions. These will mess with QnA Maker and/or LUIS as they are included in the query string. I have been doing this as the first step in the onMessage handler. My current bots use regex for this, e.g.
if (context._activity.text) ( // Make sure there is activity text before trying to replace
context._activity.text = context._activity.text.replace(/(#|<at>)((Bot Name)|(Teams App Manifest Name))(<\/at>)? ?/g, '');
}
However, I have also seen that the TurnContext object can do this via TurnContext.removeRecipientMention(context.activity); I've not actually tried that myself, though. If it works it would be very helpful in case you find yourself changing bot names as I have done in the past...
The other main change I made to my bots was creating Teams-specific adaptive cards with menu buttons. By default, Action.Submit will work for web channels but NOT Teams channel. A typical action would look like
{
"type": "ActionSet",
"actions": [
{
"type": "Action.Submit",
"title": "Get Order Status",
"data": "Get Order Status"
}
]
}
But Teams can't handle this and will error out on button click (at least when using standard Activity handler, not sure if it is the same if using TeamsActivityHandler.) Instead, you should check the channel before displaying cards with Action.Submit actions and display an alternative card instead. For example
if (context.activity.channelId == 'msteams') {
var welcomeCard = CardHelper.GetMenuCardTeams(welcomeMessage,'Y','Y');
} else {
var welcomeCard = CardHelper.GetMenuCard(welcomeMessage,'Y','Y');
}
And then your actions for Teams instead look like
{
"type": "ActionSet",
"actions": [
{
"type": "Action.Submit",
"title": "Get Order Status",
"data": {
"msteams": {
"type": "imBack",
"value": "Get Order Status"
}
}
}
]
}
I've tried combining these and it doesn't work well. You can add something to your handler to make Teams cards work in web, but the text will not be inserted into the chat like a typical button and it will instead be essentially like a backchannel event. I like this method much better.
Other than that you should be able to run your bot as-is, except for attachments as noted in your separate question. I have not gotten that to work and I believe it may be related to not using TeamsActivityHandler but I'm not sure.
Hopefully this helps. Go ahead and give it a try and you can create a new issue with any specific problems you face once the bot is operating in Teams.

A week old MS Teams invoke action button results in Invalid teamId and/or appId specified message

I'm developing a Teams bot app that generates a thumbnail card (application/vnd.microsoft.card.thumbnail) via unfurl or search extension. This card contains 3 buttons from which one of them invokes a task. Everything was working as expected for a while but then I noticed that if I click on that button on a card that's been posted more than a week ago, nothing happens, my server does not receive any request from MS Teams. Actually in the Teams web app you can see an error log in the JS console saying:
AppsService: getInstalledAppForTeam - Invalid teamId and/or appId
specified
If I post a new card from the same app (same app version without updating it), the button works again, but only for a week or so.
This is the JSON definition of that invoke button I use:
{
"type": "invoke",
"title": "Invoke task",
"value": {
"type": "task/fetch",
"someObjectId": "123",
"command": "myCommand"
}
}
Not sure if I miss anything there but according to doc it does not seem like that.
Is there some defined period after which the invoke buttons are "retired"?
The app is installed via Teams Admin Center https://learn.microsoft.com/en-us/microsoftteams/manage-apps
I've not looked into this scenario, so I can't say 100% for sure what's going on, but what I suspect is this: Your App Id/App Password are important because they're being used to secure the payload in some way, and that process might have a time limit to ensure stale messages aren't resent (i.e. replayed by an invalid party), or something like that. As a result, it's not that the app id is per se expired, but rather that the message somehow is. Again, just a theory...

How can I silently push an apk and get it installed by android device policy using android management api?

I am trying to push an APK to the device and get it installed by Android device policy (Device owner) rather than pushing application from play store.
I am able to push applications that are available on play store using
device policy
{
"packageName": string,
"installType": enum(InstallType),
"lockTaskAllowed": boolean,
"defaultPermissionPolicy": enum(PermissionPolicy),
"permissionGrants": [
{
object(PermissionGrant)
}
],
"managedConfiguration": {
object
},
"disabled": boolean,
"minimumVersionCode": number,
"delegatedScopes": [
enum(DelegatedScope)
],
"managedConfigurationTemplate": {
object(ManagedConfigurationTemplate)
}
}
Is there any way I can push an APK to the device and get it installed by android device policy ?
It's not possible to use the Android Management API to install an APK that is not in Play.
However you can publish your app in Play and restrict it to one or more enterprises, this way your app won't be visible publicly. This is also explained here in the documentation of the Android Management API.

Resources