Android端 配置极光推送

因为业务需要,android客户端需要加推送,原来采用的百度推送,但是小米手机有时候收不到,后来换成了极光推送,极光的话所有设备都能收到推送,但是在高峰的时候会推迟,博主说的免费版的,收费的没用过,也不错评论

博主用的android studio开发的,.so文件放置的位置啥的可能和eclipse有点不同,感觉用android studio开发jni一类的真的好费劲,博主现在老腻歪了,唉,废话不多说,进入正题:

首先,去极光推送官网注册一系列流程,不过貌似不用认证,老长时间注册的了,忘得差不多了,然后左侧有添加新应用

开始创建应用,注册的时候必须把包名写对,可以直接把清单文件中的包名复制就可了,当然,android studio一套代码开发多个包的话例外

这里有两个key,第一个的话是android客户端需要配置的,然后就是后台,后台两个都需要,注意的是包名一旦定义便不能更改,定义的话极光推送会自己校验的,给出相应的提示,告诉能不能使用。

再有就是将相应的配置到自己的app中,博主这里直接下载了相应的demo,进行配置,这里的话可以先运行demo,测试一下

因为这个demo的包名和自己的一样,所以只能存在一个demo,好,现在开始配置自己的demo

第一步需要创建两个包,下面用箭头标注了

这里吐槽一下,如果用android studio建立的工程更改过名字的话一般配置的话都不会配置成功的,貌似是因为c语言是弱语言的原因,所以说争取不要配置改过名的工程。

然后是配置lib包

再有就是配置清单文件,最重要的是前面那几行,还有就是service的intent的具体名称

这个千万不要忘了,博主第一次没注意就给忘了,收不到推送

再有就是配置服务,看过腾讯的飞鸽,感觉飞鸽的比极光要好点,能让服务的存活率更高,因为飞鸽的不仅用到了服务还用到了广播重启服务,而极光的仅仅用来接收推送消息有时间大家可以了解一下

名字和路径都要对应,再有就是需要初始化的

还有就是一个util,剩下的activity可以根据需要自己定义就可以了

还有就是xml文件,考进去就可以了

反过来看一下极光的demo

剩下的就是需要初始化,就是入口的activity,或者fragmentactivity,否则的话后台没有办法统计

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

package

cn.edu.sjzc.student.uiActivity;

import

android.content.BroadcastReceiver;

import

android.content.Context;

import

android.content.Intent;

import

android.content.IntentFilter;

import

android.content.SharedPreferences;

import

android.content.SharedPreferences.Editor;

import

android.os.Bundle;

import

android.os.Parcelable;

import

android.support.v4.view.PagerAdapter;

import

android.support.v4.view.ViewPager;

import

android.support.v4.view.ViewPager.OnPageChangeListener;

import

android.view.LayoutInflater;

import

android.view.MotionEvent;

import

android.view.View;

import

android.view.View.OnTouchListener;

import

android.view.Window;

import

java.util.ArrayList;

import

java.util.List;

import

cn.edu.sjzc.student.R;

import

cn.edu.sjzc.student.uiFragment.MainTabActivity;

import

cn.edu.sjzc.student.util.JpushUtil;

import

cn.jpush.android.api.JPushInterface;

public

class

GuideActivity
extends

BaseActivity
implements

OnTouchListener {

    private

ViewPager viewPager;

    private

List<view> listView;

    private

List<view> listDots;

    private

int

thePos =
0;

    private

int

oldPosition;

    private

int

count =
0;

    private

long

firstTime =
0;

    private

long

secondTime =
0;

    @Override

    public

void

onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);

        JPushInterface.init(this);

        init();

        registerMessageReceiver(); 
//
used for receive msg

        if

(isFirstStart()) {

            setTarget();

            setContentView(R.layout.activity_guide);

            initViewPager();

            initDots();

        }
else

{

            Intent
it =
new

Intent();

            it.setClass(this,
AppStartActivicy.
class);

            startActivity(it);

            finish();

        }

    }

    //
初始化 JPush。如果已经初始化,但没有登录成功,则执行重新登录。

    private

void

init() {

        JPushInterface.init(getApplicationContext());

    }

    @Override

    protected

void

onResume() {

        isForeground
=
true;

        super.onResume();

        JPushInterface.onResume(this);

    }

    @Override

    protected

void

onPause() {

        isForeground
=
false;

        super.onPause();

        JPushInterface.onPause(this);

    }

    @Override

    protected

