React Native 轻松集成分享功能(Android 篇)
关于推送的集成请参考这篇文章,关于统计的集成请参考这篇文章,本篇文章将引导你集成分享功能。
在集成插件之前,需要在各大开放平台上成功注册应用,并通过审核(支持 3 个可选的主流平台)。支持的平台如下:
第一步:安装
npm install jshare-react-native --save
npm install jcore-react-native --save
react-native link
第二步:配置
如果 link 失败,则需要进行手动配置 settings.gradle 和 build.gradle 部分
2.1 配置 settings.gradle
your project/settings.gradle
include ':app', ':jshare-react-native', ':jcore-react-native'
project(':jshare-react-native').projectDir = new File(rootProject.projectDir, '../node_modules/jshare-react-native/android')
project(':jcore-react-native').projectDir = new File(rootProject.projectDir, '../node_modules/jcore-react-native/android')
2.2 配置 build.gradle
your project/app/build.gradle
android {
...
defaultConfig {
applicationId "your application id"
...
manifestPlaceholders = [
JSHARE_PKGNAME: "cn.jiguang.share.demo",
JPUSH_APPKEY: "your app key", //在此替换你的APPKey
JPUSH_CHANNEL: "developer-default", //应用渠道号, 默认即可
TENCENT_APPID: "your tencent app id"
]
}
...
signingConfigs {
debug {
storeFile file("jshare.jks") //你的签名文件路径
storePassword "sdkteam" //你的文件保存密码
keyAlias "jshare" //你的别名
keyPassword "sdkteam" //你的签名密码
}
release {
storeFile file("jshare.jks") //你的签名文件路径
storePassword "sdkteam" //你的文件保存密码
keyAlias "jshare" //你的别名
keyPassword "sdkteam" //你的签名密码
}
}
buildTypes {
release {
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
signingConfig signingConfigs.debug
}
debug {
signingConfig signingConfigs.debug
}
}
...
dependencies {
compile project(':jshare-react-native')
compile project(':jcore-react-native')
}
}
2.3 配置 AndroidManifest.xml
your app/AndroidManifest.xml
...
<application>
...
<!-- Required. For publish channel feature -->
<!-- JPUSH_CHANNEL 是为了方便开发者统计APK分发渠道。-->
<!-- 例如: -->
<!-- 发到 Google Play 的APK可以设置为 google-play; -->
<!-- 发到其他市场的 APK 可以设置为 xxx-market。 -->
<!-- 目前这个渠道统计功能的报表还未开放。-->
<meta-data android:name="JPUSH_CHANNEL" android:value="${JPUSH_CHANNEL}"/>
<meta-data android:name="JPUSH_APPKEY" android:value="${JPUSH_APPKEY}"/>
<meta-data android:name="JSHARE_PKGNAME" android:value="${applicationId}" />
<meta-data android:name="TENCENT_APPID" android:value="${TENCENT_APPID}" />
<!-- Optional 微信分享回调,wxapi必须在包名路径下,否则回调不成功-->
<activity
android:name=".wxapi.WXEntryActivity"
android:theme="@android:style/Theme.NoTitleBar"
android:exported="true" />
</application>
2.4 添加 WXEntryActivity
需要在你的 app 下新建一个 wxapi 的包名,然后创建 WXEntryActivity。
your app/src/.../wxapi/WXEntryActivity.java
package yourPackageName.wxapi;
import cn.jiguang.share.wechat.WeChatHandleActivity;
public class WXEntryActivity extends WeChatHandleActivity {
}
2.5 添加 JGShareSDK.xml
在你的 assets 目录下添加 JGShareSDK.xml,并且将新浪微博,QQ,微信的 AppId 和 AppSecret 替换成自己的。
<?xml version="1.0" encoding="utf-8"?>
<DevInfor>
<!-- 如果不需要支持某平台,可缺省该平台的配置-->
<!-- 各个平台的KEY仅供DEMO演示,开发者要集成发布需要改成自己的KEY-->
<SinaWeibo
AppKey="374535501"
AppSecret="baccd12c166f1df96736b51ffbf600a2"
RedirectUrl="https://www.jiguang.cn"/>
<QQ
AppId="1106011004"
AppKey="YIbPvONmBQBZUGaN"/>
<Wechat
AppId="wxc40e16f3ba6ebabc"
AppSecret="dcad950cd0633a27e353477c4ec12e7a"/>
</DevInfor>
做完了以上步骤,sync 一下项目,如果成功了,接下来就可以开始使用了。

