react-native - 不和谐上的反应原生共享
问题描述
我正在一个项目中实现一项功能,我们希望用户能够在不和谐上分享帖子。使用https://react-native-community.github.io/react-native-share/docs/share-single在 facebook 或 twitter 上实现共享很容易
但是 shareSingle 上不支持不和谐,我不想要一个调用本机共享菜单的共享按钮,它可以链接到不和谐,我想要一个不和谐图标直接重定向到不和谐。但我什至找不到使用 url 架构或通用链接打开不和谐应用程序以触发应用程序(不和谐://或不和谐://不和谐或不和谐应用:// ...)的方法。
我试图找到一种访问本机共享的方法,以便单独打开不和谐共享,但找不到方法。
有没有人实现了不和谐共享,并且有任何关于如何在 react-native 中实现这一点的提示?
解决方案
您可以创建一个 fork 项目并添加以下文件:
android/src/main/java/cl/json/social/DiscordShare.java
package cl.json.social;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import java.io.File;
import android.os.Environment;
import android.net.Uri;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReadableMap;
public class DiscordShare extends SingleShareIntent {
private static final String PACKAGE = "com.discord";
private static final String PLAY_STORE_LINK = "https://play.google.com/store/apps/details?id=com.discord";
public DiscordShare(ReactApplicationContext reactContext) {
super(reactContext);
}
@Override
public void open(ReadableMap options) throws ActivityNotFoundException {
super.open(options);
// extra params here
this.openIntentChooser();
}
@Override
protected String getPackage() {
return PACKAGE;
}
@Override
protected String getDefaultWebLink() {
return null;
}
@Override
protected String getPlayStoreLink() {
return PLAY_STORE_LINK;
}
}
编辑android/src/main/java/cl/json/RNShareModule.java
package cl.json;
// ...
import cl.json.social.DiscordShare;
public class RNShareModule extends ReactContextBaseJavaModule implements ActivityEventListener {
// ...
private enum SHARES {
facebook,
generic,
pagesmanager,
twitter,
whatsapp,
instagram,
instagramstories,
googleplus,
email,
pinterest,
messenger,
snapchat,
sms,
linkedin,
discord; // ADDED
public static ShareIntent getShareClass(String social, ReactApplicationContext reactContext) {
SHARES share = valueOf(social);
switch (share) {
case generic:
return new GenericShare(reactContext);
case facebook:
return new FacebookShare(reactContext);
case pagesmanager:
return new FacebookPagesManagerShare(reactContext);
case twitter:
return new TwitterShare(reactContext);
case whatsapp:
return new WhatsAppShare(reactContext);
case instagram:
return new InstagramShare(reactContext);
case instagramstories:
return new InstagramStoriesShare(reactContext);
case googleplus:
return new GooglePlusShare(reactContext);
case email:
return new EmailShare(reactContext);
case pinterest:
return new PinterestShare(reactContext);
case sms:
return new SMSShare(reactContext);
case snapchat:
return new SnapChatShare(reactContext);
case messenger:
return new MessengerShare(reactContext);
case linkedin:
return new LinkedinShare(reactContext);
case discord:
return new DiscordShare(reactContext); // ADDED
default:
return null;
}
}
};
}
// ...
最后编辑index.js
//...
class RNShare {
//...
static Social = {
FACEBOOK: NativeModules.RNShare.FACEBOOK || 'facebook',
FACEBOOK_STORIES: NativeModules.RNShare.FACEBOOK_STORIES || 'facebook-stories',
PAGESMANAGER: NativeModules.RNShare.PAGESMANAGER || 'pagesmanager',
TWITTER: NativeModules.RNShare.TWITTER || 'twitter',
WHATSAPP: NativeModules.RNShare.WHATSAPP || 'whatsapp',
INSTAGRAM: NativeModules.RNShare.INSTAGRAM || 'instagram',
INSTAGRAM_STORIES: NativeModules.RNShare.INSTAGRAM_STORIES || 'instagramstories',
GOOGLEPLUS: NativeModules.RNShare.GOOGLEPLUS || 'googleplus',
EMAIL: NativeModules.RNShare.EMAIL || 'email',
PINTEREST: NativeModules.RNShare.PINTEREST || 'pinterest',
LINKEDIN: NativeModules.RNShare.LINKEDIN || 'linkedin',
SMS: NativeModules.RNShare.SMS || 'sms',
DISCORD: NativeModules.RNShare.DISCORD || 'discord', // ADDED
};
// ...
}
在您的项目中使用:
Share.shareSingle({
title: 'test',
message: 'hola mundo',
url: 'https://json.cl',
social: Share.Social.DISCORD,
})
.then((res) => {
console.log(res);
})
.catch((err) => {
err && console.log(err);
});
结果:
推荐阅读
- android - 高程在 ContraintLayout 中不起作用
- excel - VBA 列表框添加的异常行为
- rest - 如何在 OpenEdge 11.6 中为您的 REST 应用程序实施安全性?
- java - CountDownTimer 在后台运行的 BackPressed 上没有停止,可能是 handler.postDelayed() 是问题所在。如何在此代码中修复它?
- java - SQL - 将流水线函数转换为 java 存储过程/函数
- c# - C# Linq 如何将每个缺失的年份和月份添加到数据中
- java - SpringIntegration Cron 触发器
- python - 有什么方法可以加快 Python 乌龟的速度(0)?
- sql-server - 在子查询中对一组数字求和
- python - 如何连接两个列表对象并连接列表中的字符串对象