すべてのプロダクト
Search
ドキュメントセンター

Mobile Platform as a Service:共有

最終更新日:Jan 17, 2025

この機能は、ベースラインバージョン 10.1.60 以後でサポートされています。ネイティブコードを使用してクライアント側で共有機能を実装できます。

onShareAppMessage

page 上の onShareAppMessage 関数をカスタマイズして、このページで共有するための情報を設定します。

  • デフォルトでは、共有onShareAppMessage ボタンは各ページのメニューの右上に表示されます。 関数を再書き込みする場合、共有するコンテンツのみをカスタマイズします。

  • [共有] ボタンをクリックして、この操作を呼び出すことができます。

  • このイベントは、共有するコンテンツをカスタマイズするために使用されるオブジェクトを返す必要があります。

パラメーター

パラメーター

タイプ

説明

最も初期のバージョン

from

String(文字列)

トリガーソース:

  • button:ユーザーがページの [共有] ボタンをクリックしたときにトリガーされます。

  • menu:ユーザーがページの右上隅にある [共有] ボタンをクリックしたときにトリガーされます。

1.10.0

target

Object(オブジェクト)

from 値が button の場合、target はこの時点で共有機能をトリガーするボタンであり、それ以外の場合は undefined になります。

1.10.0

webViewUrl

String(文字列)

ページに web-view コンポーネントが含まれている場合、web-view の URL が返されます。

1.6.0

戻り値

名前

タイプ

必須

説明

最小バージョン

title

String(文字列)

はい

共有用のタイトルをカスタマイズします。

なし

desc

String(文字列)

いいえ

共有の説明をカスタマイズします。Weibo で共有されるテキストの最大長は 140 文字であるため、制限内で説明を入力する必要があります。

なし

path

String(文字列)

はい

共有するページのパスをカスタマイズします。ミニプログラムのライフサイクルの onLoad メソッドによって、path のカスタムパラメーターを取得できます。パラメーターを送信するには、http get の送信ルールに従います。クライアント側で共有のシナリオを実装する場合、このフィールドの名前はネイティブコードでは page です。

なし

imageUrl

String(文字列)

いいえ

共有用の小さいアイコンをカスタマイズします。この機能は、ネットワーク画像パス、apFilePath、および相対パスをサポートしています。

1.4.0

bgImgUrl

String(文字列)

いいえ

共有プレビュー用の大きい画像をカスタマイズします。推奨画像サイズは 750 x 825 です。この機能は、ネットワーク画像パス、apFilePath、および相対パスをサポートしています。

1.9.0

success

Function(関数)

いいえ

共有完了後のコールバック。

1.4.0

fail

Function(関数)

いいえ

共有失敗後のコールバック。

1.4.0

サンプルコード

Page({
  onShareAppMessage() {
    return {
      title: 'ミニプログラムの例',
      desc: 'ミニプログラムの公式デモ。サポートされている操作機能とコンポーネントを示しています。',
      path: 'page/component/component-pages/view/view?param=123'
    };
  },
});

ページ内で共有機能を開始する

説明

この機能は、ベースライブラリバージョン 1.1.0 以降でサポートされています。

ボタンコンポーネントに open-type="share" 属性を設定できます。これにより、ユーザーがボタンをクリックした後に Page.onShareAppMessage() イベントがトリガーされ、共有ペインがトリガーされます。このイベントが現在のページで定義されていない場合、クリック操作は無効になります。関連コンポーネント:button

App.onShareAppMessage

App(Object) コンストラクター関数では、グローバル共有構成に onShareAppMessage を設定できます。共有機能を呼び出すときに、ページレベルの共有構成を設定していない場合は、グローバル共有構成が適用されます。

my.hideShareMenu(Object)

説明

この機能は、ベースライブラリバージョン 1.7.0 以降でのみサポートされています。以前のバージョンでは、互換性操作 を実行する必要があります。

[共有] ボタンを非表示にします。

パラメーター

名前

タイプ

必須

説明

success

Function(関数)

いいえ

操作が成功した場合のコールバック関数。

fail

Function(関数)

いいえ

操作が失敗した場合のコールバック関数。

complete

Function(関数)

いいえ

操作が終了した場合のコールバック関数。コールバック関数は、操作が成功した場合と失敗した場合の両方で実行されます。