void

onDestroy() {

        unregisterReceiver(mMessageReceiver);

        super.onDestroy();

    }

    //for
receive customer msg from jpush server

    private

MessageReceiver mMessageReceiver;

    public

static

final

String MESSAGE_RECEIVED_ACTION =
"cn.edu.sjzc.student.broadcasterceiver.MESSAGE_RECEIVED_ACTION";

    public

static

final

String KEY_TITLE =
"title";

    public

static

final

String KEY_MESSAGE =
"message";

    public

static

final

String KEY_EXTRAS =
"extras";

    public

void

registerMessageReceiver() {

        mMessageReceiver
=
new

MessageReceiver();

        IntentFilter
filter =
new

IntentFilter();

        filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);

        filter.addAction(MESSAGE_RECEIVED_ACTION);

        registerReceiver(mMessageReceiver,
filter);

    }

    public

class

MessageReceiver
extends

BroadcastReceiver {

        @Override

        public

void

onReceive(Context context, Intent intent) {

            if

(MESSAGE_RECEIVED_ACTION.equals(intent.getAction())) {

                String
messge = intent.getStringExtra(KEY_MESSAGE);

                String
extras = intent.getStringExtra(KEY_EXTRAS);

                StringBuilder
showMsg =
new

StringBuilder();

                showMsg.append(KEY_MESSAGE
+
"
: "

+ messge +
"\n");

                if

(!JpushUtil.isEmpty(extras)) {

                    showMsg.append(KEY_EXTRAS
+
"
: "

+ extras +
"\n");

                }

//               
setCostomMsg(showMsg.toString());

            }

        }

    }

    /**

     */

    private

boolean

isFirstStart() {

        SharedPreferences
share = getSharedPreferences(
"fs",
MODE_PRIVATE);

        String
target = share.getString(
"isfs",
"0");

        if

(target.equals(
"0"))
{

            return

true
;

        }
else

{

            return

false
;

        }

    }

    /**

     */

    private

void

setTarget() {

        SharedPreferences
share = getSharedPreferences(
"fs",
MODE_PRIVATE);

        Editor
editor = share.edit();

        editor.putString("isfs",
"no");

        editor.commit();

    }

    private

void

initViewPager() {

        viewPager
= (ViewPager) findViewById(R.id.viewpager);

        listView
=
new

ArrayList<view>();

        LayoutInflater
inflater = getLayoutInflater();

        listView.add(inflater.inflate(R.layout.lay1,
null));

        listView.add(inflater.inflate(R.layout.lay2,
null));

        listView.add(inflater.inflate(R.layout.lay3,
null));

        listView.add(inflater.inflate(R.layout.lay4,
null));

        for

(
int

i =
0;
i < listView.size(); i++) {

            View
view = (View) listView.get(i);

            view.setOnTouchListener(this);

        }

        viewPager.setAdapter(new

MyPagerAdapter(listView));

        viewPager.setOnPageChangeListener(new

MyPagerChangeListener());

    }

    private

void

initDots() {

        listDots
=
new

ArrayList<view>();

        listDots.add(findViewById(R.id.dot01));

        listDots.add(findViewById(R.id.dot02));

        listDots.add(findViewById(R.id.dot03));

        listDots.add(findViewById(R.id.dot04));

    }

    public

class

MyPagerChangeListener
implements

OnPageChangeListener {

        public

void

onPageScrollStateChanged(
int

arg0) {

            //
TODO Auto-generated method stub

        }

        public

void

onPageScrolled(
int

arg0,
float

arg1,
int

arg2) {

            //
TODO Auto-generated method stub

        }

        public

void

onPageSelected(
int

position) {

            ((View)
listDots.get(position))

                    .setBackgroundResource(R.drawable.dot_focused);

            ((View)
listDots.get(oldPosition))

                    .setBackgroundResource(R.drawable.dot_normal);

            oldPosition
= position;

            thePos
= position;

            System.out.println(thePos);

        }

    }

    public

class

MyPagerAdapter
extends

