JPush推送

在AndroidManifest.xml加入以下代码:

 <!-- Required SDK核心功能-->
        <activity
            android:name="cn.jpush.android.ui.PushActivity"
            android:configChanges="orientation|keyboardHidden"
            android:theme="@android:style/Theme.NoTitleBar"
            android:exported="false">
            <intent-filter>
                <action android:name="cn.jpush.android.ui.PushActivity" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="com.shipping" />
            </intent-filter>
        </activity>
        
        
        
        
        
        
        <!-- Required  SDK核心功能 -->
        <service
            android:name="cn.jpush.android.service.DownloadService"
            android:enabled="true"
            android:exported="false" >
        </service>
        <!-- ANT FALG END1 -->


        <!-- Required SDK 核心功能 -->
        <service
            android:name="cn.jpush.android.service.PushService"
            android:enabled="true"
            android:exported="false" >
            <intent-filter>
                <action android:name="cn.jpush.android.intent.REGISTER" />
                <action android:name="cn.jpush.android.intent.REPORT" />
                <action android:name="cn.jpush.android.intent.PushService" />
                <action android:name="cn.jpush.android.intent.PUSH_TIME" />
            </intent-filter>
        </service>

        
          <!-- since 1.8.0 option 可选项。用于同一设备中不同应用的JPush服务相互拉起的功能。 -->
        <!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 -->
        <service
            android:name="cn.jpush.android.service.DaemonService"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="cn.jpush.android.intent.DaemonService" />
                <category android:name="com.shipping" />
            </intent-filter>

        </service>
        
        
         
        <!-- Required SDK核心功能-->
        <receiver
            android:name="cn.jpush.android.service.PushReceiver"
            android:enabled="true"
            android:exported="false">
             <intent-filter android:priority="1000">
                <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />   <!--Required  显示通知栏 -->
                <category android:name="com.shipping" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.USER_PRESENT" />
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
             <!-- Optional -->
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_ADDED" />
                <action android:name="android.intent.action.PACKAGE_REMOVED" />
                <data android:scheme="package" />
            </intent-filter>
   
        </receiver>

        <!-- Required SDK核心功能 -->
        <receiver android:name="cn.jpush.android.service.AlarmReceiver" android:exported="false"/>

        <!-- User defined.  For test only  用户自定义的广播接收器 -->
        <receiver
            android:name="com.shipping.service.TalkReceiver"
             android:exported="false"
            android:enabled="true" >
            <intent-filter>
                <action android:name="cn.jpush.android.intent.REGISTRATION" /> <!--Required  用户注册SDK的intent-->
                <action android:name="cn.jpush.android.intent.UNREGISTRATION" />  
                <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" /> <!--Required  用户接收SDK消息的intent-->
                <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" /> <!--Required  用户接收SDK通知栏信息的intent-->
                <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" /> <!--Required  用户打开自定义通知栏的intent-->
                <action android:name="cn.jpush.android.intent.ACTION_RICHPUSH_CALLBACK" /> <!--Optional 用户接受Rich Push Javascript 回调函数的intent-->
                <action android:name="cn.jpush.android.intent.CONNECTION" /><!-- 接收网络变化 连接/断开 since 1.6.3 -->
                <category android:name="com.shipping" />
            </intent-filter>
        </receiver>

        <!-- Required  . Enable it you can get statistics data with channel -->
        <meta-data
            android:name="JPUSH_CHANNEL"
            android:value="developer-default" />
        <meta-data
            android:name="JPUSH_APPKEY"
            android:value="5a603b9fd7831099a1bfe468" />
    </application>

  
    <uses-permission android:name="com.shipping.permission.JPUSH_MESSAGE" />
    <uses-permission android:name="android.permission.SET_WALLPAPER" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
接收推送消息的Receiver

package com.shipping.service;

import org.json.JSONException;
import org.json.JSONObject;

