Как разместить кнопку Google Plus +1 внутри кордовой/ионной программы?
Я добавил в приложение +1 кнопку +1:
![+ 1 в Кордове/Ионном]()
Я использовал этот код:
<div class="g-plusone" data-size="tall" data-href="GOOGLE PLAY STORE LINK TO MY APP"></div>
и
(function() {
var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
po.src = 'https://apis.google.com/js/platform.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
})();
Я также разрешил api:
index.html:
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://apis.google.com">
config.xml:
<allow-navigation href="#" onclick="location.href='https://apis.google.com'; return false;" />
Проблема:
Это работает в браузере (ionic serve
), но не работает в приложении...
Когда я нажимаю ничего не происходит... (нет ошибок...)
В любом случае я могу сделать эту работу над приложением? (ionic run
)
Дополнительная информация/информация об отладке:
- Если я нажал кнопку +1 в Интернете, она не покажет мне красную кнопку в приложении (значит, я уже поделился этой ссылкой) (он не знает, кто я..)
- Я не хочу делать логин/регистрацию, просто кнопку +1...
Если я добавлю:
<allow-navigation href="*" />
в config.xml, он просит меня войти в систему, когда я нажимаю кнопку +1: (Это не должно)
![введите описание изображения здесь]()
Это означает, что кнопка +1 не работает, потому что она "в анонимном браузере", не аутентифицирована с ОС...
Я также создал демонстрационное приложение для Android с поддержкой Android: https://developers.google.com/+/mobile/android/recommend
Он отлично работает... (я могу +1 ссылку...)
Мои возможности:
-
В веб-просмотре появится какой-то способ сделать собственное представление Android с кнопкой +1.
-
Сделайте поддельную кнопку +1, и когда она щелкнула, она вызывает плагин, который заставляет кого-то короля запросить/щелкнуть по кнопке реального +1....
-
Любое предложение о том, как это сделать?
Возможны ли какие-либо из этих двух возможностей?
Спасибо за вашу помощь!
Ответы
Ответ 1
Если вы не хотите обрабатывать логин, вы можете создать плагин для добавления родного PlusOneButton
.
Я работаю над этим прямо сейчас, я постараюсь выпустить его сегодня днем, но поскольку модераторы не любят "связывать только соседей", я объясню, как построить плагин, и я добавлю ссылку один раз Я завершаю разработку.
Прежде всего, прочитайте руководство о том, как создать плагин cordova, я не собираюсь входить в этот уровень детализации.
Для вашего подкласса CordovaPlugin понадобятся следующие переменные:
private PlusOneButton mPlusOneButton;
private String URL;
Ваш метод выполнения должен выглядеть следующим образом:
public boolean execute(String action, final JSONArray args, final CallbackContext callbackContext) throws JSONException {
if (action.equals("show")) {//show is the name of the method you call from javascript
URL = "http://www.phonegap.es";//you should pick it from the plugin params
mPlusOneButton = new PlusOneButton(cordova.getActivity());
mPlusOneButton.initialize(URL, null);
//you have to run this part making sure you run it on the UI Thread
cordova.getActivity().runOnUiThread(new Runnable() {
public void run() {
cordova.getActivity().addContentView(mPlusOneButton,new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT));
//position the button wherever you want, you should pick the values from the plugin params
mPlusOneButton.setX(300);
mPlusOneButton.setY(300);
}
});
} else {
return false;
}
return true;
}
Наконец, добавьте метод onResume
, чтобы обновить статус кнопки.
@Override
public void onResume(boolean multitasking) {
super.onResume(multitasking);
mPlusOneButton.initialize(URL, null);
}
Плагин должен будет добавить зависимость com.google.android.gms:play-services-plus
Вы можете сделать это, добавив эту строку в файл plugin.xml
<framework src="com.google.android.gms:play-services-plus:+" />
EDIT: плагин готов https://github.com/jcesarmobile/plusOneButtonPlugin
Чтобы установить его
cordova plugin add https://github.com/jcesarmobile/plusOneButtonPlugin
Чтобы использовать его:
var params = {};
params.url = "http://www.example.com";
params.position = {x:100,y:100};
plusOneButton.show(params);
или
plusOneButton.show("http://www.example.com");
Ответ 2
Ваша проблема заключается в том, что пользователь не вошел в систему со своей учетной записью Google внутри браузера cordova, поэтому, очевидно, вы видите приглашение для входа при нажатии кнопки +1.
Я понимаю, что вы хотите получить доступ к глобальной учетной записи Google, подключенной к пользовательскому телефону/ОС, и использовать ее в своем приложении. Во-первых, вашему приложению нужны учетные данные для доступа к этим данным, тогда они должны быть доступны из браузера cordova. Там этот плагин, который делает это для вас.
В коде инициализации вы можете вызвать window.plugins.googleplus.login(...)
, который будет запрашивать у пользователя подтверждение (если необходимо) и войти в систему.
Убедитесь, что после входа в систему инициализируется кнопка +1, поэтому состояние отображается правильно. Например (если вы используете jQuery):
$(document).ready(function() {
loginToGoogle();
initPlusOneButton();
}
function loginToGoogle() { ... }
function initPlusOneButton() {
var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
po.src = 'https://apis.google.com/js/platform.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
}