Xamarin.Forms
で FirebasePushNotificationPlugin
を使用してFCMプッシュ通知を実装しています。 iOSプロジェクトでは、AppDelegate
メソッドがRegisteredForRemoteNotifications
を生成すると、deviceToken
が生成されますが、Postmanによって生成されたtoken
の通知を送信すると、エラーが発生します。
{"multicast_id":8631208504861228784、 "success":0、 "failure":1、 "canonical_ids":0、 "results":[{"error": "InvalidRegistration"}]}
これは私がAppDelegate
に持っているコードです ここ から取得しました:
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
global::Xamarin.Forms.Forms.Init();
LoadApplication(new App());
FirebasePushNotificationManager.Initialize(options, new NotificationUserCategory[]
{
new NotificationUserCategory("message",new List<NotificationUserAction> {
new NotificationUserAction("Reply","Reply",NotificationActionType.Foreground)
}),
new NotificationUserCategory("request",new List<NotificationUserAction> {
new NotificationUserAction("Accept","Accept"),
new NotificationUserAction("Reject","Reject",NotificationActionType.Destructive)
})
});
return base.FinishedLaunching(app, options);
}
public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)
{
FirebasePushNotificationManager.DidRegisterRemoteNotifications(deviceToken);
Console.WriteLine("Token- - - : "+deviceToken);
}
public override void FailedToRegisterForRemoteNotifications(UIApplication application, NSError error)
{
FirebasePushNotificationManager.RemoteNotificationRegistrationFailed(error);
}
public override void DidReceiveRemoteNotification(UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler)
{
FirebasePushNotificationManager.DidReceiveMessage(userInfo);
System.Console.WriteLine(userInfo);
completionHandler(UIBackgroundFetchResult.NewData);
}
サンプル通知を送信するときのPostmanのデータobject
{
"to":"79f64b43339859a329a935f7a3e417ecc1599fbb5d6935afbooa3b4291c07fa7",
"notification" : {
"body" : "New task",
"content_available" : true,
"priority" : "high",
"color":"Page1",
"title":"Announcement"
},
"data" : {
"color":"Page1",
"title":"title",
"content_available" : true,
"body" : "New Announcement ad"
}
}
郵便配達員の体
これらは、VisualStudioからのプロビジョニングプロファイル設定です
この問題を解決するにはどうすればよいですか?
Xamarinに精通していません。しかし、私はFCMをよく使用しました。
トークンが間違っていると思います。 deviceToken
を使用しても、FCMからのプッシュ通知では機能しません。私は検索をしました、そして多分あなたはそれをから得なければなりません
var fcmToken = FirebaseInstanceId.Instance.Token;
RegisteredForRemoteNotificationsに関する最初の回答が間違っていたため編集しました
文書化されているように ここ 、実際のトークンは受け取ったトークンの説明にあります:
public override void RegisteredForRemoteNotifications (
UIApplication application, NSData deviceToken)
{
// Get current device token
var DeviceToken = deviceToken.Description;
if (!string.IsNullOrWhiteSpace(DeviceToken)) {
DeviceToken = DeviceToken.Trim('<').Trim('>');
}
// Get previous device token
var oldDeviceToken = NSUserDefaults.StandardUserDefaults.StringForKey("PushDeviceToken");
// Has the token changed?
if (string.IsNullOrEmpty(oldDeviceToken) || !oldDeviceToken.Equals(DeviceToken))
{
//TODO: Put your own logic here to notify your server that the device token has changed/been created!
}
// Save new device token
NSUserDefaults.StandardUserDefaults.SetString(DeviceToken, "PushDeviceToken");
}
したがって、トークンは上記のDeviceTokenです。
_ RegisteredForRemoteNotifications_を実装する代わりに、次の操作を実行できます。
次のメソッドを実装します。
//このコールバックは、新しいトークンが生成されるたびに発生します-呼び出されるには、AppDelegateがIMessagingDelegateである必要があります
[Export( "messaging:didReceiveRegistrationToken:")]
public async void DidReceiveRegistrationToken(メッセージングメッセージング、文字列トークン){
// Subscribe to a 'news' topic so we can send to just those subscribed to this topic
messaging.Subscribe("news");
// Log this to debug output so that we can capture it for testing
Debug.WriteLine($"DidReceiveRegistration Token:'{token}'");
}