您的位置:首页 > 移动开发 > Android开发

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源码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: