teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

解決方法の追加。

2019/01/17 06:54

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -79,4 +79,7 @@
79
79
  この方法を使うと一応動くのですが、アプリの上にアプリが起動しているような状態になります。
80
80
  これで開いたページでバックボタンを押すと前に開いていた画面が出てきてしまいます。
81
81
  出来れば新規でページを開きたいのですが、どのようなフラグをつければよいのでしょうか?
82
- SingleTopフラグでは異常終了してしまい、上手く動作しませんでした。
82
+ SingleTopフラグでは異常終了してしまい、上手く動作しませんでした。
83
+ #解決方法
84
+ `intent.AddFlags(ActivityFlags.NewTask | ActivityFlags.ClearTop);`
85
+ このようにすることで意図した動作になりました。

2

追記を追加。

2019/01/17 06:54

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -68,6 +68,15 @@
68
68
  }
69
69
  ```
70
70
  上記のように修正した後、FCMからdataを含むデータを送信したとき、アプリが異常終了してしまいました。
71
- またタスクキルされた状態ではOnMessageReceivedにすら入って来ませんでした。
71
+ ~~またタスクキルされた状態ではOnMessageReceivedにすら入って来ませんでした。
72
72
  どのように修正すれば画面を表示出来るでしょうか?
73
- 出来ればタスクキルされた状態からでも表示させたいのですが出来ますでしょうか?
73
+ 出来ればタスクキルされた状態からでも表示させたいのですが出来ますでしょうか?~~
74
+ #追記
75
+ `intent.AddFlags(ActivityFlags.NewTask);`
76
+ 上記行をStartActivityを行う前に追加することで表示出来ました。
77
+ OnMessageReceivedに入ってこなかったのは実際に送信されるまでにかなり時間を要していたからのようです。
78
+ 1時間後くらいに通知が来ました。
79
+ この方法を使うと一応動くのですが、アプリの上にアプリが起動しているような状態になります。
80
+ これで開いたページでバックボタンを押すと前に開いていた画面が出てきてしまいます。
81
+ 出来れば新規でページを開きたいのですが、どのようなフラグをつければよいのでしょうか?
82
+ SingleTopフラグでは異常終了してしまい、上手く動作しませんでした。

1

試したことの追記。

2019/01/17 06:32

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -5,7 +5,7 @@
5
5
  Xamarin.GooglePlayServices.Tasks 60.1142.1
6
6
  Xamarin.Firebase.Messaging 60.1142.1
7
7
  #やりたいこと
8
- Firebase Cloud Messagingを用いて通知を受け取った際に画面を遷移させたい。
8
+ Firebase Cloud Messaging(以下FCM)を用いて通知を受け取った際に画面を遷移させたい。
9
9
  #コード
10
10
  [こちらの質問](https://teratail.com/questions/168287)を参照して頂きたいです。
11
11
  #知りたいこと
@@ -14,6 +14,60 @@
14
14
 
15
15
  Xamarin.Formsで実装したいため、Intentでの画面遷移は考えていません。
16
16
  #試したこと
17
- グローバルな変数を作成し、そこに現在のページを代入させ、その変数からPushAsyncを呼ぼうとしましたがエラーになりました。
17
+ ~~グローバルな変数を作成し、そこに現在のページを代入させ、その変数からPushAsyncを呼ぼうとしましたがエラーになりました。
18
18
  (現在スマートフォンからの投稿のため、詳細なコードは後程追記します。)
19
- データを渡す際にグローバルな変数に入れて渡そうと思いましたが、Xamarinの共通コードとAndroidではインスタンスが異なるのか、代入しても値は反映しませんでした。
19
+ データを渡す際にグローバルな変数に入れて渡そうと思いましたが、Xamarinの共通コードとAndroidではインスタンスが異なるのか、代入しても値は反映しませんでした。~~
20
+ 上記方法のコードを紛失してしまったため、別の試したことを書きます。
21
+
22
+ FCMのコードを下記のように修正。
23
+ ```C#
24
+ public override void OnMessageReceived(RemoteMessage message)
25
+ {
26
+ GetDataNotification(message.Data);
27
+ }
28
+
29
+ void GetDataNotification(IDictionary<string, string> keyValues)
30
+ {
31
+ if (keyValues.ContainsKey("data"))
32
+ {
33
+ var intent = new Intent(this, typeof(MainActivity));
34
+ intent.PutExtra("data", keyValues["data"]);
35
+ StartActivity(intent);
36
+ }
37
+ }
38
+ ```
39
+ MainActivityのコードを下記のように修正しました。
40
+ ```C#
41
+ protected override void OnCreate(Bundle savedInstanceState)
42
+ {
43
+ // 初期化処理等
44
+ var data = this.Intent.GetStringExtra("data");
45
+ LoadApplication(new App(data));
46
+ }
47
+ ```
48
+ Appは下記のように修正しました。
49
+ ```C#
50
+ public App(string data = null)
51
+ {
52
+ if (data != null)
53
+ {
54
+ MainPage = new Page1(data);
55
+ }
56
+ else
57
+ {
58
+ MainPage = new Page2();
59
+ }
60
+ }
61
+ ```
62
+ Page1の初期化コードは下記の様になっています。
63
+ ```C#
64
+ public Page1(string data = null)
65
+ {
66
+ InitializeComponent();
67
+ this.data.Text = data;
68
+ }
69
+ ```
70
+ 上記のように修正した後、FCMからdataを含むデータを送信したとき、アプリが異常終了してしまいました。
71
+ またタスクキルされた状態ではOnMessageReceivedにすら入って来ませんでした。
72
+ どのように修正すれば画面を表示出来るでしょうか?
73
+ 出来ればタスクキルされた状態からでも表示させたいのですが出来ますでしょうか?