Android - 我如何发送 GCM 推送通知,其中包含要加载哪个活动的说明?

Posted

技术标签:

【中文标题】Android - 我如何发送 GCM 推送通知,其中包含要加载哪个活动的说明?【英文标题】:Android - how can I send a GCM push notification with instructions of which activity to load? 【发布时间】:2013-03-11 21:50:41 【问题描述】:

我能够创建推送通知。但目前我只能让人们登陆主屏幕。

如何将人们发送到特定的活动?是否也可以添加一些参数,如 item_id,以便活动知道要加载哪些数据?

或者,如果某处有一个很好的教程,那也很棒。我似乎真的无法通过谷歌搜索找到很多关于此的好信息。

在我的 GCMIntentService 中,我有这个方法:

      @Override
      protected void onMessage(Context ctxt, Intent message) 
                 
        Bundle extras=message.getExtras();

        try
        
            String question_id = extras.getString("question_id");
//          SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences( this );
//          Intent intent = new Intent(ctxt, QuestionActivity.class);

            generateNotification(ctxt, extras.getString("message"), "New Message"  );           
        
        catch ( Exception e )
        
        
      

但我不确定如何更改 generateNotification 以指示该人应该登陆什么活动。 谢谢!

【问题讨论】:

【参考方案1】:

更新: 将 JSON 归功于 Eran,我只想详细说明。

您可以使用数据键添加其他参数:


   "registration_ids" : ["APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx..."],
   "data": 
       "stuff": "100",
       "more": "abc"
   ,

然后使用intent.getExtras().getString("stuff")以同样的方式访问。

都是here。

然后在你的generateNotifcation():

private static void generateNotification(Context context, String message) 
    NotificationManager notificationManager = (NotificationManager)
        context.getSystemService(Context.NOTIFICATION_SERVICE);
    Notification notification = new Notification(R.drawable.ic_launcher, message, when);
    String title = "...";


    //get id from json here and decide which activity to go to...
    Intent notificationIntent = new Intent(context, someClass.class);


    notificationIntent.putExtra("message",message);
    PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent,PendingIntent.FLAG_UPDATE_CURRENT);
    notification.setLatestEventInfo(context, title, message, intent);
    notification.defaults|=Notification.DEFAULT_VIBRATE;
    notificationManager.notify(0, notification);

【讨论】:

其实有一个问题:一旦我发送并解析了额外的参数,如何将它保存到 SharedPreferences 之类的东西中? 其实我可能说错了。我在用手机我会在我回到电脑前更新。抱歉尽快更新。 谢谢...我认为从服务器发送 id 以及通知是有意义的。我刚刚实现了。诀窍是如何在调用 generateNotification(ctxt, extras.getString("message"), "New Message"); 时指定要转到的 Activity; 来自generateNotification,你能解析出id然后创建一个意图intent = new Intent(ctxt, someClass.class),其中someClass会根据id而变化吗? 是的,我可以这样做,但方法定义是(上下文、字符串、字符串)......除非我没有看到其他选项。如果我们在其中传递意图,这个调用会是什么样子?【参考方案2】:

当然可以添加item_id之类的参数。您可以将所需的任何参数添加到通知中。与 Apple Push Notifications 不同,没有预定义的有效负载参数,因此就像您有一个 message 参数一样,您可以有任何其他带有字符串值的参数(只要参数名称和值的总长度不通过4096 字节)。

至于从通知中加载活动,您可以找到所需的一切here。

【讨论】:

也谢谢你。你们俩都非常有帮助:)

以上是关于Android - 我如何发送 GCM 推送通知,其中包含要加载哪个活动的说明?的主要内容,如果未能解决你的问题,请参考以下文章

向 Android 应用程序用户发送推送通知

如何使用 GCM 在 android 设备上分别显示每个推送通知

使用 c# .net 发送带有图像的 GCM 推送通知(适用于 android 应用程序)

Android - 将用户发送到 Activity 的 GCM 推送通知不会导致 onCreate 调用

使用自定义声音向 android 发送 GCM 推送通知

从 web 上的 fcm 向现有 gcm 用户发送推送通知