PagerAdapter {

        private

List<view> list;

        public

MyPagerAdapter(List<view> list) {

            this.list
= list;

        }

        @Override

        public

void

destroyItem(View view,
int

index, Object arg2) {

            //
TODO Auto-generated method stub

            ((ViewPager)
view).removeView(list.get(index));

        }

        @Override

        public

void

finishUpdate(View arg0) {

            //
TODO Auto-generated method stub

        }

        @Override

        public

int

getCount() {

            //
TODO Auto-generated method stub

            return

list.size();

        }

        @Override

        public

Object instantiateItem(View view,
int

index) {

            ((ViewPager)
view).addView(list.get(index),
0);

            return

list.get(index);

        }

        @Override

        public

boolean

isViewFromObject(View view, Object object) {

            //
TODO Auto-generated method stub

            return

view == (object);

        }

        @Override

        public

void

restoreState(Parcelable arg0, ClassLoader arg1) {

            //
TODO Auto-generated method stub

        }

        @Override

        public

Parcelable saveState() {

            //
TODO Auto-generated method stub

            return

null
;

        }

        @Override

        public

void

startUpdate(View arg0) {

            //
TODO Auto-generated method stub

        }

    }

    public

boolean

onTouch(View arg0, MotionEvent event) {

        if

(MotionEvent.ACTION_DOWN == event.getAction() && thePos ==
3)
{

            count++;

            if

(count ==
1)
{

                firstTime
= System.currentTimeMillis();

            }
else

{

                secondTime
= System.currentTimeMillis();

                if

(secondTime - firstTime >
0)
{

                    Intent
it =
new

Intent();

                    it.setClass(this,
LoginDemoActivity.
class);

                    startActivity(it);

                    finish();

                }

                count
=
0;

                firstTime
=
0;

                secondTime
=
0;

            }

        }

        return

true
;

    }

}</view></view></view></view></view></view>

最重要的是要放在相应的生命周期中,如果不是在第一配置的话配送会收到但是后台却不能统计,然后需要进行测试

一个是通知栏,另一个是log打印

收到的推送用户可以自定义显示

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

package

cn.edu.sjzc.student.uiActivity;

import

cn.edu.sjzc.student.R;

import

cn.edu.sjzc.student.app.UserApplication;

import

cn.jpush.android.api.JPushInterface;

import

android.app.Activity;

import

android.content.Intent;

import

android.content.SharedPreferences;

import

android.os.Bundle;

import

android.view.View;

import

android.view.ViewGroup.LayoutParams;

import

android.widget.ImageButton;

import

android.widget.TextView;

public

class

TestActivity
extends

BaseActivity {

    private

TextView jpush_title, jpush_content;

    private

String title, content, number;

    private

ImageButton jpush_back;

    @Override

    protected

void

onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_test);

        initView();

        initData();

    }

    private

void

initView() {

        TextView
tv =
new

TextView(
this);

        tv.setText("用户自定义打开的Activity");

        Intent
intent = getIntent();

        if

(
null

!= intent) {

            Bundle
bundle = getIntent().getExtras();

            title
= bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE);

            content
= bundle.getString(JPushInterface.EXTRA_ALERT);

        }

        jpush_back
= (ImageButton) findViewById(R.id.jpush_back);

        jpush_back.setOnClickListener(this);

        jpush_title
= (TextView) findViewById(R.id.jpush_title);

        jpush_content
= (TextView) findViewById(R.id.jpush_content);

    }

    private

void

initData() {

        SharedPreferences
userdata =
this.getSharedPreferences(UserApplication.USER_DATA,
0);

        number
= userdata.getString(UserApplication.USER_DATA_NUMBER,
"");

        jpush_title.setText(title);

        jpush_content.setText(content);

    }

    @Override

    public

void

onClick(View v) {

        super.onClick(v);

        switch

(v.getId()) {

            case

R.id.jpush_back:

                finish();

                break;

        }

    }

}

基本这样就配置成功了,剩下的深入的可以看极光的api,写的很好很详细

时间: 2024-08-05 15:58:58

Android端 配置极光推送的相关文章

关于Android端配置极光推送

因为业务需要,android客户端需要加推送,原来采用的百度推送,但是小米手机有时候收不到,后来换成了极光推送,极光的话所有设备都能收到推送,但是在高峰的时候会推迟,博主说的免费版的,收费的没用过,也不错评论 博主用的android studio开发的,.so文件放置的位置啥的可能和eclipse有点不同,感觉用android studio开发jni一类的真的好费劲,博主现在老腻歪了,唉,废话不多说,进入正题: 首先,去极光推送官网注册一系列流程,不过貌似不用认证,老长时间注册的了,忘得差不多了

.net平台借助第三方推送服务在推送Android消息(极光推送)

