6

Androidアプリにプッシュ通知を実装しようとしています。したがって、Googleの開発者ページから始めるのに最適な場所はありません。

私はここでこのチュートリアルに従おうとしています:GCMデモアプリ。チュートリアルでは、SDKマネージャーから提供されるサンプルコードを使用することをお勧めします。そうしてプッシュ通知を送信しようとすると、アプリの実行中に、新しいプッシュが到着したことが画面に表示されます。

ただし、アプリがバックグラウンドで実行されている場合、または実行されていない場合、プッシュ通知は表示されません。アプリを開くと、再びメッセージが画面に表示されます。しかし、私はポップアップと音で通知の形で何も受け取りません。

Androidで手動でこれを行う必要がありますか?プラットフォームが通知の表示を担当するiOSに似ていると思いました。

どのように私がそれを実装することができるかについてのアイデアはありますか?

4

2 に答える 2

5

しかし、私はポップアップと音で通知の形で何も受け取りません。

通知がトリガーされたときに、サウンドをコードにプログラムできます。このようなことで言います。

Notification notification = new Notification(icon, tickerText, when);
notification.sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

ただし、アプリがバックグラウンドで実行されているか実行されていない場合、プッシュ通知を受け取りません

Androidで手動でこれを行う必要がありますか?プラットフォームが通知の表示を担当するiOSに似ていると思いました。

アプリには常にGCMデータ(プッシュ通知)が送信されます。そのデータをどのように処理するかはあなた次第です。GCMインテントサービスはあなたにデータを配信する責任があり、それだけです。ユーザーに適切な通知を表示するには、通知サービスを使用する必要があります。

このアプローチには長所と短所があります。プッシュ通知を受信すると、Androidでアプリケーションコードが実行されますが、iPhoneでは実行されません。また、プッシュ通知のタイプに基づいて、サイレントに更新したり、ユーザーに通知したりする柔軟性もあります。

アプリの起動時にデバイスを送信者IDで登録すると、期待どおりに通知が届きます。すべてのプッシュ通知はprotected void onMessage(Context context, Intent intent)、選択したGCMIntentServiceのこのメソッドに配信されます。

于 2013-03-26T09:47:18.753 に答える
3

デバイスの登録を解除して、もう一度登録してみてください。DemoActivity.javaに入れます

final String regId = GCMRegistrar.getRegistrationId(this);
        GCMRegistrar.unregister(this);

GCMRegistrar.unregister(this);次に、 2回目の起動で削除 します。

アップデート

アプリケーションの通知:

クラスを作成する

public class DemoApplication extends Application {

    private class NotifyReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
              Toast.makeText(context, "RECEIVE MESSAGE", Toast.LENGTH_SHORT).show();
        }
    }

    private NotifyReceiver notifyReceiver = new NotifyReceiver();

    @Override
    public void onCreate() {
        registerReceiver(notifyReceiver, new IntentFilter("GCM_MESSAGE"));
        super.onCreate();
    }

    @Override
    public void onTerminate() {
        unregisterReceiver(notifyReceiver);
        super.onTerminate();
    }
}

次に入れます

<application
           android:name=".DemoApplication"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" > 

AndroidManifest.xmlで、ブロードキャストを送信します

  @Override
    protected void onMessage(Context context, Intent intent) {
        Log.i(TAG, "Received message");
        String message = getString(R.string.gcm_message);
        displayMessage(context, message);
      context.sendBroadcast(new Intent("GCM_MESSAGE"));
        // notifies user
        generateNotification(context, message);
    }

別のケースとして、broadcastReceiverをManifest、Activity、またはForeGroundServiceに登録できます。

于 2013-03-26T09:41:11.527 に答える