Quantcast
Channel: Xamarin.Forms — Xamarin Community Forums
Viewing all 77050 articles
Browse latest View live

Azure Xamarin Offline Sync is Not Pulling All Matched Records

$
0
0

I am now working on the Xamarin Offline Sync with Azure Mobile App Service (NodeJS). It is alright to call await syncTable.PullAsync("queryId", syncTable.CreateQuery()) to pull all the records from remote database. However, after removing all the offline data and trying to set a criteria like await syncTable.PullAsync("queryId", syncTable.CreateQuery().Where(x => x.ForeignKey == "aForeignKey"), then I am not able to pull all the records with field ForeignKey equal to 'aForeignKey' and only a part of matched records are returned.

Besides, I tried to use Postman to send a request to the mobile app service backend and set query parameter $filter to ForeignKey%20eq%20'aForeignKey' and it is able to return all the matched records.


Package version:
Microsoft.Azure.Mobile.Client 4.1.2
Microsoft.Azure.Mobile.Client.SQLiteStore 4.1.2


How to get port names in xamarin.forms

$
0
0

HI, can any one help me how to get port names ,which are connected or not in xamarin.forms .Thankyou

Sending data from WearOS to Xamarin.Forms

$
0
0

Hi there,
As part of some training, I've been asked to create a cross platform (iOS and Android) app using Xamarin.Forms. I'm very new to Xamarin and mobile development generally, but for some reason, I thought it would be a good idea to also add a Wear OS component.
So far, I've managed to make a functioning Xamarin.Forms app and the Wear OS counterpart, but I haven't had any luck sending data from the watch to the phone. Below is what seems to be the relevant code. Be warned that it is... creative. I've been following a guide on codeproject (that I can't link because I'm new...) and just kind of hacking it into what I've got. From what I can see the watch is sending data but the phone just isn't picking it up. Any help would be greatly appreciated and I can send any code you want to look at. Thanks!

WearOS MainActivity:
using System;
using Android.Runtime;
using Android.App;
using Android.Widget;
using Android.OS;
using Android.Support.Wearable.Views;
using Java.Lang;
using System.Linq;
using Android.Support.Wearable.Activity;
using ScoreKeeper.Models;
using Android.Gms.Common.Apis;
using Android.Gms.Wearable;

using Export = Java.Interop.ExportAttribute;
using System.IO;
using Newtonsoft.Json;
using static Android.Gms.Common.Apis.GoogleApiClient;
using Android.Gms.Common;

namespace ScoreKeeper.WearOS
{
    [Activity(Label = "@string/app_name", MainLauncher = true)]
    public class MainActivity : WearableActivity, IDataApiDataListener, IConnectionCallbacks, IOnConnectionFailedListener
    {
        public Button T1IncScore { get; set; }
        public Button T1DecScore { get; set; }
        public Button T2IncScore { get; set; }
        public Button T2DecScore { get; set; }

        public Button EndButton { get; set;}
        public Button SyncButton { get; set; }

        public TextView T1Score { get; set; }
        public TextView T2Score { get; set; }

        private GoogleApiClient _client;
        const string _syncPath = "/ScoreKeeper/Data";

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.activity_main);

            T1IncScore = FindViewById<Button>(Resource.Id.t1IncScore);
            T1IncScore.Click += delegate
            {
                T1IncScore_Clicked();
            };
            T1DecScore = FindViewById<Button>(Resource.Id.t1DecScore);
            T1DecScore.Click += delegate
            {
                T1DecScore_Clicked();
            };
            T2IncScore = FindViewById<Button>(Resource.Id.t2IncScore);
            T2IncScore.Click += delegate
            {
                T2IncScore_Clicked();
            };
            T2DecScore = FindViewById<Button>(Resource.Id.t2DecScore);
            T2DecScore.Click += delegate
            {
                T2DecScore_Clicked();
            };

            EndButton = FindViewById<Button>(Resource.Id.endButton);
            EndButton.Click += delegate
            {
                End_Clicked();
            };

            SyncButton = FindViewById<Button>(Resource.Id.syncButton);
            SyncButton.Click += delegate
            {
                Sync_Clicked();
            };

            T1Score = FindViewById<TextView>(Resource.Id.t1Score);
            T2Score = FindViewById<TextView>(Resource.Id.t2Score);

            _client = new Builder(this, this, this)
                             .AddApi(WearableClass.API)
                             .Build();

            SetAmbientEnabled();
        }

        [@Export("T1IncScore_Clicked")]
        private void T1IncScore_Clicked()
        {
            int n = int.Parse(T1Score.Text);
            n++;
            T1Score.Text = n.ToString();
        }

        [@Export("T2IncScore_Clicked")]
        private void T2IncScore_Clicked()
        {
            int n = int.Parse(T2Score.Text);
            n++;
            T2Score.Text = n.ToString();
        }

        [@Export("T1DecScore_Clicked")]
        private void T1DecScore_Clicked()
        {
            int n = int.Parse(T1Score.Text);
            if (n > 0)
            {
                n--;
                T1Score.Text = n.ToString();
            }
        }

        [@Export("T2DecScore_Clicked")]
        private void T2DecScore_Clicked()
        {
            int n = int.Parse(T2Score.Text);
            if (n > 0)
            {
                n--;
                T2Score.Text = n.ToString();
            }
        }

        [@Export("End_Clicked")]
        private void End_Clicked()
        {
            Score score = new Score(int.Parse(T1Score.Text), int.Parse(T2Score.Text));

            if(Save(score))
            {
                Toast.MakeText(Application.Context, string.Concat("Saved Score: ", score.Result), ToastLength.Long).Show();
                T1Score.Text = "0";
                T2Score.Text = "0";
            }
        }

        [@Export("Sync_Clicked")]
        private void Sync_Clicked()
        {
            Toast.MakeText(Application.Context, "Syncing..." , ToastLength.Short).Show();
            string file = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "watchScores.json");

            SendData(file);

            File.Delete(file);

            Toast.MakeText(Application.Context, "Synced", ToastLength.Long).Show();
        }


        public bool Save(Score score)
        {
            try
            {
                string file = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "watchScores.json");
                string s = JsonConvert.SerializeObject(score);
                File.AppendAllText(file, s + "\n");
                Console.WriteLine(s);
                return true;
            }
            catch (System.Exception e)
            {
                Console.WriteLine(e.Message);
                return false;
            }
        }

        public void SendData(string file)
        {
            try
            {
                if (File.Exists(file))
                {
                    string fileContents = File.ReadAllText(file);
                    var request = PutDataMapRequest.Create(_syncPath);
                    var map = request.DataMap;
                    map.PutString("Message", fileContents);
                    map.PutLong("UpdatedAt", DateTime.UtcNow.Ticks);
                    WearableClass.DataApi.PutDataItem(_client, request.AsPutDataRequest());
                }
            }
            finally
            {
                _client.Disconnect();
            }
        }

        protected override void OnStart()
        {
            base.OnStart();
            _client.Connect();
        }

        public void OnDataChanged(DataEventBuffer dataEvents)
        {
            var dataEvent = Enumerable.Range(0, dataEvents.Count).Select(i => dataEvents.Get(i).JavaCast<IDataEvent>()).FirstOrDefault(x => x.Type == DataEvent.TypeChanged && x.DataItem.Uri.Path.Equals(_syncPath));
            if (dataEvent == null)
            {
                return;
            }
        }

        public void OnConnected(Bundle connectionHint)
        {
            WearableClass.DataApi.AddListener(_client, this);
        }

        public void OnConnectionSuspended(int cause)
        {
            Android.Util.Log.Error("GMS", "Connection suspended " + cause);
            WearableClass.DataApi.RemoveListener(_client, this);
        }

        public void OnConnectionFailed(ConnectionResult result)
        {
            Android.Util.Log.Error("GMS", "Connection failed " + result.ErrorCode);
        }

        protected override void OnStop()
        {
            base.OnStop();
            _client.Disconnect();
        }
    }
}

