J'essaie de faire une notification push dans Android utilisant GCM. J'ai lu les documents Google pour GCM et leur application de démonstration. J'ai créé le programme côté client mentionné ici http://Android.amolgupta.in/
. Mais je ne reçois pas d'ID d'enregistrement. De plus, je ne reçois pas de points comme:
Quelqu'un peut-il me fournir un projet approprié autre que Google fourni pour que j'efface mes concepts.
Toute aide serait appréciée.
Ici, j'ai écrit quelques étapes pour savoir comment obtenir RegID et notification à partir de zéro
Vous pouvez trouver un tutoriel complet ici:
Extrait de code pour obtenir l'ID d'enregistrement (jeton d'appareil pour la notification push).
Configurer le projet pour GCM
Pour activer GCM dans notre projet, nous devons ajouter quelques autorisations à notre fichier manifeste. Aller à AndroidManifest.xml
et ajoutez ce code: Ajouter des autorisations
<uses-permission Android:name="Android.permission.INTERNET”/>
<uses-permission Android:name="Android.permission.GET_ACCOUNTS" />
<uses-permission Android:name="Android.permission.WAKE_LOCK" />
<uses-permission Android:name="Android.permission.VIBRATE" />
<uses-permission Android:name=“.permission.RECEIVE" />
<uses-permission Android:name=“<your_package_name_here>.permission.C2D_MESSAGE" />
<permission Android:name=“<your_package_name_here>.permission.C2D_MESSAGE"
Android:protectionLevel="signature" />
Ajoutez la déclaration GCM Broadcast Receiver dans votre balise d'application:
<application
<receiver
Android:name=".GcmBroadcastReceiver"
Android:permission="com.google.Android.c2dm.permission.SEND" ]]>
<intent-filter]]>
<action Android:name="com.google.Android.c2dm.intent.RECEIVE" />
<category Android:name="" />
</intent-filter]]>
</receiver]]>
<application/>
Ajouter une déclaration de service GCM
<application
<service Android:name=".GcmIntentService" />
<application/>
Maintenant, allez à votre activité de lancement/Splash
Ajouter des constantes et des variables de classe
private final static int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;
public static final String EXTRA_MESSAGE = "message";
public static final String PROPERTY_REG_ID = "registration_id";
private static final String PROPERTY_APP_VERSION = "appVersion";
private final static String TAG = "LaunchActivity";
protected String SENDER_ID = "Your_sender_id";
private GoogleCloudMessaging gcm =null;
private String regid = null;
private Context context= null;
Mettre à jour les méthodes OnCreate et OnResume
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_launch);
context = getApplicationContext();
if (checkPlayServices()) {
gcm = GoogleCloudMessaging.getInstance(this);
regid = getRegistrationId(context);
if (regid.isEmpty()) {
registerInBackground();
} else {
Log.d(TAG, "No valid Google Play Services APK found.");
}
}
}
@Override
protected void onResume() {
super.onResume();
checkPlayServices();
}
// # Implement GCM Required methods(Add below methods in LaunchActivity)
private boolean checkPlayServices() {
int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if (resultCode != ConnectionResult.SUCCESS) {
if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
GooglePlayServicesUtil.getErrorDialog(resultCode, this,
PLAY_SERVICES_RESOLUTION_REQUEST).show();
} else {
Log.d(TAG, "This device is not supported - Google Play Services.");
finish();
}
return false;
}
return true;
}
private String getRegistrationId(Context context) {
final SharedPreferences prefs = getGCMPreferences(context);
String registrationId = prefs.getString(PROPERTY_REG_ID, "");
if (registrationId.isEmpty()) {
Log.d(TAG, "Registration ID not found.");
return "";
}
int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE);
int currentVersion = getAppVersion(context);
if (registeredVersion != currentVersion) {
Log.d(TAG, "App version changed.");
return "";
}
return registrationId;
}
private SharedPreferences getGCMPreferences(Context context) {
return getSharedPreferences(LaunchActivity.class.getSimpleName(),
Context.MODE_PRIVATE);
}
private static int getAppVersion(Context context) {
try {
PackageInfo packageInfo = context.getPackageManager()
.getPackageInfo(context.getPackageName(), 0);
return packageInfo.versionCode;
} catch (NameNotFoundException e) {
throw new RuntimeException("Could not get package name: " + e);
}
}
private void registerInBackground() {
new AsyncTask() {
@Override
protected Object doInBackground(Object...params) {
String msg = "";
try {
if (gcm == null) {
gcm = GoogleCloudMessaging.getInstance(context);
}
regid = gcm.register(SENDER_ID);
Log.d(TAG, "########################################");
Log.d(TAG, "Current Device's Registration ID is: " + msg);
} catch (IOException ex) {
msg = "Error :" + ex.getMessage();
}
return null;
}
protected void onPostExecute(Object result) {
//to do here
};
}.execute(null, null, null);
}
Remarque : veuillez stocker REGISTRATION_KEY
, il est important d'envoyer un message PN à GCM. Gardez également à l'esprit: cette clé sera unique pour tous les appareils et GCM enverra des notifications push par REGISTRATION_KEY
seulement.
En réponse à votre première question: Oui, vous devez exécuter une application serveur pour envoyer les messages, ainsi qu'une application client pour les recevoir.
En réponse à votre deuxième question: Oui, chaque application a besoin de sa propre clé API. Cette clé est destinée à votre application serveur, pas au client.
Utilisez ce code pour obtenir l'ID d'enregistrement à l'aide de GCM
String regId = "", msg = "";
public void getRegisterationID() {
new AsyncTask() {
@Override
protected Object doInBackground(Object...params) {
String msg = "";
try {
if (gcm == null) {
gcm = GoogleCloudMessaging.getInstance(Login.this);
}
regId = gcm.register(YOUR_SENDER_ID);
Log.d("in async task", regId);
// try
msg = "Device registered, registration ID=" + regId;
} catch (IOException ex) {
msg = "Error :" + ex.getMessage();
}
return msg;
}
}.execute(null, null, null);
}
et n'oubliez pas d'écrire des autorisations dans le manifeste ...
J'espère que ça aide!