2016-07-19 6 views
0

Sirアップルの電話からアップストリームメッセージを送信しようとしていますが、失敗しました。私はどこが間違っているのか分かりません。 ここに私のコードです:fcmのXMPPプロトコルを使用したアップストリームメッセージの送信に失敗しました

public class MainActivity extends AppCompatActivity { 
Button button; 
private AtomicInteger msgId; 
FirebaseMessaging fm; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    FirebaseMessaging.getInstance().subscribeToTopic("hello"); 
    FirebaseInstanceId.getInstance().getToken(); 
    msgId = new AtomicInteger(); 
    button = (Button) findViewById(R.id.click); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Toast.makeText(getApplicationContext(),""+msgId,Toast.LENGTH_SHORT).show(); 
      fm = FirebaseMessaging.getInstance(); 
      RemoteMessage message=new RemoteMessage.Builder("<my sender id>@gcm.googleapis.com") 
        .setMessageId(Integer.toString(msgId.incrementAndGet())) 
        .addData("my_message", "Hello World") 
        .addData("my_action", "SAY_HELLO") 
        .build(); 
      fm.send(message); 

     } 
    }); 



} 
} 

私は、ドキュメントに応じてonMessageSent()とonSendErrorを()実装されていたが、これらの方法はなかったcalled.Hereは私のメッセージングサービスクラスであることはありません:私は

public class MyFirebaseMessagingService extends FirebaseMessagingService { 
@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
    super.onMessageReceived(remoteMessage); 
    Log.d("msg", "onMessageReceived: " + remoteMessage.getData().get("message")); 
    NotificationCompat.Builder builder = new NotificationCompat.Builder(this) 
      .setSmallIcon(R.mipmap.ic_launcher) 
      .setContentTitle("test") 
      .setContentText(remoteMessage.getData().get("message")); 


    NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
    manager.notify(0, builder.build()); 

} 

@Override 
public void onMessageSent(String s) { 
    super.onMessageSent(s); 
    Log.d("fcm", "onMessageSent: message sent"); 
    Toast.makeText(getApplicationContext(), "message:" + s, Toast.LENGTH_SHORT).show(); 

} 

@Override 
public void onSendError(String s, Exception e) { 
    super.onSendError(s, e); 
    Log.d("fcm", "onSendError: erroe"); 
    Toast.makeText(getApplicationContext(), "error:" + s, Toast.LENGTH_SHORT).show(); 
} 
} 

1週間からこれを試しても、私は間違っています。logcat.pleaseヘルプには何もありません。

答えて

1

デバイスリソース、特にバッテリを最適化するために、onMessageSentとonSendErrorのコールバックが一括処理されるため、約10秒程度上流のメッセージを送信するまでコールバックを受け取らない可能性があります。

詳細はdocsを参照してください。

+0

回答ありがとうございましたが、50のmessages.pleaseヘルプを送信した後もコールバックを取得できませんでした。 –

0

Firebase Messaging Serverと通信するには、いくつかのxmppサーバーを実行するアプリケーションサーバーが必要です。

0

メッセージに生存時間を設定してください。たとえば、new RemoteMessage.Builder(...).setTtl(<time in sec>)。私はFirebaseMessagingServiceおよび/またはCloud Connection Server(CCS)の参照でこの動作を文書化していません。

2

あなたのメッセージにTTLを設定する必要があり、例

については
RemoteMessage message=new RemoteMessage.Builder("<my sender id>@gcm.googleapis.com") 
       .setMessageId(Integer.toString(msgId.incrementAndGet())) 
       .addData("my_message", "Hello World") 
       .addData("my_action", "SAY_HELLO") 
       .setTtl(86400) 
       .build(); 

setTtl(86400)この行が重要であり、それは助けを願っています。

関連する問題