Ich benutze Xamarin Nieten Komponenten, um eine Deep Link Android-Anwendung zu erstellen. Ich kann eine Verbindung zur Anwendung herstellen, wenn ich eine App im Hintergrund ausgeführt habe. Wenn die App jedoch nicht gestartet wird, wird eine Ausnahme ausgelöst.Xamarin - Nieten Komponente - DeepLink, wenn die App nicht gestartet ist
Mein Code aus den Nieten Proben abgeleitet (https://components.xamarin.com/gettingstarted/rivets) Mein Code sieht unter:
[Activity (Label = "ProductActivity")]
[IntentFilter(new [] {Android.Content.Intent.ActionView },
DataScheme= "mobisaveqaapp", //new[] {"mobisaveqaapp","mobisavedev"},
DataHost="*",
Categories=new [] { Android.Content.Intent.CategoryDefault })]
public class ProductActivity : Activity
{
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
SetContentView (Resource.Layout.ProductLayout);
var id = "No Product ID Found";
if (Intent.HasExtra ("al_applink_data")) {
var appLinkData = Intent.GetStringExtra ("al_applink_data");
var alUrl = new Rivets.AppLinkUrl (Intent.Data.ToString(), appLinkData);
/*Todo: fetch Applinkdata target url,
* replace double slash with single slash,
* find the word offers,
* fecth the next index,
* start main activity,
* open all deals,
* open deal push async*/
var offersVM = new OfferViewModel();
var tableItems = offersVM.OfferCategories;
Deal Localdeal = new Deal();
foreach (var categories in tableItems)
if (categories.Key == "All Offers") {
Localdeal.DealName = categories.Key;
Localdeal.DealCount = categories.Value;
break;
}
var url ="http://test:7070/nvtest/offers/664";
url = url.Replace (":", "/");
url = url.Replace ("//", "/");
string[] words = url.Split('/');
for(int i = 0;i<words.Length;i++) {
if (words [i].Trim().ToLower() == "offers" && words [i + 1] != null) {
id = words [i + 1];
Device.BeginInvokeOnMainThread(() => {
if(App.Current != null && App.Current.MainPage != null && App.Current.MainPage.Navigation != null && App.Current.MainPage.Navigation.ModalStack.ToList().Count > 0)
{
App.Current.MainPage.Navigation.PushModalAsync(new OffersSlideView(Localdeal, Convert.ToInt32(id)),false);
}
else
{
App.Current.MainPage = new NavigationPage(new RootPageNew());
}
});
}
}
}
this.Finish();
}
}
Ill Notwendigkeit Hilfe, wie die tiefen verknüpfte Anwendung zu starten. Lass es mich wissen, wenn ich mich irgendwo irre oder wenn diese Frage unklar ist.
es wirklich hilfreich wäre, wenn Sie uns die genaue Ausnahme gesagt, die ausgelöst wird, und welche Linie verursacht es – Jason
Hallo Jason, die Ausnahme ist: "kann nach einem onsaveinstancestate keine Aktion ausführen". Der else Teil schlägt fehl. Ein anderer Teil wird ausgeführt, wenn die App nicht ausgeführt wird. –