SMS Phonegap 3.0 для Android и iOS

Я ищу плагины для телефонной связи, которые будут работать с Phonegap 3.x. Мне нужно, чтобы он работал в Android и iOS. Было бы предпочтительнее, если бы был один плагин для обоих, но это нормально, если есть 2 отдельных плагина, которые я могу использовать. Это также предпочтительнее, если я могу установить его с помощью команды:

phonegap local plugin add

Есть ли такой плагин? Или есть инструкции по обновлению существующего sms-плагина для работы с телефонной связью 3.0?

Edit

Я разблокировал репо плагина, который работает на 2.9, и я пытаюсь заставить его работать в phonegap 3.x(https://github.com/aharris88/phonegap-sms-plugin) и до сих пор я могу потянуть его в проект phonegap с помощью команды

phonegap local plugin add https://github.com/aharris88/phonegap-sms-plugin

и он правильно помещает необходимые ему разрешения в AndroidManifest.xml и помещает эту функцию в файл res/xml/config.xml, но когда я устанавливаю его на свой телефон, он не говорит, что ему требуется разрешение на отправку текстов, и я не получаю никакого успеха или сообщение об ошибке из этого кода:

var number = $('#number').val();
var message = $('#text').val();
alert("Send text to "+number+" with message: "+message);
SmsPlugin.prototype.send(number, message, '',
    function () {
        alert('Message sent successfully');
    },
    function (e) {
        alert('Message Failed:' + e);
    }
);

Ответы

Ответ 1

Лучшим способом отладки было использование ADT (Android Developer Tools). Было много мелочей. Эта статья была очень полезным ресурсом: http://devgirl.org/2013/09/17/how-to-write-a-phonegap-3-0-plugin-for-android/

Вот код sms.java:

package com.adamwadeharris.sms;

import org.json.JSONArray;
import org.json.JSONException;
import android.app.PendingIntent;
import android.content.Intent;
import android.telephony.SmsManager;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.PluginResult;

public class Sms extends CordovaPlugin {
    public final String ACTION_SEND_SMS = "send";

    @Override
    public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException {
        if (action.equals(ACTION_SEND_SMS)) {
            try {               
                String phoneNumber = args.getString(0);
                String message = args.getString(1);
                String method = args.getString(2);

                if(method.equalsIgnoreCase("INTENT")){
                    invokeSMSIntent(phoneNumber, message);
                    callbackContext.sendPluginResult(new PluginResult( PluginResult.Status.NO_RESULT));
                } else{
                    send(phoneNumber, message);
                }

                callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK));
                return true;
            }
            catch (JSONException ex) {
                callbackContext.sendPluginResult(new PluginResult( PluginResult.Status.JSON_EXCEPTION));
            }           
        }
        return false;
    }

    private void invokeSMSIntent(String phoneNumber, String message) {
        Intent sendIntent = new Intent(Intent.ACTION_VIEW);
        sendIntent.putExtra("sms_body", message);
        sendIntent.putExtra("address", phoneNumber);
        sendIntent.setType("vnd.android-dir/mms-sms");
        this.cordova.getActivity().startActivity(sendIntent);
    }

    private void send(String phoneNumber, String message) {
        SmsManager manager = SmsManager.getDefault();
        PendingIntent sentIntent = PendingIntent.getActivity(this.cordova.getActivity(), 0, new Intent(), 0);
        manager.sendTextMessage(phoneNumber, null, message, sentIntent, null);
    }
}

Здесь код sms.js:

var sms = {
    send: function(phone, message, method, successCallback, failureCallback) {
        cordova.exec(
            successCallback,
            failureCallback,
            'Sms',
            'send',
            [phone, message, method]
        );
    }
}

module.exports = sms;

И вот файл plugin.xml:

<plugin xmlns="http://www.phonegap.com/ns/plugins/1.0"
           id="com.adamwadeharris.sms"
      version="0.1.0">
    <name>Sms</name>
    <description>Cordova SMS Send Plugin</description>
    <license>MIT</license>
    <keywords>cordova,phonegap,sms</keywords>


    <js-module src="www/sms.js" name="Sms">
        <clobbers target="window.sms" />
    </js-module>

    <!-- android -->
    <platform name="android">
        <config-file target="res/xml/config.xml" parent="/*">
            <feature name="Sms">
                <param name="android-package" value="com.adamwadeharris.sms.Sms"/>
            </feature>
        </config-file>

        <config-file target="AndroidManifest.xml" parent="/manifest">
            <uses-permission android:name="android.permission.SEND_SMS" />
        </config-file>

        <source-file src="src/android/Sms.java" target-dir="src/com/adamwadeharris/sms" />
    </platform>

</plugin>

Edit Кроме того, у меня есть плагин, доступный на github: https://github.com/aharris88/phonegap-sms-plugin

Edit Этот плагин теперь переместился в: https://github.com/cordova-sms/cordova-sms-plugin

Ответ 2

Вы можете посмотреть ниже ссылку для отправки SMS в Android. Все остальные плагины PhoneGap, доступные на Git, устарели.

https://github.com/javatechig/phonegap-sms-plugin

Вы можете найти шаги использования вышеприведенного плагина здесь

** Я не уверен, что он работает с PhoneGap3.0, но это отлично работает для меня в версии 2.9. **

Ответ 3

Недавно я преобразовал старый плагин в 3.0, у меня был вопрос, но полный код включен вместе с ответом на мой вопрос, который может оказаться полезным для вас. См. Ниже

Пользовательский плагин Phonegap 3.0

Этот возвращает значение для вашего javascript-вызывающего. Надеюсь, что это поможет, я буду рад ответить на любые вопросы.