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を見つける方法をまだ理解できないため、キーに何か問題があると思います.