0

GCM サービスで通信する 2 つのアプリケーションを作成しようとしています。アプリ A から B に、次に B から A に文字列を送信しようとしているとします。

私は GCM サービスに非常に慣れていないので、少し混乱しています。myApiCode が表示されるたびに、元のコードを API コードに置き換えました。A コードは次のとおりです。

public class MainActivity extends Activity 
{
    private final String myApiKey = "903137756997";
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        GCMRegistrar.checkDevice(this);
        GCMRegistrar.checkManifest(this);
        final String regId = GCMRegistrar.getRegistrationId(this);
        if (regId.equals("")) {
          GCMRegistrar.register(this, "myApiCode");
        } else {
          Log.v("INFORMATION", "Already registered");
        }


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}

GCMIntentService は次のとおりです。

public class GCMIntentService extends GCMBaseIntentService
{
    private final String myApiKey = "903137756997";

    public GCMIntentService()
    {
        super("123");
    }
            ...
    @Override
    protected void onMessage(Context arg0, Intent arg1) 
    {
        Log.d("GCM", "RECIEVED A MESSAGE");
        System.out.println("123123123123");
    }
            ...

}

添付したコードはアプリ A で、アプリ B のコードを添付します。

次のコードは、メイン アクティビティから呼び出されるサービスです。

public void onCreate()
{
    super.onCreate();

    Sender sender = new Sender(myApiKey);
    Message message = new Message.Builder().build();
    Result result = null;
    try {
        result = sender.send(message, "123", 5);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    if (result.getMessageId() != null) {
         String canonicalRegId = result.getCanonicalRegistrationId();
         if (canonicalRegId != null) {
           // same device has more than on registration ID: update database
         }
        } else {
         String error = result.getErrorCodeName();
         if (error.equals(Constants.ERROR_NOT_REGISTERED)) {
           // application has been removed from device - unregister database
         }
        }
}

両方のアプリは例外なく実行されていますが、何も起こらないように見えます..アプリBがアプリAを見つける方法をまだ理解できないため、キーに何か問題があると思います.

4

1 に答える 1

1

GCMIntentService の onRegistered メソッドをオーバーライドする必要があります。これは、GCMRegistrar.register への呼び出しによって要求された登録 ID を GCM サーバーが返すときに呼び出されます。

このメソッドの実装では、String 引数を制御するサーバーにアップロードする必要があります。サーバーは、アップロードした ID を対象とするメッセージを送信できます。

また、この方法でアプリ間でメッセージを直接プッシュしないでください。これは、メッセージを送信するためにアプリ パッケージでプライベート API キーを送信する必要があるためです。

于 2013-03-02T09:16:19.047 に答える