WearService (Android phone)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.Gms.Common.Apis;
using Android.Gms.Wearable;
using Android.OS;
using Android.Runtime;
using Android.Support.V4.Content;
using Android.Views;
using Android.Widget;
using ScoreKeeper.Views;
using Xamarin.Forms;

[assembly: Dependency(typeof(ScoreKeeper.Droid.Services.WearService))]
namespace ScoreKeeper.Droid.Services
{
    [Service]
    [IntentFilter(new[] { "com.google.android.gms.wearable.BIND_LISTENER" })]
    public class WearService : WearableListenerService, ScoreKeeper.Services.IWearService
    {
        public static string ReceivedData { get; set; }
        private GoogleApiClient _client;
        const string _syncPath = "/ScoreKeeper/Data";       

        public override void OnCreate()
        {
            base.OnCreate();
            _client = new GoogleApiClient.Builder(this.ApplicationContext)
                            .AddApi(WearableClass.API)
                            .Build();

            _client.Connect();

        }
        public override void OnDataChanged(DataEventBuffer dataEvents)
        {
            var dataEvent = Enumerable.Range(0, dataEvents.Count).Select(i => dataEvents.Get(i).JavaCast<IDataEvent>()).FirstOrDefault(x => x.Type == DataEvent.TypeChanged && x.DataItem.Uri.Path.Equals(_syncPath));
            if (dataEvent == null)
            {
                return;
            }

            var dataMapItem = DataMapItem.FromDataItem(dataEvent.DataItem);
            var map = dataMapItem.DataMap;
            string message = dataMapItem.DataMap.GetString("Message");

            Intent intent = new Intent();
            intent.SetAction(Intent.ActionSend);
            intent.PutExtra("WearMessage", message);
            LocalBroadcastManager.GetInstance(this).SendBroadcast(intent);
        }