import com.shipping.activity.ship.MyInquiryPalletDetailActivity;
import com.shipping.activity.ship.MyInquiryPalletDlActivity;
import com.shipping.app.IntentAction;
import com.shippingframework.app.Config;
import com.shippingframework.sharedpreferences.AppSharedPreferences;
import com.shippingframework.utils.JsonUtil;
import com.shippingframework.utils.L;
import cn.jpush.android.api.JPushInterface;
import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

public class TalkReceiver extends BroadcastReceiver {

	private static final String TAG = "TalkReceiver";

	private NotificationManager nm;

	@Override
	public void onReceive(Context context, Intent intent) {
		// TODO Auto-generated method stub

		if (null == nm) {
			nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
		}

		Bundle bundle = intent.getExtras();
		// L.i(TAG, "onReceive - " + intent.getAction() + ", extras: " +
		// AndroidUtil.printBundle(bundle));
		L.i(TAG, "onReceive - " + intent.getAction());

		if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
			L.i(TAG, "JPush用户注册成功");

		} else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
			L.i(TAG, "接受到推送下来的自定义消息");

			// Push Talk messages are push down by custom message format
			processCustomMessage(context, bundle);

		} else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent
				.getAction())) {
			L.i(TAG, "接受到推送下来的通知");

		} else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
			L.i(TAG, "用户点击打开了通知");
//			Intent i = new Intent(
//					context,
//					MyInquiryPalletDlActivity.class);
//			i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//			context.startActivity(i);
			

		} else {
			L.i(TAG, "Unhandled intent - " + intent.getAction());
		}
	}
	
	
	
	 private void processCustomMessage(Context context, Bundle bundle) {
	        String title = bundle.getString(JPushInterface.EXTRA_TITLE);
	        String message = bundle.getString(JPushInterface.EXTRA_MESSAGE);
	        Log.d(TAG, "[processCustomMessage]msg_content: " + bundle.getString(JPushInterface.EXTRA_MESSAGE));
	        Log.d(TAG, "[processCustomMessage]content_type: " + bundle.getString(JPushInterface.EXTRA_CONTENT_TYPE));
	        Log.d(TAG, "[processCustomMessage]extras: " + bundle.getString(JPushInterface.EXTRA_EXTRA));
	        Log.d(TAG, "[processCustomMessage]title: " + bundle.getString(JPushInterface.EXTRA_TITLE));
	        if (title.equals("")||title.length()<1) {
	            L.i(TAG, "Unexpected: empty title (friend). Give up");
	            return;
	        }
	        
	        boolean needIncreaseUnread = true;
	        
//	        if (title.equalsIgnoreCase(Config.myName)) {
//	            Logger.d(TAG, "Message from myself. Give up");
//	            needIncreaseUnread = false;
//	            if (!Config.IS_TEST_MODE) {
//	                return;
//	            }
//	        }
	        
	        String friendName="";
	        int friendId=0;
	        int notificationId=0;
	        
	     //   String channel = null;
	        String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);
	        try {
	            JSONObject extrasJson = new JSONObject(extras);
	            
	            friendName=JsonUtil.getString(extrasJson, "SendNickName");
	            friendId=JsonUtil.getInt(extrasJson, "toUserId");
	            notificationId=JsonUtil.getInt(extrasJson, "ChatRecordId");
	            
	        } catch (Exception e) {
	            L.i(TAG, "Unexpected: extras is not a valid json"+e);
	        }
	        
	        // Send message to UI (Webview) only when UI is up 
	        if (!Config.isBackground) {
	            Intent msgIntent = new Intent(IntentAction.MESSAGE_RECEIVED_ACTION);
	            msgIntent.putExtra(IntentAction.CHAT_KEY_MESSAGE, message);
	            msgIntent.putExtra(IntentAction.CHAT_KEY_TITLE, title);
//	            if (null != channel) {
//	                msgIntent.putExtra(Constants.KEY_CHANNEL, channel);
//	            }
	            
	            JSONObject all = new JSONObject();
	            try {
	               // all.put(IntentAction.CHAT_KEY_TITLE, title);
	                all.put(IntentAction.CHAT_KEY_MESSAGE, message);
	                //all.put(IntentAction.CHAT_KEY_EXTRAS, new JSONObject(extras));
	                all.put(IntentAction.CHAT_KEY_EXTRAS, new JSONObject(extras));
	            } catch (JSONException e) {
	            }
	            
	            L.i(TAG,  "---------all="+all.toString());
	            msgIntent.putExtra("all", all.toString());
	            
	            context.sendBroadcast(msgIntent);
	        }
	        
	        AppSharedPreferences appSP=new AppSharedPreferences(context,AppSharedPreferences.CHATTING_SHAREPRE_FILE);
