Xamarin android - 推送通知 Intent extras 丢失
Xamarin android - push notification Intent extras lost
我已按照 this 指南在我的 Xamarin Forms 应用程序中设置推送通知。
我有一个包含两个 activity 的应用程序,
一溅 activity
Activity(Theme = "@style/SplashTheme",
MainLauncher = true, ScreenOrientation = ScreenOrientation.Portrait, NoHistory = true)]
public class SplashAct: Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
StartActivity(typeof(MainActivity));
Finish();
}
}
和 MainActivity
[Activity(
ClearTaskOnLaunch = false,
FinishOnTaskLaunch = false,
Theme = "@style/MainTheme",
LaunchMode = LaunchMode.SingleTask,
ScreenOrientation = ScreenOrientation.Portrait,
ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public partial class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity, Android.Gms.Tasks.IOnSuccessListener
在主要部分 activity 我已经重写了 OnNewIntent 方法
protected override void OnNewIntent(Intent intent)
{
base.OnNewIntent(intent);
ProcessNotificationActions(intent);
}
并且我尝试使用在 Azure 上发布的网络 api 发送通知,正文为:
{
"text": "Test msg",
"action": "action_a"
}
在设备上,文本正确显示,但是当代码到达 OnNewIntent
方法时,意图没有额外内容,所以我丢失了“操作”值。
我该如何解决这个问题?
注意。我不能使用 LaunchMode = LaunchMode.SingleTop
,否则 OnNewIntent
不会被调用,OnCreate
被调用并且应用程序显示空白屏幕。
仅当应用程序处于后台或关闭时才会发生这种情况。如果它在前台,一切正常。
附上示例、视频和信息以提出 POSTMAN\RESTER 请求。
您的 SplashAct 设置为 MainLauncher,它将在您的推送通知被点击时启动。当它启动 MainActivity 时,首先收到的 Intent 不会自动传递附加信息。您可以在 SplashAct 中调用 StartActivity
时手动转移它们:
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
var intent = new Intent(Application.Context, typeof(MainActivity));
intent.PutExtras(Intent);
StartActivity(intent);
Finish();
}
我已按照 this 指南在我的 Xamarin Forms 应用程序中设置推送通知。
我有一个包含两个 activity 的应用程序, 一溅 activity
Activity(Theme = "@style/SplashTheme",
MainLauncher = true, ScreenOrientation = ScreenOrientation.Portrait, NoHistory = true)]
public class SplashAct: Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
StartActivity(typeof(MainActivity));
Finish();
}
}
和 MainActivity
[Activity(
ClearTaskOnLaunch = false,
FinishOnTaskLaunch = false,
Theme = "@style/MainTheme",
LaunchMode = LaunchMode.SingleTask,
ScreenOrientation = ScreenOrientation.Portrait,
ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public partial class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity, Android.Gms.Tasks.IOnSuccessListener
在主要部分 activity 我已经重写了 OnNewIntent 方法
protected override void OnNewIntent(Intent intent)
{
base.OnNewIntent(intent);
ProcessNotificationActions(intent);
}
并且我尝试使用在 Azure 上发布的网络 api 发送通知,正文为:
{
"text": "Test msg",
"action": "action_a"
}
在设备上,文本正确显示,但是当代码到达 OnNewIntent
方法时,意图没有额外内容,所以我丢失了“操作”值。
我该如何解决这个问题?
注意。我不能使用 LaunchMode = LaunchMode.SingleTop
,否则 OnNewIntent
不会被调用,OnCreate
被调用并且应用程序显示空白屏幕。
仅当应用程序处于后台或关闭时才会发生这种情况。如果它在前台,一切正常。
附上示例、视频和信息以提出 POSTMAN\RESTER 请求。
您的 SplashAct 设置为 MainLauncher,它将在您的推送通知被点击时启动。当它启动 MainActivity 时,首先收到的 Intent 不会自动传递附加信息。您可以在 SplashAct 中调用 StartActivity
时手动转移它们:
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
var intent = new Intent(Application.Context, typeof(MainActivity));
intent.PutExtras(Intent);
StartActivity(intent);
Finish();
}