2.6 加入 JSharePackage
your app/src/../MainApplication.java
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new JSharePackage(SHUTDOWN_TOAST, SHUTDOWN_LOG)
);
}
初始化:还是在 MainAppliation 中加入一下代码初始化 JShareInterface:
@Override
public void onCreate() {
super.onCreate();
SoLoader.init(this, false);
// 在 Init 之前调用,设置为 true,则会打印 debug 级别日志,否则只会打印 warning 级别以上的日志
// JShareInterface.setDebugMode(true);
JShareInterface.init(this);
}
第三步:使用
接下来就可以在 JS 中引入 JShareModule 调用它的接口:
your component.js
...
import JShareModule from 'jshare-react-native';
Android 接口
getPlatformList(cb)
/**
* 获取SDK所有能用的平台名称,如要使用某个平台,必须在JGShareSDK.xml中配置。
* Android only
* @param {Function} callback 返回值 list 是一个数组
*/
usage:
JShareModule.getPlatformList((list) => {
console.log(list);
});
share(message, successCallback, failCallback)
/**
* 分享
* @param {object} message = {
*
* platformString 必填,用于分享置不同的平台 //可以是 'wechat_session' / 'wechat_timeLine' / 'wechat_favourite' / 'qq' / 'qzone' / 'sina_weibo' / 'sina_weibo_contact'
* type 必填
*
* {
* type: 'text'
* platform: platformString // 分享到指定平台
* text: String
* imagePath: // 选填,新浪微博本地图片地址,其他平台没有这个字段(iOS 不支持这个字段)
* }
*
* {
* type: 'image'
* platform: platformString // 分享到指定平台
* imagePath: String // 本地图片路径 imagePath, imageUrl imageArray 必须三选一
* text: String // 选填
* imageUrl: String // 网络图片地址,必须以 http 或 https 开头,imagePath, imageUrl imageArray 必须三选一 (iOS 不支持这个字段)
* imageArray: [String] // (选填: 分享到 Qzone 才提供这个字段) 如果需要分享多张图片需要这个参数,数组中问题图片路径 imagePath, imageUrl imageArray 必须三选一
* }
*
* {
* type: 'video'
* platform: platformString // 分享到指定平台
* title: String // 选填
* url: String // 视频跳转页面 url
* text: String // 选填
* imagePath: String // 选填,缩略图,本地图片路径
*
* videoUrl: String // QQ 空间本地视频 (iOS 不支持这个字段)
* }
*
* {
* type: 'audio'
* platform: platformString // 分享到指定平台
* musicUrl: String //必填 点击直接播放的 url
* url: String //选填,点击跳转的 url
* imagePath: String //选填,缩略图,本地图片路径,imagePath,imageUrl 必须二选一
* imageUrl: String // 选填,网络图片路径,imagePath, imageUrl 必须二选一
* title: String // 选填
* text: String // 选填
* }
*
* {
* type: 'file'
* platform: platformString // 分享到指定平台
* path: String // 必填,文件路径
* fileExt: String // 必填,文件类型后缀
* tile: String
* }
*
* {
* type: 'emoticon'
* platform: platformString // 分享到指定平台
* imagePath: String // 必填,本地图片路径
* }
*
* {
* type: 'app' // wechat_favourite 不支持
* platform: platformString // 分享到指定平台
* url: String // 点击跳转 url
* extInfo: String // 选填 第三方应用自定义数据
* path: String // 选填 对应 app 数据文件
* title: String // 选填
* text: String // 选填
* }
*
* {
* type: 'link'
* platform: platformString // 分享到指定平台
* url: String // 必填,网页 url
* imagePath: String // 选填,本地图片路径 imagePath,imageUrl 必须二选一
* imageUrl: String // 选填,网络图片地址 imagePath imageUrl 必须二选一 (iOS 不支持)
* title: String // 选填
* text: String // 选填
* }
*
* {
* type: 'undefined'
* platform: platformString // 分享到指定平台
* }
*
* @param {Function} success = function (state) {} ##
* state = {state: String} state = 'success' / 'fail' / 'cancel' / 'unknow'
*
* @param {Function} fail = function (error) {} ##
* error = {code: number, descript: String}
*/
usage:
var message = {
platform: "wechat_session",
type: "image",
text: "JShare test text",
imagePath: "/storage/emulated/0/DCIM/Camera/xx.jpg"
};
JShareModule.share(message, (map) => {
console.log("share succeed, map: " + map);
}, (map) => {
console.log("share failed, map: " + map);
})
getSocialUserInfo(param, successCallback, failCallback)
/**
* 获取社交平台用户信息
* @param {Object} param = {
* platform: String //可以是 'wechat_session' / 'wechat_timeLine' / 'wechat_favourite' / 'qq' / 'qzone' / 'sina_weibo' / 'sina_weibo_contact'
* }
* @param {Function} success function (userInfo) {}
* userInfo = {
* name: String
* iconUrl: String // 社交平台头像链接
* gender: String // 'female' / 'male'
* response: Object // 社交平台上的原始数据
* }
*
* @param {Function} fail = function (error) {} ##
* error = {code: number, descript: String}
*/
usage:
var param = {
platform: "wechat_session"
};
JShareModule.getSocialUserInfo(param, (map) => {
console.log(map);
}, (errorCode) => {
console.log("errorCode: " + errorCode);
});
isPlatformAuth(param, callback)
/**
* 判断某平台是否支持授权
*
* @param {Object} param = {
* platform: String //可以是 'wechat_session' / 'wechat_timeLine' / 'wechat_favourite' / 'qq' / 'qzone' / 'sina_weibo' / 'sina_weibo_contact'
* }
* @param {Function} callback = (Boolean) => {}
*/
usage:
var param = {
platform: "wechat_session"
};
JShareModule.isPlatformAuth(param, (result) => {
console.log(param.platform + "is Auth: " + result);
});
isClientValid(param, callback)
/**
* 判断该平台的分享是否有效
* Android only
* @param {Object} param = {
* platform: String //可以是 'wechat_session' / 'wechat_timeLine' / 'wechat_favourite' / 'qq' / 'qzone' / 'sina_weibo' / 'sina_weibo_contact'
* }
* @param {Function} callback = (Boolean) => {}
*/
usage:
var param = {
platform: "wechat_session"
};
JShareModule.isClientValid(param, (result) => {
console.log(param.platform + "is valid: " + result);
});
authorize(param, successCallback, failCallback)
/**
* 授权接口
* @param {Object} param = {
* platform: String //可以是 'wechat_session' / 'wechat_timeLine' / 'wechat_favourite' / 'qq' / 'qzone' / 'sina_weibo' / 'sina_weibo_contact'
* }
* @param {Function} success
* @param {Function} fail
*/
usage:
var param = {
platform: "wechat_session"
};
JShareModule.authorize(param, (map) => {
console.log("Authorize succeed " + map);
}, (errorCode) => {
console.log("Authorize failed, errorCode : " + errorCode);
});
isAuthorize(param, callback)
/**
* 判断是否授权接口
* @param {Object} param = {
* platform: String //可以是 'wechat_session' / 'wechat_timeLine' / 'wechat_favourite' / 'qq' / 'qzone' / 'sina_weibo' / 'sina_weibo_contact'
* }
* @param {Function} callback = (Boolean) => {}
*/
usage:
var param = {
platform: "wechat_session"
};
JShareModule.isAuthorize(param, (result) => {
console.log("param is Authorize: " + result);
});
cancelAuthWithPlatform(param, callback)
/**
* 删除用户授权本地数据
*
* @param {Object} param = {
* platform: String //可以是 'wechat_session' /
* 'wechat_timeLine' /
* 'wechat_favourite' /
* 'qq' /
* 'qzone' /
* 'sina_weibo' /
* 'sina_weibo_contact'
* }
* @param {Function} callback = (Int) => {}
* @code 返回码,0 表示成功删除
*/
usage:
var param = {
platform: "wechat_session"
};
JShareModule.cancelAuthWithPlatform(param, (code) => {
if (code === 0) {
console.log("remove authorize succeed");
} else {
console.log("remove authorize failed, errorCode: " + code);
}
});
作者:KenChoi - 极光推送
原文:React Native 轻松集成分享功能(Android 篇)
知乎专栏:极光日报
React Native 轻松集成分享功能(Android 篇)的更多相关文章
- React Native 轻松集成分享功能(iOS 篇)
产品一直催我在 RN 项目中添加分享功能,一直没找到合适的库,今天让我看到了一个插件分享给大家. 在集成插件之前,需要在各大开放平台上成功注册应用,并通过审核(支持 3 个可选的主流平台).支持的平台 ...
- React Native 轻松集成统计功能(Android 篇)
关于推送的集成请参考这篇文章,本篇文章将引导你集成统计功能,只需要简单的三个步骤就可以集成统计功能. 第一步 安装 在你的项目路径下执行命令: npm install janalytics-react ...
- React Native 轻松集成统计功能(iOS 篇)
最近产品让我加上数据统计功能,刚好极光官方支持数据统计 支持了 React Native 版本 第一步 安装: 在你的项目路径下执行命令: npm install janalytics-react-n ...
- React Native之微信分享(iOS Android)
React Native之微信分享(iOS Android) 在使用React Native开发项目的时候,基本都会使用到微信好友或者微信朋友圈分享功能吧,那么今天我就带大家实现以下RN微信好友以及朋 ...
- Android中使用ShareSDK集成分享功能
引言 现在APP开发集成分享功能已经是非常普遍的需求了.其他集成分享技术我没有使用过,今天我就来介绍下使用ShareSDK来进行分享功能开发的一些基本步骤和注意点,帮助朋友们避免一些坑.好了 ...
- React Native之通知栏消息提示(android)
React Native之通知栏消息提示(android) 一,需求分析与概述 1.1,推送作为手机应用的基本功能,是手机应用的重要部分,如果自己实现一套推送系统费时费力,所以大部分的应用都会选择使用 ...
- WEB通知和React Native之即时通讯(iOS Android)
WEB通知和React Native之即时通讯(iOS Android) 一,需求分析 1.1,允许服务器主动发送信息给客户端,客户端能监听到并且能接收. 1.2,为了方便同一个系统内的用户可以指定某 ...
- React Native之(支持iOS与Android)自定义单选按钮(RadioGroup,RadioButton)
React Native之(支持iOS与Android)自定义单选按钮(RadioGroup,RadioButton) 一,需求与简单介绍 在开发项目时发现RN没有给提供RadioButton和Rad ...
- React Native 真机调试(iOS / Android)
React Native 真机调试(iOS / Android) https://reactnative.dev/docs/running-on-device https://developer.ap ...
随机推荐
- ubuntu14.04 64位 安装JDK1.7
ubuntu14.04 64位 安装JDK1.7 1 新建文件夹 youhaidong@youhaidong:~$ sudo mkdir /usr/lib/jvm 2 解压文件 youhaidong@ ...
- 基于jQuery的一个提示功能的实现
最近有点忙,没有时间更新自己的博客,只能说我在原地踏步了,不知道你们进步了没有? 今天给大家分享一个提示的实现,有点简单,适合小白同学学习.下面是效果图 提示的功能: 当鼠标进入“我的菜单”的子菜单时 ...
- 第九篇:Map/Reduce 工作机制分析 - 作业的执行流程
前言 从运行我们的 Map/Reduce 程序,到结果的提交,Hadoop 平台其实做了很多事情. 那么 Hadoop 平台到底做了什么事情,让 Map/Reduce 程序可以如此 "轻易& ...
- [BZOJ4804]欧拉心算
题面戳我 题意:求 \[\sum_{i=1}^{n}\sum_{j=1}^{n}\phi(\gcd(i,j))\] 多组数据,\(n\le10^7\). sol SBT 单组数据\(O(\sqrt n ...
- [BZOJ4034] [HAOI2015] T2 (树链剖分)
Description 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所 ...
- Android 运行时权限及APP适配
Android 6.0起,Android加强了权限管理,引入运行时权限概念.对于: 1. Android 5.1(API 22)及以前版本,应用权限必须声明在AndroidManifest.xml中, ...
- 华为/华三交换机snmp配置
snmp-agent /使能snmp服务/snmp-agent local-engineid 000007DB7F000001000049DD /系统自 ...
- Ceph常见问题百科全书
Ceph是目前炙手可热的一个统一分布式存储系统,具有优异的性能.可靠性.可扩展性.其可轻松扩展到数 PB 容量, 支持多种工作负载的高性能(每秒输入/输出操作[IOPS]和带宽),具有极其高的可靠性. ...
- 题目1023:EXCEL排序
//都是泪啊,搞了半天,竟然是成绩的数据类型搞成了string,输出测试用例的次数竟然搞成了排序的类别...细节决定成败!!! 题目描述: Excel可以对一组纪录按任意指定列排序.现请你编写程序实现 ...
- ASP.NET部分代码示例
using System; using System.Collections.Generic; using Model; using System.Data; using System.Data.Sq ...