localizing app name in desktop bridge apps - desktop-bridge

i have a desktop app to convert to uwp apps, it has a different app name on different system language, I knew to do this in uwp project, setting the package display name with ms-resource:AppName, but in desktop bridge apps it didn't work,
can anyone help me ?

Instructions on how to do this are in the "Using MRT for Desktop Apps" whitepaper. Basically you need to build a PRI file with your resources and then reference them from the AppXManifest. (The whitepaper also includes additional steps you can take if you want to localize the app's content as well).

The desktop bridge app's display name have changed when you using ms-resource:AppName to localize strings in your app package manifest, you can see the change on the Start Menu.
Desktop bridge will package your desktop app to have UWP apps's experiences such as live tiles and notifications, but the UI in your packaged app will still depend on your desktop app. You said the desktop bridge apps "didn't work", it should be something like the Window's Title in WPF app. You can change it on your desktop app's code by using the API
of your app's platform to get the OS's language and change the Window's title. The ms-resource:AppName in the converted app package manifest will affect the app's display name on the Start menu but will not change the app's window's title which is set on the destop app.

Related

Xamarin forms iOS changed AppIcons but remains showing old default

Starting from a standard Xamarin forms app template and changing the app icons in assets.xcassets, I am unable to make this take effect. The initial xamarin icon keeps showing when deployed to physical devices.
In assets.xcassets, I added all the required image sized.
I ensured that in plist info this asset was set as app icons source.
I have tried cleaning, rebuilding and deleting from the ipad and iphone I am testing with. No success.
I tried deleting the default asset and creating a new one, and make pinfo point to this, and still the old Xamarin icon shows up. This makes me think that there is a cache somewhere on either my windows pc, on which I am developing using vs2019, or on the mac which VS is connected to for doing the actual build, and this is not getting updated, since otherwise that old icon should not exist any longer.
I did read this answer
Xamarin forms: Launcher icon for ios
Which indicates that the OP has a problem with a mismatched path to the asset, but that does not seem to be the case for me. The xcasset folder is at the root of the ios project. As this is simply the default test project it is app1/App1.ios/Fawk.xcassets and the entry in pinfo is
XSAppIconAssets
Fawk.xcassets/AppIcons.appiconset
Does this make any kind of sense?
Edit: Tried vs2019, xamarin forms template. Deleted default asset in assetcatalogs under ios, created a new one, set all my custom icon images (png), updated info.plist/visual assets/appicon to my new asset and then ran it on a physical device. The default xamarin icon is what shows up. This seems to indicate it is not a cache issue, as I suspected, but... something else...
You can right-click Assets.xcassets and view it in the folder, there is a json file in it, please check if the file name is correct.
According to the official documentation, if you are not connected to a Mac, it will only display the original image. For more information, you can check: https://learn.microsoft.com/en-us/xamarin/xamarin-forms/deploy-test/hot-restart#limitations

How To Setup Google Firebase Dynamic Links in Xamarin Forms - Android Edition

How do you setup google firebase dynamic links, deep linking, in a xamarin forms app?
This is how I setup Firebase Dynamic Links in Android project of my Xamarin Forms App, so most of this will apply directly to android. I will work on finishing and documenting the iOS implementation in the future.
Disclaimer: I'm not an expert, any or all of this could be wrong. It's just what worked for me and my basic understanding. Please let me know if there are any errors and let's improve our collective intelligence of the Xamarin Community
If you don't already know what Dynamic Links are, watch the 2 min video, it's a great overview. https://firebase.google.com/docs/dynamic-links/
The Setup
Setup is broken up into 2 parts.
Part 1 - Configure the Dynamic Links in the Firebase Console (Easy)
Part 2 - Configure your app to be able to receive and process the Deep Links (Not as Easy)
Part 1 - Configure the Dynamic Links in the Firebase Console (Easy)
1- Setup a free firebase account at https://firebase.google.com/
2- Create a project.
3- Create a new dynamic link, the tab is at the bottom of the 'Grow' section.
It will generate a static domain name for you based off of your project name. Ex. 'https://myproject.page.link'
Short Link url is what users will click on to navigate to your appstore or launch your app.
Deep Link url is what actually gets sent into your app for you to work with. Ex 'https://myproject.com/MainPage'
iOS behavior. Currently set mine to open the link in a url browser, as my app is not connected to it yet.
Android behavior Very Important but not as hard as my explanation makes it look.
Here is where you register your app with firebase. The package name should be easy, use the same one as defined in your
apps Android properties. Ex 'com.mycompany.appname'
Adding the signing certs SHA-1 and SHA-256 are required for Dynamic Links, which is what we are doing here.
Microsoft has a great guide on this, better than I can explain. here
Download the google-services.json file - You will need it later. Also, you will need the one that has incorporated the SHA cert details in it.
Ignore the instructions for adding the firebase SDK, we will add these to our project later using Nuget packages.
When this is all done your app should be selectable in a dropdown for the android behavior.
Finally, add any extra tags to your dynamic link url if you want, its optional.
And that's it! Now you should have a working short link. When used on an android device it should already be able to determine if the app is already installed or not, and then either direct the user to the play store or open the app. However, it won't do anything with that deep link url that you set. That brings us to the next part.
Part 2 - Configure your app to be able to receive and process the Deep Links (Not as Easy)
1- Versions, might be important.
2- Nuget Packages - Hopefully this goes smoother for you than it did for me.
3- The Code
3a- Intent Filters
3b- Handling the Deep Link
1- Versions.
I was having a lot of issues trying to get dynamic/deep linking to work. So I went back and updated everything to the newest versions available at the time.
Visual Studio Professional 2017 - 15.7.5
.NET Framework 4.7.03056
Xamarin 4.10.10.2
Xamarin.Android SDK 8.3.3.2
Android SDK Manager - Got the latest. Android 8.1 API 27 and Android 8.0 API 26 (Targeting 8.1 might be required)
Android Properties -
-Application - Compile using Android Version(Target Framework): Android 8.1 Oreo
-Android Manifest: Target Android Version: Use Compile SDK Version(haven't tried targetting 8.1 directly, might work). My min target is still Android 4.4 API 19 Kit Kat
2- Nuget Packages. These are just for the Android project. MyApp.Android
You shouldn't have to add anything into the .NET Standard Project, just make sure the Xamarin.Forms Versions match
Below is what I did
Update:
Xamarin.Forms - updated to 3.0.0.482510
Install:
This is where it immediately got annoying for me. Issues here are what lead me to go back and update my Android API Levels to the most recent, 8.1
Xamarin.Firebase.Dynamic.Links by Xamarin Inc v60.1142.1 is what you want to install.
The other dependencies should automatically install. In my case, they did not.
Dependency MonoAndroid,Version=v8.0 is important here. That should be the SDK API version that your app is set to compile against.
However, the other dependencies like Xamarin.GooglePlayServices.Basement (= 60.1142.1) have nested dependencies of their own that require MonoAndroid,Version=v8.1
So if you run into issues installing the Dynamic Links Package, thats where I would recommend looking first.
For my purposes, the nested dependencies were not automatically getting installed, so I went down through each of them and their lists and did them all manually. Even the ones that said not to do manually. It's only 20 or so, but my guess would be if I had my project SDK's set to 8.1 before all of this that it would have gone smoothly.
The CODE
Intent Filters
These are defined in your AndroidManifest.xml file
What do they do? They listen for instructions while your app starts.
When an app start matches a pre-defined filter(short link), they it stores your intended action or data on the Intent Class. That is where we pull the deep link from.
For us, this is what let's the android app receive and begin to process the deep link url that you set all the way back in Part 1.
The firebase dynamic link docs have a good breakdown and example of what to do. here
The android developer docs have a good example and breakdown of this also. here
NOTE Focus on whats between the activity tags. I've just included the other tags to show general structure, in case you haven't edited these before.
That is about the minimum of what you need.
The highlighted line should match the Short Dynamic Link you setup in the established in the Firebase Console.
I'd recommend using a Wildcard like I did in the path prefix.
That way you can make new Dynamic Links and your app can handle them without having to release new versions.
Handling the Deep Link
At this point if your app is launched by the short link, you should be able to catch the deep link during the android startup process and handle it how you want.
All I will cover here is a basic example of how to get the Deep Link as a string.
I pass mine to the main app project (.NET Standard Library) using a simple dependency service.
You can use it however you want though, there's actions it can take in either the App or the App.Android project.
The important thing is getting the deep link.
The firebase docs have good examples, but written in java or whatever language native android uses. here
I'll be showing mostly the same, just in C# examples
Get The Intent.
What is the intent you want to get? The deep link you are sending into your app Ex. "https://mycoolapp.com/mainpage"
You want to get it in the MainActivity. Below is an extremely simplified example, but it's just about that easy. Now you should be able to do what you want with that link inside of your app.
TIPS
Be careful if you have something that interrupts your startup procedures.
My Application uses a splash screen. Part of that is a line of code that creates a new Intent, overwriting the one sent in from the dynamic link
So I have my DeepLinkHandler fire off before that operation, and store the deep link in a static string.
Once it's in a static string I can use a dependency service from the Main App(.NET Standard Library) to call the GetDynamicLinkString method and return the deep link as a string.
How to Test Using an Emulator and Debugger
I have a simple settings page on my app. I added a field that would print the deep link, if it has one.
Fire off the emulator like normal using the debugger. The deep link field should be empty.
With the emulator still running, minimize the app.
Open a browser and enter in the short link url.
This should re-launch your app, but this time the deep link field has the url that you set on the firebase console.
Hope this is able to save someone some headaches.
-Tim

Distributable extensions (modules) for mobile app in Adobe Flex/AIR

I am creating an mobile app in flex 4.6 which will have some default embedded content.
I need to be able to extend this app with modules (additional content libraries) let's say up to 35MB each, the client wants these modules as separate positions(packages) on the app store. How to approach such project in Flex? Is it possible to create mobile Flex app with separately purchasable extensions?
Yes, its possible. Copy over your assets from your Application directory to user directory or application storage directory(if you want to update them). Now use you can write a module or a native app to go and update/copy these files that your app will use.
Keep in mind your Application Directory is write only and protected well. You will not be able to go edit/delete files at least for flex. From what I understand you cannot do this with IOS on the application storage directory, Apple don't like that-
http://blogs.adobe.com/airodynamics/tag/file-applicationstoragedirectory/
http://blogs.adobe.com/simplicity/2010/01/api_tip_dont_abuse_fileapplica.html
You should be able to detect these files and automate whatever you need. With the user directory there is a chance that your sensitive material may be accessible to the technically savvy.

Flex Builder 4 mobile modifying app properties

I am building an app in Flex Builder 4 (iOS and Android) and have my app worked almost to completion and about ready for deployment. Unfortunately, I cannot find how to change the app icon and title for the system to read, so my app still shows up as Main with the default package symbol in the launcher. Does anyone know where to apply changes to these properties?
You need to edit these details in the .xml file for your project. It will be located in the root of your src folder and will be named something like MyProject-app.xml. Double click this, there you can edit the filename, version number, icon, etc.
NOTE: the default view is Design, i found it much easier to edit in the Source view.

Enable Icons ADL

I can't seem to work out how to enable icons in the AIR Debug Launcher. This seems to work on Linux, but when I run it on Windows or Mac only the Adobe AIR icon shows. I have specified the location of the icon in <icon></icon> in the application descriptor file.
Those icons are created from the file references in the application descriptor file when the application installs itself so you won't really be able to see them during development.
There is a solution available on Christian Cantrell's Adobe blog that works around this though the instructions are from February 2008. This may or may not work with the latest Flex SDK or Flex/Flash Builder IDE.
Fortunately, I’ve found an easy way to make this work. Here’s what you do:
Make a copy of your application icon and name it something different. One version should be referenced by your application descriptor file, and the other will be compiled into your application. (You don’t technically have to make a copy of the icon, but when generating a release build of your application, Flex Builder doesn’t copy over embedded resources which means your application icon will be missing. Trust me when I tell you that it’s easier to create a copy and avoid this whole issue.)
Compile the copy of your application icon into your application using code like this:
[Embed(source="assets/application.png")] public var appIconClass:Class;
In your application’s initialization code, create a Bitmap instance of your icon like this:
var appIcon:Bitmap = new appIconClass();
Set your icon like this:
InteractiveIcon(NativeApplication.nativeApplication.icon).bitmaps = [appIcon];
This code is a little oversimplified because it doesn’t take platform differences into account. A more complete implementation might do something like this:
Check to see what kinds of icons the client supports. You can do this with the NativeApplication.supportsDockIcon and NativeApplication.supportsSystemTrayIcon APIs.
Scale the Bitmap to the appropriate dimensions for the platform.
Set the icon(s) using the NativeApplication’s icon property.

Resources