        public string GetReceivedData()
        {
            return ReceivedData == null ? null : ReceivedData;
        }
    }
}

Android phone (MainActivity)
using System;

        using Android.App;
        using Android.Content.PM;
        using Android.Runtime;
        using Android.Views;
        using Android.Widget;
        using Android.OS;
        using ScoreKeeper.Models;
        using ScoreKeeper.Services;
        using Xamarin.Forms;
        using Android.Support.V4.Content;
        using Android;
        using Android.Support.V4.App;
        using Android.Content;
        using ScoreKeeper.Droid.Services;

        namespace ScoreKeeper.Droid
        {
            [Activity(Label = "ScoreKeeper", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
            public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
            {
                public static string ReceivedData { get; set; }
                protected override void OnCreate(Bundle savedInstanceState)
                {
                    TabLayoutResource = Resource.Layout.Tabbar;
                    ToolbarResource = Resource.Layout.Toolbar;

                    base.OnCreate(savedInstanceState);

                    Xamarin.Essentials.Platform.Init(this, savedInstanceState);
                    Forms.Init(this, savedInstanceState);
                    LoadApplication(new App());

                    if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.WriteExternalStorage) != (int)Permission.Granted)
                    {
                        ActivityCompat.RequestPermissions(this, new string[] { Manifest.Permission.WriteExternalStorage }, 0);
                    }

                    if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.ReadExternalStorage) != (int)Permission.Granted)
                    {
                        ActivityCompat.RequestPermissions(this, new string[] { Manifest.Permission.ReadExternalStorage }, 0);
                    }

                    IntentFilter filter = new IntentFilter(Intent.ActionSend);
                    MessageReciever receiver = new MessageReciever(this);
                    LocalBroadcastManager lbm = LocalBroadcastManager.GetInstance(this);
                    lbm.RegisterReceiver(receiver, filter);

                }
                public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
                {
                    Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);

                    base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
                }

                public void Process(Intent intent)
                {
                    ReceivedData = intent.GetStringExtra("WearMessage");
                    WearService.ReceivedData = ReceivedData;
                }

                internal class MessageReciever : BroadcastReceiver
                {
                    MainActivity _main;
                    public MessageReciever(MainActivity owner) { this._main = owner; }

                    public override void OnReceive(Context context, Intent intent)
                    {
                        _main.Process(intent);
                    }
                }

            }
        }