.net平台借助第三方推送服务在推送Android消息(极光推送) 最近做的.net项目(Windows Service)需要向Android手机发送推送消息,真是有点困难,没有搞过就不停的搜文档,最后看到了一个开源项目PushSharp,可以在.net平台推送IOS,Android,Windows Phone等设备消息,大喜,然后先做了IOS的,成功了,但是做Android的时候遇到了问题,一直推送不成功,程序执行了,但是推送一直出不来,后来费劲的在网上搜,没有找到,最后放弃使用这种推送And

Ionic项目中使用极光推送-android

对于Ionic项目中使用消息推送服务,Ionic官方提供了ngCordova项目,这个里面的提供了用angularjs封装好的消息推送服务(官方文档),使用的是GitHub上的 PushPlugin 插件,也有相关的实现实例:GitHub地址 ,但是使用的是Google的GCM消息推送服务,一些网络原因,国内GCM可能不怎么好用(自己也没有试可不可以). 于是选择国内的消息推送服务,主要有:百度云推送,腾讯信鸽,极光推送,yunba 等等,其中只有极光推送官方提供了phonegap/cordov

React Native 之极光推送jpush-react-native 手把手配置

这是 react native 配置极光推送使用的组件,比较常用https://github.com/jpush/jpush-react-native 先把组件地址贴出来,方便大家使用参考.如果这个大家不能配置成功,欢迎大家一起入坑交流,有问题联系 QQ379038610(添加备注说明原因) 不扯没用的,还要洗洗睡觉,直接把自己配置iOS极光的步骤给大家贴出来 1,首先大家项目环境,签名证书什么都配置完毕,开始集成推送的前提下 在项目当前目录执行: npm install jpush-react

Qt通过极光推送向app推送消息

简介 最近在做个项目,当客服端收到防盗的消息通知时向手机app推送一个消息,告知有防盗报警.这么小的功能没必要自己写个推送端,极光推送免费而且推送的成功率高,已经能满足我们的需求了. 极光推送的文档大家可以到极光推送的官网查看(http://docs.jiguang.cn/),由于我们这是是使用Qt C++开发的极光推送并没有提供c++的封装,这里我们选择rest API的方式推送,rest API的推送方式的demo以及json格式在http://docs.jiguang.cn/server/

Android客户端与PHP服务端通信(五)---移植使用极光推送

概述 上一节备研究了示例工程的框架,本节准备自己创建工程,并将极光推送移植到其上. 创建工程 首先创建一个工程,工程名和应用名为lovelife,包名com.lygk.lovelife 一直"Next",直到Finish,此时建立工程完毕,如下图 集成JPush SDK 1. 导入SDK开发包 关于集成SDK的方法,JPush 官方文档已经讲得很详细,可以去看 http://docs.jpush.io/guideline/android_guide/ ,这里我简单的描述一下步骤. 首先

Android客户端与PHP服务端通信(四)---极光推送示例工程分析

概述 上一节,描述了注册极光推送并使用其例子的方法,这一节准备研究一下示例工程的框架,为移植它做准备. 分析例程源码 首先分析一下例程的源码结构,建议对照着JPUSH的官方文档(http://docs.jpush.io/)分析,我就是这样做的. 注册应用后,下载的示例工程结构如下, ExampleApplication.java:该类为应用程序定制了一个Application类,因为调用JPush的SDK时,需要调用JPush提供的init()函数API,而按照官方文档的说明"init 只需要在

Android客户端与PHP服务端通信(三)---极光推送使用

概述 推送消息的方式有很多,在这里我选择了极光推送.本节分为上下两部分,首先通过注册极光推送并使用其Demo程序来看一下推送的效果,然后再一步一步的修改到自己的应用上. 注册登录极光推送 开发人员基本上都了解使用第三方的库,很多都需要注册才能使用,极光推送也不例外.直接登录极光推送官网https://www.jpush.cn/,注册自己的账号,注册的流程就不介绍了,这个都会.注册完直接登录, 登录后,可以由下图看到自己还没有创建任何应用. 创建应用 点击"创建应用",界面变为下图. 按

PhoneGap实现信息推送-基于极光推送(Android版)

极光推送插件安装地址: https://github.com/jpush/jpush-phonegap-plugin 安装插件后,需要在AndroidManifest.xml中配置极光平台申请的App Key: <meta-data android:name="JPUSH_APPKEY" android:value="aca4b37e5c00d477b*****" /> 在JPushPlugin.java文件的22行处有报错,需要把这里修改为你自己的主包