android 极光sdk手动集成
程序员文章站
2024-03-23 23:46:34
...
@先看看效果是不是自己想要的吧@
参考官方文档集成:https://docs.jiguang.cn/jmessage/client/jmessage_android_guide/
第一步:下载sdk -->https://docs.jiguang.cn/jmessage/resources/
第二步:解压sdk压缩包
将libs文件夹下面的所有内容拷贝到项目的libs下
注意:在module的gradle配置中添加一下配置:
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
第三步:配置AndroidManifest.xml
根据 SDK 压缩包里demo中的 AndroidManifest.xml 样例文件,来配置应用程序项目的 AndroidManifest.xml 。
主要步骤为:
- 复制备注为 "Required" 的部分
- 将标注为“您应用的包名”的部分,替换为当前应用程序的包名
- 将标注为“您应用的Appkey”的部分,替换为在Portal上注册该应用的的Key,例如:9fed5bcb7b9b87413678c407
小帖士
如果使用android studio, 可在AndroidManifest中引用applicationId的值,在build.gradle配置中 defaultConfig节点下配置,如:
defaultConfig {
applicationId "cn.jmessage.example" // <--您应用的包名
……
}
在AndroidManifest中使用 ${applicationId} 引用gradle中定义的包名
AndroidManifest 示例:
<?xml version="1.0" encoding="utf-8"?>
<manifest package="您自己的包名"
xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="2"
android:versionName="1.0.1">
<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" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<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_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<application
android:name="Your Application Name"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name">
<!-- 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="false" />
<!-- 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" />
</application>
</manifest>
第四步:初始化sdk
init 只需要在应用程序启动时调用一次即可。
以下代码定制一个本应用程序 Application 类。需要在 AndoridManifest.xml 里配置。
public class JGApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//设置调试模式
// You can enable debug mode in developing state. You should close debug mode when release.
JMessageClient.setDebugMode(true);
//sdk初始化
JMessageClient.init(this,true);//true - 启用消息漫游,false - 关闭。
}
}
然后附上登录注册代码:
LoginActivity.java:
package com.ied.jgchat.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.jgchat.MainActivity;
import com.ied.jgchat.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;
private static final int REQUEST_CODE_GO_TO_REGIST = 100;
@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:
Intent intent = new Intent(this,RegisterActivity.class);
//启动Activity
//启动该Activity是为了获取注册界面回传的数据
startActivityForResult(intent,REQUEST_CODE_GO_TO_REGIST);
//startActivity(new Intent(LoginActivity.this,RegisterActivity.class));
break;
}
}
/**
* startActivityForResult()
* 当RegistActivity finish()后 将会自动调用该onActivityResult方法。
* @param requestCode 请求码
* @param resultCode 结果码
* @param data 回传数据
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode){
case REQUEST_CODE_GO_TO_REGIST:
//判断注册是否成功 如果注册成功
if(resultCode==RESULT_OK){
//则获取data中的账号和密码 动态设置到EditText中
String username=data.getStringExtra("username");
String password=data.getStringExtra("password");
edtUsername.setText(username);
edtPassword.setText(password);
}
break;
}
}
}
RegisterActivity.java:
package com.ied.jgchat.ui;
import android.content.Intent;
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.jgchat.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之前 回传给LoginActivity两个参数 将参数回传给登录界面
Intent data = new Intent();
data.putExtra("username",username);
data.putExtra("password",password);
setResult(RESULT_OK,data);
finish();
break;
}
}
}
更多参考官网写自己的项目代码即可!!!