Android集成友盟推送
2016-07-28 15:03
656 查看
概述
之前我们研究过极光推送,感兴趣的朋友可以看下Android集成极光推送,友盟推送也是用的比较多的,当然也要研究一下了。官网地址如下友盟官网地址
集成
登录成功以后,我们选择自己需要的服务可以看到,我已经创建好了一个应用,如果你想创建新的,点击右边添加新应用,然后填写信息
填写成功后,出现下面的页面
接下来就是去下载SDK了。下载成功之后解压,目录如下
我们这里只关注最后两个,分别是Demo和SDK,我们先把SDK导入到Android Studio中,然后和我们的项目进行关联。
接下来配置清单文件
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.administrator.myapplication"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:name=".DemoApplication" android:theme="@style/Theme.AppCompat.Light.NoActionBar"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <service android:name="com.umeng.message.example.MyPushIntentService" android:process=":push" /> <!-- 使用完全自定义消息来开启应用的服务进程的示例服务配置 --> <!-- 不是必需的服务,可以根据开发者的需求进行设置 --> <service android:name="com.umeng.message.example.NotificationService" /> <meta-data android:name="UMENG_APPKEY" android:value="5799ef2267e58e3332002d93" > </meta-data> <meta-data android:name="UMENG_MESSAGE_SECRET" android:value="31959514924e0cfb2357f9e970111154" > </meta-data> <meta-data android:name="UMENG_CHANNEL" android:value="Umeng" > </meta-data> </application> </manifest>
主要是填入推送Service和UMENG_APPKEY以及UMENG_MESSAGE_SECRET。
然后配置我们的Application
public class DemoApplication extends Application { private PushAgent mPushAgent; @Override public void onCreate() { super.onCreate(); mPushAgent = PushAgent.getInstance(this); mPushAgent.setDebugMode(true); //该类负责处理消息,包括通知消息和自定义消息 UmengMessageHandler messageHandler = new UmengMessageHandler(){ @Override public void dealWithCustomMessage(final Context context, final UMessage msg) { new Handler().post(new Runnable() { @Override public void run() { // TODO Auto-generated method stub // 对自定义消息的处理方式,点击或者忽略 boolean isClickOrDismissed = true; if(isClickOrDismissed) { //自定义消息的点击统计 UTrack.getInstance(getApplicationContext()).trackMsgClick(msg); } else { //自定义消息的忽略统计 UTrack.getInstance(getApplicationContext()).trackMsgDismissed(msg); } Toast.makeText(context, msg.custom, Toast.LENGTH_LONG).show(); } }); } /** * 参考集成文档的1.6.4 * http://dev.umeng.com/push/android/integration#1_6_4 * */ @Override public Notification getNotification(Context context, UMessage msg) { switch (msg.builder_id) {//builder_id通知栏样式 case 0: NotificationCompat.Builder builder = new NotificationCompat.Builder(context); RemoteViews myNotificationView = new RemoteViews(context.getPackageName(), R.layout.notification_view); //设置标题文字及颜色 myNotificationView.setTextViewText(R.id.notification_title, msg.title); myNotificationView.setTextColor(R.id.notification_title, Color.RED); //设置内容以及颜色 myNotificationView.setTextViewText(R.id.notification_text, msg.text); Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon_qq); myNotificationView.setImageViewBitmap(R.id.notification_large_icon, bitmap); builder.setContent(myNotificationView) .setSmallIcon(getSmallIconId(context, msg)) .setTicker(msg.ticker) .setAutoCancel(true); return builder.build(); default: //默认为0,若填写的builder_id并不存在,也使用默认。 return super.getNotification(context, msg); } } }; mPushAgent.setMessageHandler(messageHandler); UmengNotificationClickHandler notificationClickHandler = new UmengNotificationClickHandler(){ @Override public void dealWithCustomAction(Context context, UMessage msg) { Toast.makeText(context, msg.custom, Toast.LENGTH_LONG).show(); } //打开Activity @Override public void openActivity(Context context, UMessage uMessage) { super.openActivity(context, uMessage); } //启动app @Override public void launchApp(Context context, UMessage uMessage) { super.launchApp(context, uMessage); } //打开url @Override public void openUrl(Context context, UMessage uMessage) { super.openUrl(context, uMessage); } }; mPushAgent.setNotificationClickHandler(notificationClickHandler); /** * 以上代码需在Application的onCreate()中调用使用以下接口,而不是在Activity 中调用。如果在Activity中调用此接口,若应用进程关闭,则设置的接口会无效。请参考: demo 应用代码 该Handler是在BroadcastReceiver中被调用。因此若需启动Activity,需为Intent添加Flag:Intent.FLAG_ACTIVITY_NEW_TASK,否则无法启动Activity。 若开发者想自己处理打开网页、打开APP、打开Activity,可重写相应的函数来实现。 */ } }
最后是主Activity
public class MainActivity extends AppCompatActivity { //DeviceToken private TextView mToken; //包名 private TextView mPackagename; //是否注册 private TextView mIsRegister; private PushAgent mPushAgent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mToken = (TextView) findViewById(R.id.tv_devicetoken); mPackagename = (TextView) findViewById(R.id.tv_packagename); mIsRegister = (TextView) findViewById(R.id.tv_isregistered); mPushAgent = PushAgent.getInstance(this); mPushAgent.onAppStart(); mPushAgent.enable(mRegisterCallback); } private Handler mHandler = new Handler(); //此处是注册的回调处理 public IUmengRegisterCallback mRegisterCallback = new IUmengRegisterCallback() { @Override public void onRegistered(String registrationId) { // TODO Auto-generated method stub mHandler.post(new Runnable() { @Override public void run() { // TODO Auto-generated method stub updateStatus(); } }); } }; private void updateStatus() { mToken.setText("deviceToken: "+mPushAgent.getRegistrationId()); // System.out.println("===========device: "+mPushAgent.getRegistrationId()); mPackagename.setText("包名: "+getPackageName()); mIsRegister.setText("isRegistered: "+mPushAgent.isRegistered()); } //自定义通知栏样式 // public void click(View view){ // NotificationCompat.Builder builder = new NotificationCompat.Builder(this); // RemoteViews myNotificationView = new RemoteViews(this.getPackageName(), R.layout.notification_view); // myNotificationView.setTextViewText(R.id.notification_title, "标题"); // myNotificationView.setTextViewText(R.id.notification_text, "内容"); // Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon_qq); // myNotificationView.setImageViewBitmap(R.id.notification_large_icon, bitmap); // builder.setContent(myNotificationView) // .setSmallIcon(R.mipmap.ic_launcher) // .setTicker("来了") // .setAutoCancel(true); // Notification notification = builder.build(); // NotificationManager managerCompat = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); // managerCompat.notify(123,notification); // } }
经过上面的步骤,经过测试,已经可以接收到推送的消息了,更多高级功能,请大家参照官方文档,这里就不详细介绍了。
最后给出代码下载地址
点此下载Demo源码
相关文章推荐
- Android4.4 WebAPI实现拍照上传功能
- 【Android】Merge讲解与实例
- 炫酷的circleprogress
- Android Service的生命周期
- android 对gif图片的简单使用记录
- android recycleView局部刷新的选择
- Android 图片加载方式
- Android AndFix 热修复 使用
- Android Service 生命周期和使用注意项
- Android 调用系统相机处理大图片问题
- Android Studio导入github下载的project和module的正确姿势
- Android性能优化——布局优化
- 走向设计(单例模式)
- Android 动画之RotateAnimation应用详解
- android学习摘记——通过adb工具查看sqlite3数据库
- Android开发笔记(二)常见的正则校验—持续收录中
- Android热补丁动态修复实践
- Android ToolBar使用总结
- Android事件监听回调学习
- 如何在Android Studio使用Espresso框架自动化测试