Android集成友盟推送

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Small_Lee/article/details/52052986

概述

之前我们研究过极光推送,感兴趣的朋友可以看下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源码

没有更多推荐了,返回首页