所以我们有一个iOS应用程序和一个Android应用程序,每个都使用他们各自的通知方法框架... iOS有推送和Android有C2DM(直到我们把它带到GCM)...所有在iOS上都很好,但是我正在寻找一种通过点击C2DM消息来检测应用程序是否已启动的方法(类似于iOS上didFinishLaunchingWithOptions的功能)。
目前,当在Android上收到推送消息时,我根据消息的有效负载中包含的数据执行我需要做的任何处理...所以当用户启动应用程序时,他们的经验取决于其中的内容推送消息。无论是通过按主屏幕/历史记录上的图标还是按下消息启动它们都是如此。理想情况下,我们只有在选择该消息时才会发生这种情况,并且如果他们从主页/历史记录屏幕中选择应用程序,那么它应该正常启动。
答案 0 :(得分:0)
您可以在GCMIntentService intent类中的onMessage侦听器的SharedPreferences中保存一些数据。毕竟GCM监听器属于你的包应用程序。 您保存的内容取决于您的应用程序和消息有效负载,但它可能是您想要的任何内容。 然后在单击通知时启动的Activity的onCreate函数上,您阅读共享首选项以查看您是否来自GCM通知。请记住清除您在SharedPreferences中保存的变量,以便下次用户打开应用程序时,它会正确显示内容。
这里有一个例子。不幸的是我现在无法尝试,但看到这个想法很有用。它与G2DM非常相似,所以你必须在你的情况下寻找相同的东西。
public class GCMIntentService extends GCMBaseIntentService {
/*... other functions of the class */
/**
* Method called on Receiving a new message
* */
@Override
protected void onMessage(Context context, Intent intent) {
Log.i(TAG, "Received message");
String message = intent.getExtras().getString("your_message");
// notifies user
generateNotification(context, message);
}
/**
* Issues a notification to inform the user that server has sent a message.
*/
private static void generateNotification(Context context, String message) {
int icon = R.drawable.ic_launcher;
long when = System.currentTimeMillis();
NotificationManager notificationManager = (NotificationManager)
context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new Notification(icon, message, when);
// Save your data in the shared preferences
SharedPreferences prefs = getSharedPreferences("YourPrefs", MODE_PRIVATE);
SharedPreferences.Editor prefEditor = prefs.edit();
prefEditor.putBoolean("comesFromGCMNotification", true);
prefEditor.commit();
String title = context.getString(R.string.app_name);
Intent notificationIntent = new Intent(context, MainActivity.class);
// set intent so it does not start a new activity
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent intent =
PendingIntent.getActivity(context, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, title, message, intent);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
// Play default notification sound
notification.defaults |= Notification.DEFAULT_SOUND;
// Vibrate if vibrate is enabled
notification.defaults |= Notification.DEFAULT_VIBRATE;
notificationManager.notify(0, notification);
}
}