@先看看效果是不是自己想要的吧@
参考极光文档:https://docs.jiguang.cn/jpush/client/Android/android_guide/
android手动集成:
第一步:下载sdk资源 https://docs.jiguang.cn/jpush/resources/
第二步:解压缩 jpush-android--3.x.x-release.zip 集成压缩包
复制libs文件夹里的所有文件到你工程中的对应目录下
(附加:将demo里面的libs文件夹里的一个jar包添加到项目里的libs里面
)
第三步:在module的gradle配置中添加如下配置:
比如:
第四步:配置AndroidManifest.xml
根据 SDK 压缩包里的 AndroidManifest.xml 样例文件,来配置应用程序项目的 AndroidManifest.xml 。
主要步骤为:
- 复制备注为 "Required" 的部分
- 将标注为“您应用的包名”的部分,替换为当前应用程序的包名
- 将标注为“您应用的Appkey”的部分,替换为在Portal上注册该应用的的Key,例如:9fed5bcb7b9b87413678c407
小帖士
如果使用android studio, 可在AndroidManifest中引用applicationId的值,在build.gradle配置中 defaultConfig节点下配置,如:
defaultConfig {
applicationId "cn.jpush.example" // <--您应用的包名
……
}
在AndroidManifest中使用 ${applicationId} 引用gradle中定义的包名
AndroidManifest 配置示例:(参考jmessage-sdk-android-2.6.0.zip里的AndroidManifest 配置)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ied.zqchat">
<!--==============================================极光sdk配置================================================-->
<!-- Required -->
<permission
android:name="您应用的包名.permission.JPUSH_MESSAGE"
android:protectionLevel="signature" />
<!-- Required -->
<uses-permission android:name="您应用的包名.permission.JPUSH_MESSAGE" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- Optional. Required for location feature -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <!-- 用于开启 debug 版本的应用在6.0 系统上 层叠窗口权限 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<!--==============================================极光sdk配置================================================-->
<application
android:name=".application.ZqApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".ui.LoginActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ui.MainActivity"></activity>
<activity android:name=".ui.RegisterActivity"></activity>
<!--==============================================极光sdk配置================================================-->
<!-- Required SDK 核心功能-->
<!-- 可配置android:process参数将PushService放在其他进程中 -->
<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>
<!-- 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" />
<category android:name="您应用的包名" />
</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" />
<!-- Required since JCore 1.1.7. SDK 核心功能-->
<provider
android:name="cn.jpush.android.service.DataProvider"
android:authorities="您应用的包名.DataProvider"
android:exported="true" />
<!--<provider-->
<!--android:name="com.activeandroid.content.ContentProvider"-->
<!--android:authorities="com.ied.jiguangchat"-->
<!--android:exported="true" />-->
<!-- Required JMessage SDK核心功能-->
<receiver
android:name="cn.jpush.im.android.helpers.IMReceiver"
android:enabled="true"
android:exported="false">
</receiver>
<!-- Required. For publish channel feature -->
<!-- JPUSH_CHANNEL 是为了方便开发者统计APK分发渠道。-->
<!-- 例如: -->
<!-- 发到 Google Play 的APK可以设置为 google-play; -->
<!-- 发到其他市场的 APK 可以设置为 xxx-market。 -->
<!-- 目前这个渠道统计功能的报表还未开放。-->
<meta-data
android:name="JPUSH_CHANNEL"
android:value="developer-default" />
<!-- Required. AppKey copied from Portal -->
<meta-data
android:name="JPUSH_APPKEY"
android:value="您应用的Appkey" />
<!--==============================================极光sdk配置================================================-->
</application>
</manifest>
第五步:初始化sdk (需要在AndroidManifest里自己配置)
package com.ied.zqchat.application;
import android.app.Application;
import cn.jpush.im.android.api.JMessageClient;
public class ZqApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
JMessageClient.init(this);
JMessageClient.setDebugMode(true);
}
}
第六步:写登录注册代码
LoginActivity.java:
package com.ied.zqchat.ui;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.ied.zqchat.R;
import cn.jpush.im.android.api.JMessageClient;
import cn.jpush.im.api.BasicCallback;
public class LoginActivity extends AppCompatActivity implements View.OnClickListener {
private EditText edtUsername;
private EditText edtPassword;
private Button btnLogin;
private TextView btnRegister;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
initView();
}
private void initView() {
edtUsername = (EditText) findViewById(R.id.edt_username);
edtPassword = (EditText) findViewById(R.id.edt_password);
btnLogin = (Button) findViewById(R.id.btn_login);
btnRegister = (TextView) findViewById(R.id.btn_register);
btnLogin.setOnClickListener(this);
btnRegister.setOnClickListener(this);
//测试
edtUsername.setText("zhengxiao");
edtPassword.setText("zhengxiao");
}
@Override
public void onClick(View v) {
String username = edtUsername.getText().toString().trim();
String password = edtPassword.getText().toString().trim();
switch (v.getId()) {
case R.id.btn_login:
if (!TextUtils.isEmpty(username) && !TextUtils.isEmpty(password)) {
JMessageClient.login(username, password, new BasicCallback() {
@Override
public void gotResult(int i, final String s) {
if (i == 0) {
startActivity(new Intent(LoginActivity.this, MainActivity.class));
LoginActivity.this.finish();
} else {
Toast.makeText(LoginActivity.this, s, Toast.LENGTH_LONG).show();
}
}
});
}else{
Toast.makeText(this, "用户名和密码不能为空", Toast.LENGTH_LONG).show();
}
break;
case R.id.btn_register:
startActivity(new Intent(LoginActivity.this,RegisterActivity.class));
break;
}
}
}
RegisterActivity.java:
package com.ied.zqchat.ui;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import com.ied.zqchat.R;
import cn.jpush.im.android.api.JMessageClient;
import cn.jpush.im.api.BasicCallback;
public class RegisterActivity extends AppCompatActivity implements View.OnClickListener {
private ImageView ivBack;
private EditText edtUsername;
private EditText edtPassword;
private Button btnRegister;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
initView();
}
private void initView() {
ivBack = (ImageView) findViewById(R.id.iv_back);
edtUsername = (EditText) findViewById(R.id.edt_username);
edtPassword = (EditText) findViewById(R.id.edt_password);
btnRegister = (Button) findViewById(R.id.btn_register);
btnRegister.setOnClickListener(this);
ivBack.setOnClickListener(this);
}
@Override
public void onClick(View v) {
String username = edtUsername.getText().toString().trim();
String password = edtPassword.getText().toString().trim();
switch (v.getId()) {
case R.id.btn_register:
JMessageClient.register(username, password, new BasicCallback() {
@Override
public void gotResult(int i, String s) {
if (i == 0) {
Toast.makeText(RegisterActivity.this, "注册成功!请登陆。", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(RegisterActivity.this, "错误原因:" + s, Toast.LENGTH_LONG).show();
}
}
});
break;
case R.id.iv_back:
finish();
break;
}
}
}
activity_login.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff"
android:orientation="vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="60dp"
android:src="@mipmap/icon"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_weight="1"
android:orientation="vertical"
android:paddingBottom="30dp"
android:paddingLeft="30dp"
android:paddingRight="30dp"
android:paddingTop="60dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/username_icon"/>
<EditText
android:id="@+id/edt_username"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00000000"
android:ems="10"
android:hint="用户名"
android:inputType="textPersonName"
android:paddingLeft="10dp"
android:textColor="#000"
android:textSize="14sp"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:background="#d1cece"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/password_icon"/>
<EditText
android:id="@+id/edt_password"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@null"
android:ems="20"
android:hint="密 码"
android:inputType="textPersonName"
android:paddingLeft="10dp"
android:textColor="#000"
android:textSize="14sp"/>
</LinearLayout>
</LinearLayout>
<Button
android:id="@+id/btn_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:background="@color/colorPrimaryDark"
android:text="登陆"
android:textColor="#fff"/>
<TextView
android:id="@+id/btn_register"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="没有账号?注册一个>>"
android:textColor="#5D5D5D"
android:textSize="12sp"/>
</LinearLayout>
</RelativeLayout>
activity_register.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="@color/colorPrimary"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="5dp"
android:src="@mipmap/back"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="新账号"
android:textColor="#fff"
android:textSize="16sp"/>
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:paddingBottom="30dp"
android:paddingLeft="30dp"
android:paddingRight="30dp"
android:paddingTop="60dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/username_icon"/>
<EditText
android:id="@+id/edt_username"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00000000"
android:ems="10"
android:hint="用户名"
android:inputType="textPersonName"
android:paddingLeft="10dp"
android:textColor="#000"
android:textSize="14sp"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:background="#d1cece"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/password_icon"/>
<EditText
android:id="@+id/edt_password"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@null"
android:ems="20"
android:hint="密 码"
android:inputType="textPersonName"
android:paddingLeft="10dp"
android:textColor="#000"
android:textSize="14sp"/>
</LinearLayout>
<Button
android:id="@+id/btn_register"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:background="@color/colorPrimaryDark"
android:paddingBottom="10dp"
android:paddingTop="10dp"
android:text="注册"
android:textColor="#fff"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
最后附上源码地址:
密码:z09y