//	        
	        String currentChatting = appSP.getChattingCurrentId();
	        if ((friendId+"").equalsIgnoreCase(currentChatting)) {
	            L.d(TAG, "Is now chatting with - " + friendId + ". Dont show notificaiton.");
	            return;
	        }
	        NotificationHelper.showMessageNotification(context, nm, friendId,friendName, notificationId,message);
	    }

	
	 
	 // When received message, increase unread number for Recent Chat
//	    private void unreadMessage(final String friend, final String channel) {
//	        new Thread() {
//	            public void run() {
//	                String chattingFriend = null;
//	                //if (StringUtils.isEmpty(channel)) {
//	                    chattingFriend = friend;
//	                //}
//	                
//	                Map<String, String> params = new HashMap<String, String>();
//	                params.put("udid", Config.udid);
//	                params.put("friend", chattingFriend);
//	                params.put("channel_name", channel);
//	                
//	                try {
//	                    HttpHelper.post(Constants.PATH_UNREAD, params);
//	                } catch (Exception e) {
//	                    Logger.e(TAG, "Call pushtalk api to report unread error", e);
//	                }
//	            }
//	        }.start();
//	    }
	 

}

用户登录app成功后,把UserIntId发送给极光推送的后台,后边就可以给这个用户推送消息

package com.shipping.activity;

import java.util.Set;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import cn.jpush.android.api.JPushInterface;
import cn.jpush.android.api.TagAliasCallback;

import com.shipping.R;
import com.shippingframework.entity.UserOnlineEntity;
import com.shippingframework.http.ResponseInfo;
import com.shippingframework.services.UserService;
import com.shippingframework.sharedpreferences.AppSharedPreferences;
import com.shippingframework.utils.L;
import com.shippingframework.utils.T;
import com.shippingframework.utils.TextViewUtil;
import com.shippingframework.utils.ValidateUtil;

public class LoginActivity extends ShipBaseActivity {

	// button layout

	private TextView login_forget_password;
	private TextView goto_register;
	private EditText login_account;
	private EditText login_password;

	private Button btn_login;

	/**
	 * 用户级别的配置文件
	 * */
	private AppSharedPreferences userSP;

	private AppSharedPreferences appSP;

	private static final int LOGIN_COMPLETE = 1;

	private String uAccount = "";
	private String uPassword = "";
	
	private String TAG="LoginActivity";
	
	private static final int MSG_SET_ALIAS = 1001;
	private static final int MSG_SET_TAGS = 1002;

	private int UserIntId=0;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		context = this;
		title = "登录";
		// 设置视图
		setContentView(R.layout.activity_login);

		// 获得实例对象
		userSP = new AppSharedPreferences(context,
				AppSharedPreferences.USER_SHAREPRE_FILE);
		appSP = new AppSharedPreferences(context,
				AppSharedPreferences.APP_SHAREPRE_FILE);