How to achieve Geofencing in xamarin forms?

$
0
0

Hi Everyone,
I need to achieve the Geofencing functionality for my app. Suppose there will be a certain location and a user is moving to that location. When the user is out of that particular location it will send a reminder or something else. I have gone through some sample projects- https://github.com/rdelrosario/xamarin-plugins/tree/master/Geofence
in this project there are some plugins which are deprecates from Nuget.
https://allancritchie.net/posts/introducingshiny
The sample is not working.

I didn't get any exact information. Can someone please help me out regarding this?

help

How can i show to Progress bar on Downloading a video?

$
0
0

Hi All please help me,
I am using "CrossDownloadManager" for downloading a video on that time I want to show download progress , Into this NuGet pack they gave progress for only Android but I need IOS Also please anyone knows about this help me.

Thanks in advance.

System.NullReferenceException: 'Object reference not set to an instance of an object.'

$
0
0

I am doing a navigation, but I always get the result that the navigation is null.

This is my code:

XAML:

            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <ViewCell.View>
                            <StackLayout Padding="10">

                                <ffimageloading:CachedImage
                                    HorizontalOptions="Start"
                                    Source="{Binding url_media_alimentacion}"
                                    LoadingPlaceholder="LoadImage"
                                    ErrorPlaceholder="ErrorImage"
                                    CacheDuration="50"
                                    RetryCount="3"
                                    RetryDelay="600"
                                    DownsampleToViewSize="True"
                                    WidthRequest="80" 
                                    HeightRequest="80">
                                    <ffimageloading:CachedImage.Transformations>
                                        <fftransformations:CircleTransformation/>
                                    </ffimageloading:CachedImage.Transformations>
                                </ffimageloading:CachedImage>

                                <Label
                                    Grid.Column="1"
                                    HorizontalOptions="FillAndExpand"
                                    Text="{Binding descripcion}" 
                                    FontSize="Medium"
                                    TextColor="Black"
                                    FontAttributes="Bold"/>

                                <StackLayout
                                    IsVisible="{Binding EsVisible}"
                                    Margin="0,0,80,0"
                                    Orientation="Horizontal">
                                    <Grid x:Name="Item">
                                        <Label
                                            HorizontalOptions="FillAndExpand"
                                            Text="{Binding descripcion_det}" 
                                            FontSize="Medium"
                                            TextColor="Black"
                                            FontAttributes="Bold"/>
                                        <Button
                                            BindingContext="{Binding Source={x:Reference ListaModuloAlimentacion}, Path=BindingContext}"   
                                            Command="{Binding NextPage}"   
                                            CommandParameter="{Binding Source={x:Reference Item}, Path=BindingContext}"
                                            Text="Iniciar"  
                                            WidthRequest="110"  
                                            FontSize="15"  
                                            BackgroundColor="Chocolate"  
                                            TextColor="White"/>
                                    </Grid>
                                </StackLayout>
                            </StackLayout>

                        </ViewCell.View>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

My viewModel:
public ICommand NextPage
{
get
{
try
{
return new Command(async (alimentacion) =>
{
await Application.Current.MainPage.Navigation.PushAsync(new AlimentacionVideosView(alimentacion.idalimentacion));
});
}
catch (Exception ex)
{
throw ex;
}
}
}

CollectionView Scrolled

$
0
0

hi
int CountReceived = 0;
int PageIndex = 1;

I want to control the end of the list

LastVisibleItemIndex to loaded method Itm1_Scrolled

But the return from the server is null

Pass enum value in command parameter

$
0
0

Hi,

How to pass enum value as command parameter and what would be command type in viewmodel. I am using Prism and passing enum value like below

CommandParameter="{x:Static localenum:GradeTypes.PreventiveStyle}"

my viewmodel property is

public DelegateCommand<GradeTypes> TapSubGradeCommand { get; set; }

after running my application crashes. always we need send command parameter as string or generic values in Prism.


Frame set MinimumHeightRequest and HeightRequest

$
0
0

hi

