0
以前はXamarinアプリケーションにGCMメッセージを正常に送信しましたが、何らかの理由で失敗しました。 POST要求はNotRegisteredを返します。次のように私のコードは次のとおりです。GCMメッセージで「NotRegistered」(Xamarin)が返される
Androidのマニフェスト:
<application android:label="MyProject">
<receiver android:name="com.google.android.gms.gcm.GcmReceiver"
android:exported="true"
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.example.MyProject" />
</intent-filter>
</receiver>
</application>
インスタンスID・リスナー・サービス:
[Service(Exported = false), IntentFilter(new[] { "com.google.android.gms.iid.InstanceID" })]
class InstanceIdListenerService : InstanceIDListenerService
{
public override void OnTokenRefresh()
{
var intent = new Intent(this, typeof(RegistrationIntentService));
StartService(intent);
}
}
登録意思サービス(これが主な活動で作成されます):
static object locker = new object();
protected override void OnHandleIntent(Intent intent)
{
lock (locker)
{
var instanceID = InstanceID.GetInstance(this);
var token = instanceID.GetToken(
"123456789123",
GoogleCloudMessaging.InstanceIdScope,
null);
SendRegistrationToAppServer(token); // just a HTTP request
}
}
GCMリスナーサービス:
[Service(Exported = false), IntentFilter(new[] { "com.google.android.c2dm.intent.RECEIVE" })]
class GcmLstnrService : GcmListenerService
{
public override void OnMessageReceived(string from, Bundle data)
{
string msg = data.GetString("message");
Log.Info("GcmLstnrService", "From: " + from);
Log.Info("GcmLstnrService", "Msg: " + msg);
}
}
POST応答:
{"multicast_id":8322296108700959972,
"success":0,
"failure":1,
"canonical_ids":0,
"results":[{"error":"NotRegistered"}]}
何が悪いのでしょうか?私は大いに助けていただければ幸いです。
コードのどこにでもGcmClient.Register()を呼び出していますか? –
いいえ、私は明らかに私はすべきではありませんか?どこに追加すればいいですか? GcmClientはプラグインのようなものではありませんか? – mkkekkonen
私は二重チェックをして、Register()を呼び出すのは、GCMに登録することが推奨されなくなりました。私は新しいアプローチでまだ取り組まなかった:https://developers.google.com/cloud-messaging/android/legacy-regid –