サンプルコード

my.hideShareMenu();

クライアントで拡張機能を実装する

共有機能の実装のカスタマイズ度が高いため、ネイティブミニプログラムの共有機能は現在利用できません。したがって、この機能を自分で実装する必要があります。

実装

  1. ミニプログラムで共有機能を開始すると、この機能は shareTinyAppMsg の JSAPI を呼び出します。また、この機能は、JS の onShareAppMessage メソッドによって返されるオブジェクトのパラメーターをクライアント側に送信します。

  2. クライアント側で JavaScript(JS)プラグインをカスタマイズすることにより、shareTinyAppMsg イベントの処理を実装する必要があります。JS プラグインの実装については、Android カスタム JSAPIiOS カスタム JSAPI をそれぞれ参照してください。

Android のサンプルコード

注記: デフォルトでは、ミニプログラムの右上隅にあるオプションメニューの共有ボタンは非表示になっています。構成コンテナー スイッチをオンにすると、ボタンを表示できます。詳細については、「コンテナー構成」をご参照ください。

  • ミニプログラムコードで次の共有例を開始します。

      Page({
        data: {
          height: 0,
          title: 'ご体験いただきありがとうございます。\nご提案がございましたら、お気軽にご意見をお寄せください。'
        },
        onLoad() {
          const { windowHeight, windowWidth, pixelRatio } = my.getSystemInfoSync();
          this.setData({
            height: windowHeight * 750 / windowWidth
          })
        },
        onShareAppMessage() {
          return {
            title: '結果ページ',
            desc: '結果が正常に取得されました',
            myprop: 'hello', //カスタムパラメーター。ドキュメントのフィールドが要件を満たしていない場合は、自分でフィールドを追加できます。フィールドはクライアント側に送信されます。
            path: 'pages/result/result'
          }
        }
      });
  • クライアント側で次の HTML5 プラグインの例を参照してください。

     package com.mpaas.demo.nebula;
    
      import com.alibaba.fastjson.JSONObject;
      import com.alipay.mobile.antui.dialog.AUNoticeDialog;
      import com.alipay.mobile.h5container.api.H5BridgeContext;
      import com.alipay.mobile.h5container.api.H5Event;
      import com.alipay.mobile.h5container.api.H5EventFilter;
      import com.alipay.mobile.h5container.api.H5SimplePlugin;
    
      public class ShareTinyMsgPlugin extends H5SimplePlugin {
    
          private static final String ACTION_SHARE = "shareTinyAppMsg";
    
          @Override
          public void onPrepare(H5EventFilter filter) {
              super.onPrepare(filter);
              filter.addAction(ACTION_SHARE);
          }
    
          @Override
          public boolean handleEvent(H5Event event, final H5BridgeContext context) {
              String action = event.getAction();
              if (ACTION_SHARE.equals(action)) {
                  JSONObject param = event.getParam();
                  String title = param.getString("title");
                  String desc = param.getString("desc");
                  String myprop = param.getString("myprop");
                  String path = param.getString("page");
                  String appId = event.getH5page().getParams().getString("appId");
    
                  // ここで共有コンポーネントを呼び出して、さらなる機能を実装できます
                  String message = "AppID: " + appId + "\n"
                          + "title: " + title + "\n"
                          + "desc: " + desc + "\n"
                          + "myprop: " + myprop + "\n"
                          + "path: " + path + "\n";
    
                  AUNoticeDialog dialog = new AUNoticeDialog(event.getActivity(),
                          "共有結果", message, "共有成功", "共有失敗");
                  dialog.setPositiveListener(new AUNoticeDialog.OnClickPositiveListener() {
                      @Override
                      public void onClick() {
                          JSONObject result = new JSONObject();
                          result.put("success", true);
                          context.sendBridgeResult(result);
                      }
                  });
                  dialog.setNegativeListener(new AUNoticeDialog.OnClickNegativeListener() {
                      @Override
                      public void onClick() {
                          context.sendError(11, "共有失敗");
                      }
                  });
                  dialog.show();
                  //
                  return true;
              }
              return false;
          }
      }