Frame BorderColor="Gray" CornerRadius="5" IsClippedToBounds="True" HasShadow="False" Padding="0"
VerticalOptions="CenterAndExpand" HorizontalOptions="CenterAndExpand" WidthRequest="160" MinimumHeightRequest="280" HeightRequest="-1"

How to control the minimum and maximum

Title being clipped on UWP

$
0
0

We have inherited a large master/detail app. In UWP the title on each page is being clipped as if there is not enough room, though it works fine on Android. Any ideas?

This may have started since we Upgraded from Xamarin.Forms 4.3.0.947036
to 4.4.0.991477

Thanks

Push Notifications navigation to a specific page with Prism

$
0
0

Using Xamarin.Forms v.4.4, Prism and Microsoft.AppCenter.Push
Sending Push notifications with AppCenter

The question is how to navigate to a specific page when a push notification is received?
Seems that this is one of the most common features, but I haven’t found a solid way to solve the problem.
There are 4 different scenarios and the important part is that none of them should interfere with the other.
One note that seems to be very important is that initial navigation in Xamarin.Forms (means when the app starts) needs to be in the constructor of the app in App.xaml.cs (at least, this is what I read in Xamarin.Forms documentation.) Having Prism is a bit different and the initial navigation needs to be in OnInitialized()

  • Scenario 1. No Push Notification, the app should be able to start and navigate to the default page (MainPage or whatever is the default)
  • Scenario 2. Application is not running, a Push Notification is received, user taps on the notification and the app needs to start and navigate to the appropriate page (as I said, scenario 2 shouldn’t interfere with scenario 1)
  • Scenario 3. Application is running in the background, a Push Notification is received, user taps on the notification and the app needs to wake up (resume) and navigate to a specific page
    *Scenario 4. Application is running in the foreground, a Push Notification is received, and the app responds (i.e. show a toast message) No need to navigate to a specific page, or ask the user whether to navigate to that page.

In AppCenter.Push there is the Push.PushNotificationReceived where we can “attach” a code to run when a Push Notification is received but it doesn’t work in scenario 2. Also there is mix up with scenario 3 and 4. There is also a problem to identify whether is application is already running or resuming.

I tried the CrossGeeks/PushNotificationPlugin. There is an example that doesn’t do navigation. It goes to the MainPage and then changes a property. I wasn’t able to deal with scenario 2
I also tried CrossGeeks/FirebasePushNotificationPlugin. No luck…

Using PopAsync to pop two or more pages at once?

$
0
0