		InitView();
		InitData();
	}

	@Override
	protected void InitView() {
		super.InitView();
		login_account = (EditText) findViewById(R.id.login_account);
		btn_login = (Button) findViewById(R.id.btn_login);
		login_password = (EditText) findViewById(R.id.login_password);

		login_forget_password = (TextView) findViewById(R.id.Login_forget_password);
		goto_register = (TextView) findViewById(R.id.goto_register);

		TextViewUtil.setFlagsUnderline(login_forget_password);
	}

	@Override
	protected void InitData() {
		// TODO Auto-generated method stub
		super.InitData();

		// 登录
		btn_login.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				uAccount = login_account.getText().toString().trim();
				uPassword = login_password.getText().toString().trim();
				Login(uAccount, uPassword);
			}
		});

		// 忘记密码
		login_forget_password.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// TODO 自动生成的方法存根

				 startActivity(new
				 Intent(context,ForgetPasswordActivity.class));

				goFinish();
			}
		});

		// 用户注册
		goto_register.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// TODO 自动生成的方法存根

				startActivity(new Intent(context, RegisterActivity.class));

				goFinish();
			}
		});

		login_account.setText(appSP.getAppDefaultAccount());
		login_password.setText(appSP.getAppDefaultPwd());

		Intent intent = getIntent(); // 用于激活它的意图对象
		if (intent != null) {
			String phone = intent.getStringExtra("phone");
			String password = intent.getStringExtra("password");
			if (phone != null && !phone.equals("")) {
				login_account.setText(phone);
				if (password != null && !password.equals("")) {
					login_password.setText(password);
				}
			}
		}

		// 实现自动登录
		uAccount = login_account.getText().toString().trim();
		uPassword = login_password.getText().toString().trim();
		if (uAccount != null && !uAccount.equals("") && uPassword != null
				&& !uPassword.equals("")) {
			// if (StringUtil.isMobileNO(mAccount)) {
			Login(uAccount, uPassword);
			// }
		}
	}

	protected void Login(final String uAccount, final String uPassword) {

		if (uAccount != null && !uAccount.equals("") && uPassword != null
				&& !uPassword.equals("")) {
			
			if(ValidateUtil.IsMobile(uAccount)){
				UserService userService = new UserService(context);
				loading.show();
				userService.Login(uAccount, uPassword, mHandler);
			}else{
				T.show(context, "帐号格式不正确");	
			}

		} else {
			T.show(context, "账户和密码不能为空");
		}
	}

	Handler mHandler = new Handler() {
		@SuppressLint("HandlerLeak")
		public void handleMessage(android.os.Message msg) {
			responseInfo = (ResponseInfo<?>) msg.obj;
			loading.cancel();
			switch (msg.what) {
			case LOGIN_COMPLETE: {
				if (responseInfo != null) {
					if (responseInfo.success) {
						UserOnlineEntity userOnline = (UserOnlineEntity) responseInfo.t;
						if (userOnline != null&& !userOnline.getUserId().equals("")&& userOnline.getUserId().length() > 0) {
							resetAliasAndTags();
							T.show(context, "登录成功");
					         
						} else {
							T.show(context, "登录失败");
						}
						goFinish();
					} else {
						T.show(context, responseInfo.message);
					}
				} else {
					T.show(context, "服务器请求无响应");
				}
			}
				break;
			default:
				break;
			}
		};
	};

	public void goFinish() {
		this.finish();
	}


	private void resetAliasAndTags() {
		L.i(TAG, "----------------------------------resetAliasAndTags begin");

		// reset to jpush
		// JPushInterface.setAliasAndTags(ChattingActivity.this, UserIntId+"",
		// null, new TagAliasCallback() {
		//
		// @Override
		// public void gotResult(int code, String alias, Set<String> tags) {
		// L.i(TAG, "[TagAliasCallback], code: " + code);
		// L.i(TAG, "[TagAliasCallback], alias: " + alias);
		// L.i(TAG, "[TagAliasCallback], tags: " + tags);
		// }
		// });

		UserIntId = userSP.getUserIntId();

		L.i(TAG,
				"----------------------------------resetAliasAndTags UserIntId="
						+ UserIntId);

		if(UserIntId>0){
		// 调用JPush API设置Alias
		jpushHandler.sendMessage(jpushHandler.obtainMessage(MSG_SET_ALIAS,
				UserIntId + ""));
		}
		L.i(TAG, "----------------------------------resetAliasAndTags end");
	}

	private final TagAliasCallback mAliasCallback = new TagAliasCallback() {

		@Override
		public void gotResult(int code, String alias, Set<String> tags) {

			L.i(TAG, "[TagAliasCallback], code: " + code);
			L.i(TAG, "[TagAliasCallback], alias: " + alias);
			L.i(TAG, "[TagAliasCallback], tags: " + tags);

			String logs;
			switch (code) {
			case 0:
				logs = "Set tag and alias success";
				L.i(TAG, logs);
				break;

			case 6002:
				logs = "Failed to set alias and tags due to timeout. Try again after 60s.";
				L.i(TAG, logs);

				jpushHandler.sendMessageDelayed(
						jpushHandler.obtainMessage(MSG_SET_ALIAS, alias),
						1000 * 60);

				break;

			default:
				logs = "Failed with errorCode = " + code;
				L.i(TAG, logs);
			}

			// T.show(getApplicationContext(),logs);
		}

	};

	private final Handler jpushHandler = new Handler() {
		@Override
		public void handleMessage(android.os.Message msg) {
			super.handleMessage(msg);
			switch (msg.what) {
			case MSG_SET_ALIAS:
				L.i(TAG, "Set alias in handler.");
				JPushInterface.setAliasAndTags(getApplicationContext(),
						(String) msg.obj, null, mAliasCallback);
				break;

			// case MSG_SET_TAGS:
			// Log.d(TAG, "Set tags in handler.");
			// JPushInterface.setAliasAndTags(getApplicationContext(), null,
			// (Set<String>) msg.obj, mTagsCallback);
			// break;

			default:
				L.i(TAG, "Unhandled msg - " + msg.what);
			}
		}
	};
	
}

