前面怎么实现不赘述,照着下面链接的官方文档来就可以了
http://dev.umeng.com/sdk_integate/android_sdk/android_push_doc#5
写这篇博客的主要原因是,友盟的官方文档聚合小米华为推送中使用小米弹窗功能(使用华为弹窗同)时,很操蛋的只写了一半,如下图
只写了用handler发送信息,并没有说handler里是怎么处理的,最后我自己打印log,获取信息到信息看了下跟UMessage类是一样的就用gson将其转为UMessage对象,handler的处理的具体如下
public class MipushActivity extends UmengNotifyClickActivity {private static String TAG = MipushActivity.class.getName();@SuppressLint("HandlerLeak")private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);Intent intent = new Intent(MipushActivity.this, SplashActivity.class);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);addMessageToIntent(intent, (UMessage) msg.obj);Log.d("TEST", "uMessage:" + msg.obj.toString());startActivity(intent);finish();}};@Overrideprotected void onCreate(Bundle bundle) {super.onCreate(bundle);setContentView(R.layout.fragment_splash);}@Overridepublic void onMessage(Intent intent) {super.onMessage(intent); //此方法必须调用,否则无法统计打开数String body = intent.getStringExtra(AgooConstants.MESSAGE_BODY);UmLog.i(TAG, body);Log.d("TEST", "body:" + body);UMessage uMessage = new Gson().fromJson(body, UMessage.class);Message message = Message.obtain();message.obj = uMessage;handler.sendMessage(message);}/*** 用于将UMessage中自定义参数的值放到intent中传到SplashActivity中,SplashActivity中对友盟推送时自定义消息作了专门处理* @param intent 需要增加值得intent* @param msg 需要增加到intent中的msg*/private void addMessageToIntent(Intent intent, UMessage msg) {if (intent == null || msg == null || msg.extra == null) {return;}for (Map.Entry<String, String> entry : msg.extra.entrySet()) {String key = entry.getKey();String value = entry.getValue();if (key != null) {intent.putExtra(key, value);}}}}
注意不打算让该activity显示的话可以在AndroidManifest里配置theme
如下
<!--小米弹窗功能activity--><activity android:name=".page.umeng.MipushActivity"android:exported="true"android:theme="@android:style/Theme.NoDisplay"/>
为了防止部分系统出现配置时效,可以在此activity setContentView时将其布局设置的跟应用的首屏页面一样,一般应用首屏都是一张图片的,这样即使失效也只会以为是应用启动信息