转发分享

小程序寄生在大流量的App中,因此转发共享功能非常重要,能实现病毒性传播。

在原生的微信小程序有一个onShareAppMessage方法,它会返回一个对象。只要定义这个方法,那页面顶部就会自动出一个转发按钮,让用户进行转发。

而快应用是没有这样的API,也没有这样的按钮,一切都需要手动实现。我们可以通过 React.api.showActionSheet创建一个右上角菜单,然后让某一栏为一个转发按钮,当用户点击它时实现这个功能。

与onShow 一样,我们娜娜奇除了提供页面级别的分享钩子,也提供全局级别的分享钩子,分别称为onShare与onGlobalShare。

  1. // pages/pagexx/index.js
  2. import React from '@react';
  3. class P extends React.Component {
  4. constructor(props) {
  5. super(props);
  6. this.state = {
  7. text: 'this is first line\nthis is second line'
  8. };
  9. }
  10. onShare() {
  11. var navigateToUrl = this.props.path;
  12. return {
  13. title: '预订火车票 - 去哪儿旅行',
  14. imageUrl: 'https://s.aaa.com/bbb/ccc.jpg',
  15. path: navigateToUrl
  16. };
  17. }
  18. remove() {
  19. var textAry = this.state.text.split('\n');
  20. if (!textAry.length) return;
  21. textAry.pop();
  22. this.setState({
  23. text: textAry.join('\n')
  24. });
  25. }
  26. render() {
  27. return (
  28. <div class="container">
  29. <div class="item">
  30. <h2 class="item-list-hd">progress</h2>
  31. <div class="btn-area">
  32. <progress percent="20" show-info />
  33. <progress percent="40" show-info stroke-width="12" />
  34. <progress percent="60" show-info color="pink" />
  35. <progress percent="80" show-info active />
  36. </div>
  37. </div>
  38. </div>
  39. );
  40. }
  41. }
  42. export default P;

app.js中需要添加一个onShowMenu方法,专门给快应用生成右上角菜单。

  1. class Demo extends React.Component {
  2. static config = {
  3. window: {
  4. backgroundTextStyle: 'light',
  5. // navigationBarBackgroundColor: '#0088a4',
  6. navigationBarTitleText: 'mpreact',
  7. navigationBarTextStyle: '#fff'
  8. },
  9. tabBar: {
  10. 'color': '#929292',
  11. 'selectedColor': '#00bcd4',
  12. 'borderStyle': 'black',
  13. 'backgroundColor': '#ffffff',
  14. 'list': [/**/ ]
  15. }
  16. };
  17. globalData = {
  18. ufo: 'ufo'
  19. };
  20. onGlobalShare() {
  21. var navigateToUrl = '/pages/index/index';
  22. return {
  23. title: '预订火车票 - 去哪儿旅行',
  24. imageUrl: 'https://s.aaa.com/bbb/ccc.jpg',
  25. path: navigateToUrl
  26. };
  27. };
  28. onLaunch() {
  29. // eslint-disable-next-line
  30. console.log('App launched');
  31. },
  32. //快应用想实现 分享转发, 关于, 保存桌面
  33. onShowMenu(pageInstance, app){
  34. if(process.env.ANU_ENV === 'quick'){
  35. var api = React.api;
  36. api.showActionSheet({
  37. itemList: ['转发', '保存到桌面', '关于', '取消'],
  38. success: function (ret) {
  39. switch (ret.index) {
  40. case 0: //分享转发
  41. var fn = pageInstance.onShare || app.onGlobalShare;
  42. var obj = fn && fn();
  43. if (obj){
  44. obj.data = obj.data || obj.path;
  45. obj.success = obj.success || function(a){
  46. console.log(a, '分享成功')
  47. }
  48. obj.fail = obj.fail || function(a){
  49. console.log(a, '分享失败')
  50. }
  51. api.share(obj);
  52. }
  53. break;
  54. case 1:
  55. // 保存桌面
  56. api.createShortcut();
  57. break;
  58. case 2:
  59. // 关于
  60. api.getSystemInfo({
  61. success: function(appInfo){
  62. api.redirectTo({
  63. url: `pages/about/index?brand=${appInfo.brand}&version=${appInfo.version}`
  64. });
  65. }
  66. });
  67. break;
  68. case 3:
  69. // 取消
  70. break;
  71. }
  72. }
  73. });
  74. }
  75. }
  76. }
  77. }
  78. // eslint-disable-next-line
  79. export default App(new Demo());