この機能は、ベースラインバージョン 10.1.60 以後でサポートされています。ネイティブコードを使用してクライアント側で共有機能を実装できます。
onShareAppMessage
page 上の onShareAppMessage 関数をカスタマイズして、このページで共有するための情報を設定します。
デフォルトでは、共有
onShareAppMessageボタンは各ページのメニューの右上に表示されます。 関数を再書き込みする場合、共有するコンテンツのみをカスタマイズします。[共有] ボタンをクリックして、この操作を呼び出すことができます。
このイベントは、共有するコンテンツをカスタマイズするために使用されるオブジェクトを返す必要があります。
パラメーター
パラメーター | タイプ | 説明 | 最も初期のバージョン |
from | String(文字列) | トリガーソース:
| |
target | Object(オブジェクト) |
| |
webViewUrl | String(文字列) | ページに web-view コンポーネントが含まれている場合、web-view の URL が返されます。 |
戻り値
名前 | タイプ | 必須 | 説明 | 最小バージョン |
title | String(文字列) | はい | 共有用のタイトルをカスタマイズします。 | なし |
desc | String(文字列) | いいえ | 共有の説明をカスタマイズします。Weibo で共有されるテキストの最大長は 140 文字であるため、制限内で説明を入力する必要があります。 | なし |
path | String(文字列) | はい | 共有するページのパスをカスタマイズします。ミニプログラムのライフサイクルの onLoad メソッドによって、 | なし |
imageUrl | String(文字列) | いいえ | 共有用の小さいアイコンをカスタマイズします。この機能は、ネットワーク画像パス、apFilePath、および相対パスをサポートしています。 | |
bgImgUrl | String(文字列) | いいえ | 共有プレビュー用の大きい画像をカスタマイズします。推奨画像サイズは 750 x 825 です。この機能は、ネットワーク画像パス、apFilePath、および相対パスをサポートしています。 | |
success | Function(関数) | いいえ | 共有完了後のコールバック。 | |
fail | Function(関数) | いいえ | 共有失敗後のコールバック。 |
サンプルコード
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();クライアントで拡張機能を実装する
共有機能の実装のカスタマイズ度が高いため、ネイティブミニプログラムの共有機能は現在利用できません。したがって、この機能を自分で実装する必要があります。
実装
ミニプログラムで共有機能を開始すると、この機能は
shareTinyAppMsgの JSAPI を呼び出します。また、この機能は、JS のonShareAppMessageメソッドによって返されるオブジェクトのパラメーターをクライアント側に送信します。クライアント側で JavaScript(JS)プラグインをカスタマイズすることにより、
shareTinyAppMsgイベントの処理を実装する必要があります。JS プラグインの実装については、Android カスタム JSAPI と iOS カスタム 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; ... }shareTinyAppMsgJsApi の実装をカスタマイズして、ミニプログラムページから送信されたパラメーターを受け入れます。
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