首页 > 解决方案 > 不和谐上的反应原生共享

问题描述

我正在一个项目中实现一项功能,我们希望用户能够在不和谐上分享帖子。使用https://react-native-community.github.io/react-native-share/docs/share-single在 facebook 或 twitter 上实现共享很容易

但是 shareSingle 上不支持不和谐,我不想要一个调用本机共享菜单的共享按钮,它可以链接到不和谐,我想要一个不和谐图标直接重定向到不和谐。但我什至找不到使用 url 架构或通用链接打开不和谐应用程序以触发应用程序(不和谐://或不和谐://不和谐或不和谐应用:// ...)的方法。

我试图找到一种访问本机共享的方法,以便单独打开不和谐共享,但找不到方法。

有没有人实现了不和谐共享,并且有任何关于如何在 react-native 中实现这一点的提示?

标签: react-nativediscordsharedeep-linking

解决方案


您可以创建一个 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);
      });

结果:

结果不和谐分享


推荐阅读