I have created a Forms Shared Project solution and have multiple pages that go Page1 to Page2 to Page3 to Page4. From Page4 I want to pop out to Page1 or Page2 on the click of a button. But anything I have tried to PopAsync multiple times at once has failed (either an exception is thrown or it just doesn't pop more than one page).

My code in Page4 looks like this (Pages 1, 2, and 3 are on the page stack):

public class Page4 : ContentPage { public Page4 () { var button = new Button () { Text = "Pop Two Pages" }; button.Clicked += async delegate { await Navigation.PopAsync (); await Navigation.PopAsync (); }; Content = button; } }
The above code throws InvalidOperationException:

System.InvalidOperationException: Operation is not valid due to the current state of the object
at System.Collections.Generic.Stack`1[Xamarin.Forms.Page].Pop () [0x0000b] in /Developer/MonoTouch/Source/mono/mcs/class/System/System.Collections.Generic/Stack.cs:120
at Xamarin.Forms.NavigationProxy.OnPopAsync () [0x00000] in :0
at Xamarin.Forms.NavigationProxy.PopAsync () [0x00000] in :0
at NavigationTest.Page4+c__async0.MoveNext () [0x0007b] in /Users/devinrose/Dropbox/KetraProject/MobileExperiments/NavigationTest/NavigationTest/Page4.cs:15

My guess is that the second PopAsync is not valid because it has already popped this page off the stack. Using a single PopToRootAsync doesn't work due to a known Xamarin bug on iOS. Any ideas?

Change colour of bottom tab bar

$
0
0

Hi I have a tabbed page and i'm trying to change the background colours from black to a different colour but it doesn't seem to be working.

I've got the following code- not sure what else to try..

namespace MyApp
{
    public class HomePage : TabbedPage
    {

        public HomePage()
        {
            // Content = new Label { Text = "Hello ContentView" };

            var searchPg = (new SearchPage() 
            {
                Title = "Search",
                IconImageSource = "icons/search.png",
            });


            ProfilePage profilePage = new ProfilePage();

            var profilePg = new NavigationPage(_profilePage)
            {
                Title = "My Profile",
                IconImageSource = "icons/profile.png",
            };


            Children.Add((profilePg));
            Children.Add((searchPg));

            this.BarBackgroundColor = Color.Red;
    }
}

Custom theme is not applied while globally apply theme along with implicit styles

$
0
0

Hi,

I have defined the themes globally in App.Xaml and I have two navigation pages with Button control. When I explicitly defined Style to change a CornerRadius property (any property) for Button control with overriding themes(customized theme), the applied theme is not working.

Please find the prepared sample to replicate the issue.

Can anyone please look into and provide a possible solution?

How to save SKPath to azure?

$
0
0

I paint some paths using SKiaSharp and want to save it so that I can open it next time.

but there is over 30thousand points. two many of it.just two lines(path).

Is there any way to save it?


Apple : we found that your app does not comply with the following guidelines.

$
0
0

Hi , My app is in general an app that scan QR code and give my clients data about vouchers for user .
It has been rejected last week by apple and I don't understand why ? this is the main function of my app .

{
Your app unlocks or enables additional functionality with mechanisms such as promo codes, data transfer codes, license keys, augmented reality markers, or QR codes, which is not appropriate for the App Store.

}

Ajouter image in xamarin forms Drawable in android but not showing in ios

HttpClient PostAsync doesn't return anything

$
0
0

I have a PostAsync that doesn't return anything and doesn't continue code execution afterwards. I get no error but nothing happens when it reaches PostAsync. My code:

        public async System.Threading.Tasks.Task<HttpResponseMessage> LoginAsync(string name, string name2, int sourceid)
        {
            var client = InitiateHttpClient("");
            var json = JsonConvert.SerializeObject(new
            {
                name = name,
                name2 = name2,
                sourceid = sourceid,
            });
            var data = new StringContent(json, Encoding.UTF8, "application/json");
            var response = await client.PostAsync("myRequestUri", data).ConfigureAwait(false);
            return response;
        }

            HttpResponseMessage httpResponseMessage = await login.LoginAsync(Text1, Text2, Source);

EDIT:

After several seconds (possibly 1-2 minutes) I get Exception Unhandled
System.Threading.Tasks.TaskCanceledException: 'The operation was canceled.'

Trouble displaying html in webview with javascript

$
0
0

Hello, I am trying to request to payment gateway server using following code

using (HttpClient client = new HttpClient())
{
FormUrlEncodedContent content = new FormUrlEncodedContent(request);
var response = await client.PostAsync(url, content);
responseString = await response.Content.ReadAsStringAsync();
}

I am getting successful response from payment gateway and I am rendering response string to webview like this..

GatewaySource = new HtmlWebViewSource
{
Html = System.Web.HttpUtility.HtmlDecode(responseString)
};

response have html with loads of Javascript code but javascript is not working/injecting thus I can't go ahead with payment cycle.

Please find attached response file from payment gateway which I ain't able to display properly.

Xamarin.Forms android app exit alert

$
0
0

I want when user press 'back button' on android device to exit my app, there is a alert dialog shown to ask user 'Do you want to exit ? (Yes, No)'.

https://docs.microsoft.com/en-us/dotnet/api/xamarin.forms.application.pagedisappearing?view=xamarin-forms
I found 'Application.PageDisappearing Event', but I don't know how to write the code.
I have never write the code to work with Event variable.

I need to do the exit alert because my app have TcpClient connection, if the app exit the connection will be disconnect.
I want user use 'home button' to let my app go background, that will be keep the connection alive.

Viewing all 77050 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>