由于业务须要,androidclient须要加推送。原来採用的百度推送。可是小米手机有时候收不到。后来换成了极光推送,极光的话全部设备都能收到推送,可是在高峰的时候会推迟。博主说的免费版的,收费的没用过,也不错评论

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

首先,去极光推送官网注冊一系列流程,只是貌似不用认证,老长时间注冊的了,忘得差点儿相同了,然后左側有加入新应用

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

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

再有就是将对应的配置到自己的app中。博主这里直接下载了对应的demo。进行配置,这里的话能够先执行demo。測试一下

由于这个demo的包名和自己的一样,所以仅仅能存在一个demo,好,如今開始配置自己的demo

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

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

然后是配置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。写的非常好非常具体

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

  1. 1、Android Studio集成极光推送(Jpush) 报错 java.lang.UnsatisfiedLinkError: cn.jpush.android.service.PushProtoco

    Android studio 集成极光推送(Jpush) (华为手机)报错, E/JPush: [JPushGlobal] Get sdk version fail![获取sdk版本失败!] W/Sy ...

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

    最近做的.net项目(Windows Service)需要向Android手机发送推送消息,真是有点困难,没有搞过就不停的搜文档,最后看到了一个开源项目PushSharp,可以在.net平台推送IOS ...

  3. Android开发之极光推送基本步骤

    [转]:http://wyong.blog.51cto.com/1115465/1402842 两天在研究推送的问题,后来确定了用极光推送,本人将整个过程整理一下: 1.到极光官网注册账号:https ...

  4. linux下PHP后台配置极光推送问题

    一.composer.json配置注意空格 按照极光推送官网所述,在composer.json下写入: "require": { "jpush/jpush": ...

  5. java服务端的 极光推送

    项目中用到了极光推送  下面写下笔记 首先引入jar包   下载地址https://docs.jiguang.cn/jpush/resources/(非maven项目的下载地址) <depend ...

  6. android最新版 极光推送

    极光推送对于移动开发的程序员都不陌生,用起来也挺方便的,今天在这里给大家介绍下最先版的极光推送的用法,超级简单. 1.在build.gradle里面添加两个方法并引用一个库文件 1.1在default ...

  7. Android集成JPush极光推送

    推送原理 参考网址:https://blog.csdn.net/huangli1466384630/article/details/79889473 SDK下载 https://docs.jiguan ...

  8. Android开发 集成极光推送中的问题

    AndroidManifest.xml清单文件报错: cn.jpush.android.service.DataProvider@exported value=(true)报错,解决如下: 根据报错行 ...

  9. [原]Android Studio使用极光推送出现at cn.jpush.android.service.ServiceInterface.a(Unknown Source) 已解决

随机推荐

  1. 制作一个 JavaScript 小游戏

    简评: 作者学习了编程两个月,边学边做了一个 JavaScript 小游戏,在文中总结了自己在这个过程中的一些体会,希望能给其他初学者一些帮助. 对于很多想学编程但一直没下定决心的同学来说,最大的问题 ...

  2. vmware 14黑屏处理办法

    从12升级到了14,但是发现所有的虚拟机都不能用了,黑屏.挂起的时候反而会显示界面,但是继续运行就是黑屏. 记录下解决办法. 修复LSP 以管理员身份运行CMD命令: netsh winsock re ...

  3. TCP/IP详解(一)

    SYN中的MSS选项是告诉对端,本端在本地连接的每个TCP分节中愿意接收的最大数据量.发送端TCP使用接收端的MSS值作为发送分节的最大大小. TCP半关闭使用的情况较少,可用于通知对端本端数据已输入 ...

  4. 12.0&12.1 Xcode开发包

    12.1开发包下载链接 12.0开发包下载链接 12.1(16B91)开发包下载链接 Finder打开后,按command+shift+G前往这个地址: /Applications/Xcode.app ...

  5. 【HTTP】如何正常关闭连接

    参考:<HTTP权威指南> 所有HTTP客户端.服务器或者代理都可以任意时刻关闭一条TCP传输连接.但是服务器永远无法确定它关闭“空闲”连接的那一刻,在线路那一头的客户端有没有数据要发送. ...

  6. for 循环练习题

    X3 * 6528 = 3X * 8256X为一个数字 填入一个数字 使等式成立 for (var x=1;x<=9&&x>0;x++) { if ((x*10+3)*65 ...

  7. 【sqli-labs】 less28a GET- Blind based -All you Union&Select Belong to us -String -Single quote-parenthesis(GET型基于盲注的去除了Union和Select的单引号带括号字符型注入)

    和less28没什么区别,直接上个payload吧 http://192.168.136.128/sqli-labs-master/Less-28a/?id=0')%a0uNion%a0sElect% ...

  8. rev

    功能说明:反向输出文件内容.   字符串反转   文本反转

  9. JDBC对MySQL数据库存储过程的调用

    一.MySQL数据库存储过程: 1.什么是存储过程 存储过程(英文:Stored Procedure)是在大型数据库系统中,为了完成特定功能而编写的一组的SQL语句集.存储过程经编译存储在数据库中,用 ...

  10. selenium使用Xpath+CSS+JavaScript+jQuery的定位方法(治疗selenium各种定位不到,点击不了的并发症)

    跟你说,你总是靠那个firebug,chrome的F12啥的右击复制xpath绝对总有一天踩着地雷炸的你死活定位不到,这个时候就需要自己学会动手写xpath,人脑总比电脑聪明,开始把xpath语法给我 ...