प्राप्त मैं उदाहरण है कि गूगल gcm टोकन रजिस्टर करने के लिए प्रदान करता है अनुसरण कर रही हूं: https://developers.google.com/cloud-messaging/android/startसदस्यता ली जा रही विषयों, अमान्य तर्क
मैं सही ढंग से गूगल-services.json फ़ाइल उत्पन्न है और मैं कर रहा हूँ पुश टोकन प्राप्त करें। लेकिन जब मैं अनुसरण कोड के साथ किसी भी विषय की सदस्यता के लिए कोशिश कर रहा हूँ:
e3r6xnFGK3E:APA91bG9oY0A7QCf86BXXh8ADzycct5QJUONTXMH3pApCkcwty0A6UXo6zLLx3Hl3ubMgBY65ldxuZzSF20nahZAq-4SiUMRS0YYStJtldK85lzrO-xM5KvM_Jigpaka-RN5TLb8D1Op
:
01-05 14:05:24.435 D/RegIntentService(4330): java.io.IOException: INVALID_PARAMETERS
01-05 14:05:24.435 D/RegIntentService(4330): at com.google.android.gms.iid.zzc.zzb(Unknown Source)
01-05 14:05:24.435 D/RegIntentService(4330): at com.google.android.gms.iid.zzc.zza(Unknown Source)
01-05 14:05:24.435 D/RegIntentService(4330): at com.google.android.gms.iid.InstanceID.zzc(Unknown Source)
01-05 14:05:24.435 D/RegIntentService(4330): at com.google.android.gms.iid.InstanceID.getToken(Unknown Source)
01-05 14:05:24.435 D/RegIntentService(4330): at com.google.android.gms.gcm.GcmPubSub.subscribe(Unknown Source)
01-05 14:05:24.435 D/RegIntentService(4330): at gcm.play.android.samples.com.gcmquickstart.RegistrationIntentService.subscribeTopics(RegistrationIntentService.java:105)
01-05 14:05:24.435 D/RegIntentService(4330): at gcm.play.android.samples.com.gcmquickstart.RegistrationIntentService.onHandleIntent(RegistrationIntentService.java:65)
01-05 14:05:24.435 D/RegIntentService(4330): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
01-05 14:05:24.435 D/RegIntentService(4330): at android.os.Handler.dispatchMessage(Handler.java:99)
01-05 14:05:24.435 D/RegIntentService(4330): at android.os.Looper.loop(Looper.java:137)
01-05 14:05:24.435 D/RegIntentService(4330): at android.os.HandlerThread.run(HandlerThread.java:60)
यह धक्का टोकन का एक उदाहरण है कि मैं प्राप्त करता है:
// Register the user to the global topic. This will help the device to be register on GCM
GcmPubSub pubSub = GcmPubSub.getInstance(this);
pubSub.subscribe(token, "/topics/global", null);
यह INVALID_ARGUMENT अपवाद फेंकता
मैंने किसी विषय की सदस्यता लेने के बारे में प्रलेखन की जांच की है लेकिन कुछ भी नहीं है जो कहता है कि मुझे INVALID_PARAMETER अपवाद क्यों प्राप्त हो रहा है:
किसी भी मदद की सराहना की जाती है।
पीडी। वहाँ टोकन रजिस्टर करने के लिए पूरा स्रोत कोड है:
import android.annotation.SuppressLint;
import android.app.IntentService;
import android.content.Intent;
import android.os.Bundle;
import android.os.ResultReceiver;
import android.util.Log;
import com.google.android.gms.gcm.GcmPubSub;
import com.google.android.gms.gcm.GoogleCloudMessaging;
import com.google.android.gms.iid.InstanceID;
/**
* Intent service used to retrieve and save the registration token needed
* Extracted from here
* https://github.com/googlesamples/google-services/blob/master/android/gcm/app/src/main/java/gcm/play/android/samples/com/gcmquickstart/RegistrationIntentService.java
*/
public class RegistrationIntentService extends IntentService {
public static final String TAG = "RegistrationIntentService";
public static final String INTENT_KEY_UPDATE_SERVER_TOKEN_CALLBACK =
"services.RegistrationIntentService.INTENT_KEY_UPDATE_SERVER_TOKEN_CALLBACK";
private ResultReceiver mResultReceiver;
public static final String BUNDLE_KEY_GCM_TOKEN =
"services.RegistrationIntentService.BUNDLE_KEY_GCM_TOKEN";
public RegistrationIntentService() {
super(TAG);
}
@SuppressLint("LongLogTag")
@Override
protected void onHandleIntent(Intent intent) {
// Get the result receiver
Bundle extras = intent.getExtras();
if (extras != null && extras.containsKey(INTENT_KEY_UPDATE_SERVER_TOKEN_CALLBACK)) {
mResultReceiver = (ResultReceiver)extras.get(INTENT_KEY_UPDATE_SERVER_TOKEN_CALLBACK);
}
try {
InstanceID instanceId = InstanceID.getInstance(this);
String token = instanceId.getToken(getString(R.string.gcm_defaultSenderId),
GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
Log.i(TAG, "GCM Registration Token: " + token);
// TODO: Send registration token to the server
if (mResultReceiver != null) {
Bundle bundle = new Bundle();
bundle.putString(BUNDLE_KEY_GCM_TOKEN, token);
mResultReceiver.send(0, bundle);
}
// Register the user to the global topic. This will help the device to be register on GCM
GcmPubSub pubSub = GcmPubSub.getInstance(this);
pubSub.subscribe(token, "/topics/global", null);
Logger.v(TAG, "User correctly register to the global token");
} catch (Exception e) {
Log.d(TAG, "Faield to complete token refresh", e);
}
}
}
और यह गूगल-services.json
{
"project_info": {
"project_id": "NOT_SHOWN-aa10f",
"project_number": "11046079110",
"name": "NOT_SHOWN"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:11046079110:android:b918cc51ed907631",
"client_id": "android:NOT_SHOWN",
"client_type": 1,
"android_client_info": {
"package_name": "NOT_SHOWN"
}
},
"oauth_client": [],
"api_key": [],
"services": {
"analytics_service": {
"status": 1
},
"cloud_messaging_service": {
"status": 2,
"apns_config": []
},
"appinvite_service": {
"status": 1,
"other_platform_oauth_client": []
},
"google_signin_service": {
"status": 1
},
"ads_service": {
"status": 1
}
}
}
],
"client_info": [],
"ARTIFACT_VERSION": "1"
}
मुझे लगता है कि समस्याएं प्राप्त करने में समस्या का उपयोग करने के साथ समस्या है। बदले 'InstanceID InstanceID = InstanceID.getInstance (this);' को 'InstanceID InstanceID = InstanceID.getInstance (getApplicationContext());' और भी 'GcmPubSub pubsub = GcmPubSub.getInstance (यह) ; से 'GcmPubSub pubSub = GcmPubSub।getInstance (getAplicationContext()); ' यह सुनिश्चित करने के लिए कि वे एक ही संदर्भ में हैं। – gerardnimo
हाय: उत्तर के लिए धन्यवाद। मुझे नहीं लगता कि यह मुद्दा है। कोड लगभग 40% समय में काम करता है। तो, कोड चल रहा है, जबकि कुछ स्थिति बदलना चाहिए। पंजीकरणIntentService IntentService से फैली हुई है, जो सेवा से फैली हुई है, जो ContextWrapper से फैली हुई है, जो संदर्भ से ही फैली हुई है। यह मुद्दा नहीं होना चाहिए। – jiahao
मैं देखता हूं। क्या आपने टोकन की जांच कर रहे हैं या आप टोकन प्राप्त करने में gcm.register() का उपयोग कर रहे हैं, ये समस्या उत्पन्न करने वाले हो सकते हैं। – gerardnimo