在主Activity中即
<application
        android:name="com.shipping.application.ShippingApplication"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/NormalTheme" >
        <activity
            android:name="com.shipping.activity.WelcomeActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

的onResume / onPause添加 JPushInterface.onResume( this );和 JPushInterface.onPause( this );

package com.shipping.activity;

import cn.jpush.android.api.JPushInterface;

import com.shipping.R;
import com.shipping.app.App;
import com.shipping.guide.GuideActivity;
import com.shippingframework.activity.BaseActivity;
import com.shippingframework.services.TokenService;
import com.shippingframework.services.UserService;
import com.shippingframework.sharedpreferences.AppSharedPreferences;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;



public class WelcomeActivity extends ShipBaseActivity{

	private AppSharedPreferences appSP;
	 
	// 延迟1秒
	private static final long SPLASH_DELAY_MILLIS = 1000*2;
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		instance=this;
		
		setContentView(R.layout.activity_welcome);
		
		
		new App(instance);
		appSP=new AppSharedPreferences(instance,AppSharedPreferences.APP_SHAREPRE_FILE);
		
	
		ApplicationInit();
		
		// 使用Handler的postDelayed方法,3秒后执行跳转到MainActivity
		new Handler().postDelayed(new Runnable() {
			public void run() {
				goHome();
			}
		}, SPLASH_DELAY_MILLIS);
		  
	}

	private void ApplicationInit(){
		
		//获取token
		TokenService tokenService=new  TokenService(instance);
		tokenService.GetAccessToken();
		
		//系统自动登录
		UserService userService=new UserService(instance);
		userService.AutoLogin();
	}
	
	
	
	private void goHome() {
		
		if (appSP.getAppIsFirstRun()) {
			appSP.setAppIsFirstRun(false);
			Intent intent = new Intent(WelcomeActivity.this,GuideActivity.class);
			WelcomeActivity.this.startActivity(intent);
			WelcomeActivity.this.finish();
		} else {
			Intent intent = new Intent(WelcomeActivity.this, MainActivity.class);
			WelcomeActivity.this.startActivity(intent);
			WelcomeActivity.this.finish();
		}
			
	}
	
	
	@Override
	protected void onResume() {
	super.onResume();
		JPushInterface.onResume(this);
	}

	@Override
	protected void onPause() {
	super.onPause();
		JPushInterface.onPause(this);
	}
	
	
}

JPushInterface.onResume(this)开如统计,

JPushInterface.onPause(this);结束统计




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值