友盟推送的接入过程就不写了,接入依赖 so包之类的可能很顺利也可能很不顺利,有问题直接问客服吧。
自定义事件:
在Application中注册
PushAgent mPushAgent = PushAgent.getInstance(this);
//在这里自定义事件
mPushAgent.setNotificationClickHandler(new UmengNotificationClickHandler(){
@Override
public void handleMessage(Context context, UMessage uMessage) {
super.handleMessage(context, uMessage);
}
@Override
public void dismissNotification(Context context, UMessage uMessage) {
super.dismissNotification(context, uMessage);
}
@Override
public void autoUpdate(Context context, UMessage uMessage) {
super.autoUpdate(context, uMessage);
}
@Override
public void openUrl(Context context, UMessage uMessage) {
super.openUrl(context, uMessage);
}
@Override
public void openActivity(Context context, UMessage uMessage) {
super.openActivity(context, uMessage);
}
@Override
public void launchApp(Context context, UMessage uMessage) {
super.launchApp(context, uMessage);
}
@Override
public void dealWithCustomAction(Context context, UMessage uMessage) {
//uMessage.custom对应的是服务端 customizedcast.goCustomAfterOpen("xxx")传入的参数
//这里服务端写的是customizedcast.goCustomAfterOpen("sx")
Log.i(TAG, "dealWithCustomAction: "+uMessage.custom);
//先尝试启动app,app运行时也可以尝试启动,不会报错
launchApp(context, uMessage);
if (uMessage!=null&&uMessage.custom!=null){
switch (uMessage.custom){
case "sx":
Intent intent=new Intent(context,要跳转的页面);
//因为是在application中跳转页面,需要声明flag
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
break;
default:
break;
}
}
}
});
//注册推送服务,每次调用register方法都会回调该接口
mPushAgent.register(new IUmengRegisterCallback() {
@Override
public void onSuccess(String deviceToken) {
//注册成功会返回deviceToken deviceToken是推送消息的唯一标志
Log.i(TAG, "注册成功:deviceToken:--------> " + deviceToken);
}
@Override
public void onFailure(String s, String s1) {
Log.e(TAG, "注册失败:--------> " + "s:" + s + ",s1:" + s1);
}
});
接入厂商渠道
1、配置清单中配置部分渠道的信息,需要配置的信息查看文档
https://developer.umeng.com/docs/67966/detail/98589#h2–push-4
<application>
<!--华为push -->
<meta-data
android:name="com.huawei.hms.client.appid"
android:value="appid=xxxxx" />
<!-- vivo push参数声明 -->
<!-- vivo start -->
<meta-data
android:name="com.vivo.push.api_key"
android:value="xxxxx" />
<meta-data
android:name="com.vivo.push.app_id"
android:value="xxxxx" />
<!-- VIVO end -->
</>
2、Application中配置其余渠道的信息,并进行注册
一般在对应厂商开通服务后,会获得AppId Key Secret这三个参数,具体配置时不要参照下文中的标注,我记不住乱标的,请对照文档配置
我是在调用mPushAgent.register()
完成注册后再注册厂商渠道的
https://developer.umeng.com/docs/67966/detail/98589#h2–push-4
//小米推送
try {
MiPushRegistar.register(this, "你的ID", "你的KEY");
} catch (Exception e) {
e.printStackTrace();
}
//华为
try {
//AndroidManifest.xml中配置AppID,其中xxxxxx为华为应用的
HuaWeiRegister.register(this);AppID
} catch (Exception e) {
e.printStackTrace();
}
//OPPO通道,参数1为app key,参数2为app secret
try {
OppoRegister.register(this, "ID", "KEY");
} catch (Exception e) {
e.printStackTrace();
}
//vivo 通道
try {
VivoRegister.register(this);
} catch (Exception e) {
e.printStackTrace();
}
//魅族
try{
MeizuRegister.register(this, "ID", "KEY");
}catch (Exception e){
e.printStackTrace();
}
3、除魅族之外的厂商,都是通过这个Activity来实现的,这个Activity的路径要报给后端
MipushTestActivity.class
public class MipushTestActivity extends UmengNotifyClickActivity {
private static String TAG = MipushTestActivity.class.getName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mipush_test);
}
@Override
public void onMessage(Intent intent) {
super.onMessage(intent);
String body=intent.getStringExtra(AgooConstants.MESSAGE_BODY);
//这里应该是根据body,进行处理
}
}
配置清单中也需要修改
<activity
android:name="包名.MipushTestActivity"
android:exported="true"
android:launchMode="singleTask">
</activity>
4、魅族需要在包的根目录下单独配置一个Receiver
MeizuTestReceiver .class
public class MeizuTestReceiver extends MeizuPushReceiver {
@Override
public void onReceive(Context context, Intent intent) {
}
}
配置清单
<!--魅族push应用定义消息receiver声明 -->
<receiver android:name=".MeizuTestReceiver">
<intent-filter>
<!-- 接收push消息 -->
<action android:name="com.meizu.flyme.push.intent.MESSAGE" />
<!-- 接收register消息 -->
<action android:name="com.meizu.flyme.push.intent.REGISTER.FEEDBACK" />
<!-- 接收unregister消息-->
<action android:name="com.meizu.flyme.push.intent.UNREGISTER.FEEDBACK" />
<!-- 兼容低版本Flyme3推送服务配置 -->
<action android:name="com.meizu.c2dm.intent.REGISTRATION" />
<action android:name="com.meizu.c2dm.intent.RECEIVE" />
<category android:name="${applicationId}"></category>
</intent-filter>
</receiver>
同时要在友盟的后台中配置这些渠道的信息,配置完后可以测试离线推送。
注意需要在发送离线推送的API时添加
"mipush":true
"mi_activity":"com.umeng.message.example.MipushTestActivity" //此处请填写Activity完整包路径
参考
{
"appkey": "",
"mi_activity": "com.umeng.message.example.MipushTestActivity"
"mipush": true,
"timestamp": 1473225266373,
"production_mode": "true",
"type": "unicast",
"device_tokens": "",
"payload":
{"body":
{"text": "from pa36a",
"after_open": "go_app",
"ticker": "Hello World",
"title": "listcastpa43"
},
"display_type": "notification",
}
}
如果使用后台SDK发送的话,貌似要自己进行重写,来声明mipush和mi_activity这两个参数