2017-01-12 13 views
0

Firebase、Unity、およびnode-gcmの助けを借りてnodejsから送信することで、アンドロイド上の重複通知メッセージの原因を見つけるのに苦労しています。ここでFirebaseはAndroidで2つの通知を表示します

は、すべての相対コードです:私が得た

Unity3dクライアント側は:

public class PushServiceManager : MonoBehaviour 
    { 
     public string Identifier; 
     public string SkuId; 

     public SQSParameters sqsOptions; 
     private SQSManager sqs; 

     // Use this for initialization 
     void Start() 
     { 
      sqs = new SQSManager(this.sqsOptions); 
      sqs.Initialize(this.gameObject); 

      Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived; 
      Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived; 
     } 

     public void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token) 
     { 
      Debug.Log("Received Registration Token: " + token.Token); 

      RegistrationToken t = new RegistrationToken(); 
      t.id_token = token.Token; 

      // sends token to node server 
      sqs.SendRegistrationToken(t); 
     } 

     public void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e) 
     { 
      Debug.Log(e.Message.Data.ToString()); 
     } 
    } 

Nodejsサーバ側:デバイス上

pushNotification(pushRequest, tokens, callback) { 

     // This is an array of firebase tokens 
     let registrationTokens = tokens.map(function (token) { 
      return token.token; 
     }); 

     let message = new gcm.Message({ 
      timeToLive: pushRequest.ttl 
     }); 

     let note = { 

      title: 'Message title', 
      icon: 'none', 
      sound: 'none', 
      body: 'message text' 
     }; 

     message.addNotification(note); 

     let payload = { 
      data: {foo: "foo"} 
     } 

     message.addData(payload); 

     this.sender.send(message, {registrationTokens}, callback); 
    } 

結果は次のとおりです。
push notifications on device

質問:
2番目の空のプッシュ通知が表示されるのはなぜですか。
最初の1つをタップすると、期待通りにユニティゲームが開きますが、空のタップは表示されません。
どこが違うのですか?

ありがとうございました!

01.31.17 UPDATE:
完封この問題に探しのためのサポートチームをfirebaseする...
enter image description here

答えて

1

私のプロジェクトでは重複した通知の問題があります。解決策は以下のとおりです。

生成されたAndroidManifestを確認してください。一時\ [あなたの統一プロジェクトフォルダ]内の結束を構築することにより、XML \ StagingArea

線の下に持っているすべての受信機を探します。私の場合は

<action android:name="com.google.android.c2dm.intent.RECEIVE" />

、私はその下にアマゾンAWSによって追加されましたユニティ・プラグイン

<receiver android:name="com.amazonaws.unity.GCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND"> 
    <intent-filter> 
    <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
    <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 
    <category android:name="com.amazonaws.unity" /> 
    </intent-filter> 
</receiver> 

以下Firebaseプラグインから

<receiver android:exported="true" android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:permission="com.google.android.c2dm.permission.SEND"> 
    <intent-filter> 
    <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
    <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 
    <category android:name="com.bbbbbttttttgggg.sssssstttt" /> 
    </intent-filter> 
</receiver> 

重複した通知はamazon AWS GCMBroadcastReceiverによって発生します。

これを解決するには2つの方法があります。

  1. 必要がない場合は受信機を取り外します。
  2. android:exported="false"を受信者に追加します。

例:

<receiver android:exported="false" android:name="com.amazonaws.unity.GCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND"> 
     <intent-filter> 
     <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
     <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 
     <category android:name="com.amazonaws.unity" /> 
     </intent-filter> 
    </receiver> 

は、受信機が含まれている元のAndroidManifest.xmlで変更を加えることを忘れないでください。 Temp \ StagingAreaのものではありません。 [あなたのプロジェクトフォルダ] \ Assets \ Plugins \ Androidまたはそのサブフォルダ内のAndroidManifest.xmlファイルの1つである必要があります。

0

私はfirebaseと同じ問題に直面しています。 FirebaseとMicrosoft Azure Notification Hubを併用しています。私がMicrosoft Notification Hub経由でテストメッセージを送信すると、メッセージは1つしか得られず、そのメッセージはプッシュハンドラによって処理されます。それ以外の場合、firebaseコンソールからプッシュ通知を送信すると、あなたのような2つのメッセージが表示されます(空の場合もあります)。 1つのメッセージはプッシュサービスで処理され、2つ目のメッセージは何らかの形で「コードなし」で処理されます。 firebaseによって送信されるプッシュ通知が処理されるコードを私のコードで見つけることができませんか?通知を処理するバックグラウンドには、OnReceiveMessageメソッドが必要です。私の場合は、次のような解決策があります。私はプッシュハンドラのコメントを外しましたが、今は通知が1つしかありませんが、音がなくても...どうにかしてその機能をオーバーライドしてサウンドの動作を実装する必要があります。あなたはその解決策を見つけましたか?空のメッセージはプッシュハンドラによって発生し、2番目の完全なメッセージはfirebaseによってバックグラウンドで処理されます。

Iまた、私onReceive()メソッドでは、メッセージの二種類を得る:

マイクロソフト:1484748187469719%の8a1048bff9fd7ecd、メッセージ=:= 230XXXXXXXXXX、google.message_id = 0から、[{google.sent_time = 1484748187461バンドルマイクロソフト、collapse_keyが= do_not_collapse}]を介して試験

Firebase:バンドル[{google.caudt = 0、google.sent_time = 1484748603664、gcm.notification.e = 1、google.cac_id = 3001008833206773803、google.cats = 1484748604、gcm.ne = 1、from = 230XXXXXXXXXXX、google.message_id = 0:1484748603943016%8a1048bf8a1048bf、gcm.notification.body = firebase経由のテスト、google.cae = 1、collapse_key = com.sub_zero.ipostcard}]

firebaseで受信したメッセージは、Firebaseベースのlibを介してバックグラウンドで1回処理され、2回目はハンドラによって想定されます。それで2つの理由があります...プッシュハンドラのコメントを外してもう一度テストしてください。

+0

この質問を修正したばかりです。 –

0

私はAWSモジュールを持っていた...この問題を引き起こしていたもの

を見つけたが、それは自身のマニフェストファイルの持っていたプロジェクトに含まれています。そこには "GCMIroadentRevice"の受信者宣言と "GCMIntentService"のサービス宣言が組み合わされています。

問題を解決したものを削除する

関連する問題