iOS のコード例

  • デフォルトでは、ミニプログラムの右上隅にある [共有] ボタンは非対応になっています。コンテナの初期化時に、次の API 操作を設定して [共有] ボタンを表示できます。

    説明

    対応するヘッダーファイル #import <TinyappService/TASUtils.h> を手動でインポートする必要があります。

      - (void)application:(UIApplication *)application afterDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
         ...
    
         [TASUtils sharedInstance].shoulShowSettingMenu = YES;
    
         ...
    
      }
  • shareTinyAppMsg JsApi の実装をカスタマイズして、ミニプログラムページから送信されたパラメーターを受け入れます。

    shareTinyAppMsg

  • MPJsApi4ShareTinyAppMsg 実装タイプでは、ミニプログラムページで共有されたパラメーターを取得してビジネスを処理できます。次のコード例を参照してください。

     #import <NebulaPoseidon/NebulaPoseidon.h>
      @interface MPJsApi4ShareTinyAppMsg : PSDJsApiHandler
    
      @end
    
      #import "MPJsApi4ShareTinyAppMsg.h"
      #import <MessageUI/MessageUI.h>      
    
      @interface MPJsApi4ShareTinyAppMsg()<APSKLaunchpadDelegate>
    
      @property(nonatomic, strong) NSString *shareUrlString;
    
      @end
    
      @implementation MPJsApi4ShareTinyAppMsg
    
      - (void)handler:(NSDictionary *)data context:(PSDContext *)context callback:(PSDJsApiResponseCallbackBlock)callback
      {
          [super handler:data context:context callback:callback];
    
          NSString * appId = context.currentSession.createParam.expandParams[@"appId"];
          NSString * page = data[@"page"]?:@"";
          NSString * title = data[@"title"]?:@"";
          NSString * desc = data[@"desc"]?:@"";
    
          // 共有するコンテンツを連結し、共有 SDK を呼び出します
          self.shareUrlString = [NSString stringWithFormat:@"http://appId=%@&page=%@&title=%@&desc=desc", appId, page, title, desc];
          [self openPannel];
      }
    
      - (void)openPannel {
          NSArray *channelArr = @[kAPSKChannelWeibo, kAPSKChannelWeixin, kAPSKChannelWeixinTimeLine, kAPSKChannelSMS, kAPSKChannelQQ, kAPSKChannelQQZone, kAPSKChannelDingTalkSession, kAPSKChannelALPContact, kAPSKChannelALPTimeLine];
          APSKLaunchpad *launchPad = [[APSKLaunchpad alloc] initWithChannels:channelArr sort:NO];
          launchPad.tag = 1000;
          launchPad.delegate = self;
    
          [launchPad showForView:[[UIApplication sharedApplication] keyWindow] animated:YES];
      }
    
      #pragma mark - APSKLaunchpadDelegate
      - (void)sharingLaunchpad:(APSKLaunchpad *)launchpad didSelectChannel:(NSString *)channelName {
          [self shareWithChannel:channelName tag:launchpad.tag];
          [launchpad dismissAnimated:YES];
      }
    
      - (void)shareWithChannel:(NSString *)channelName tag:(NSInteger)tag{
          APSKMessage *message = [[APSKMessage alloc] init];
          message.contentType = @"url";//タイプは「text」、「image」、および「url」です。
          message.content = [NSURL URLWithString:self.shareUrlString];
          message.icon = [UIImage imageNamed:@"MPShareKit.bundle/Icon_Laiwang@2x.png"];
          message.title = @"これがウェブページのタイトルです";
          message.desc = @"これが説明情報です";
          APSKClient *client = [[APSKClient alloc] init];
          client.disableToastDisplay = YES;
    
          [client shareMessage:message toChannel:channelName completionBlock:^(NSError *error, NSDictionary *userInfo) {
              if(! error) {// 成功
                  [AUToast presentToastWithin:[[UIApplication sharedApplication] keyWindow]
                                     withIcon:AUToastIconSuccess
                                         text:@"共有成功"
                                     duration:2
                                       logTag:@"demo"];
              } else {// 失敗
                  NSString *desc = error.localizedFailureReason.length > 0 ? error.localizedFailureReason : @"共有失敗";
                  [AUToast presentToastWithin:[[UIApplication sharedApplication] keyWindow]
                                     withIcon:AUToastIconNone
                                         text:desc
                                     duration:2
                                       logTag:@"demo"];
                  NSLog(@"error = %@", error);
              }
          }];
      }
    
      @end