【问题标题】:React-native share on discord不和谐上的反应原生共享
【发布时间】:2021-01-23 08:54:51
【问题描述】:

我正在一个项目中实现一项功能,我们希望用户能够在 discord 上分享帖子。使用https://react-native-community.github.io/react-native-share/docs/share-single

在 facebook 或 twitter 上实现共享很容易

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

我试图找到一种方法来访问原生共享以单独打开不和谐共享,但找不到方法。

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

【问题讨论】:

    标签: react-native discord share deep-linking


    【解决方案1】:

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

    结果:

    【讨论】:

    • 感谢您的想法,iOS 的任何想法,因为我需要两者?
    猜你喜欢
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 2019-01-27
    • 1970-01-01
    • 2021-12-30
    相关资源
    最近更新 更多