2016-02-21 2 views
19

Я добавил кнопку +1 в моем приложении: +1 in Cordova/IonicКак разместить кнопку Google Plus +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); 
})(); 

Я также позволил АНИ:

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="https://apis.google.com" /> 

Проблема: Это работает в браузере (ionic serve), но он не работает на приложение ... Когда я нажимаю ничего не происходит ... (нет ошибок ...)

В любом случае я могу сделать эту работу над приложением? (ionic run)

Дополнительная информация Информация/отлаживать:

  1. Если я нажал на кнопку +1 на веб-он не показывает мне красную кнопку на приложение (Read означает, что я уже разделяет эту ссылку) (Он не знает, кто я ..)
  2. Я не хочу, чтобы сделать вход/регистрацию, просто кнопку +1 ...

Если добавить:

<allow-navigation href="*" /> 

в config.xml, он просит меня войти, когда я нажимаю на кнопку +1: (Не следует) enter image description here

Это означает, что кнопка +1 не работает, потому что это «в анонимном браузере », не прошел проверку подлинности с ОС ...

Я также создал демо чистый Android приложение следующие этой инструкции: https://developers.google.com/+/mobile/android/recommend Он отлично работает ... (я могу добавить +1 ссылку ...)

Мои возможно:

  1. В режиме просмотра веб-сайта отображается некоторая возможность сделать собственный вид Android с кнопкой +1.

  2. сделать поддельную кнопку +1, и когда он нажал она называет плагин, который делает некоторые короля запроса/нажмите на реальную кнопку +1 ....

  3. Любое предложение о том, как это сделать ?

Возможны ли какие-либо из этих двух возможностей?

Благодарим за помощь!

ответ

1

Если вы не хотите обрабатывать логин, вы можете создать плагин, чтобы добавить родную PlusOneButton. Я сейчас работаю над этим, я постараюсь выпустить его сегодня днем, но поскольку модераторы не любят «связывать только соседей», я объясню, как построить плагин, и я добавлю ссылку как только я закончу его разработку.

Прежде всего, прочитайте guide about how to build a cordova plugin, я не собираюсь входить в этот уровень детализации.

Ваш 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 DEPENDENCY

Вы можете сделать это, добавив следующую строку в 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"); 
+0

: O Вы пришли в последнюю минуту, я протестируйте его сейчас и сообщите через несколько минут ... –

+0

OMG, он работает! Благодаря! Нет, действительно, спасибо! –

+0

Единственная «проблема» теперь - это x, y вещь .... Если я сделаю какой-то прогресс, я буду способствовать репо плагинов! У вас есть хорошая идеология о том, как это решить? Я думал о размещении пустого div, где я хочу его, и использовать «координаты» из него .... –

7

Ваша проблема заключается в том, что пользователь не вошел в систему со своей учетной записью Google внутри браузера cordova, поэтому, очевидно, вы видите приглашение для входа при нажатии кнопки +1.

Я понимаю, что вы хотите получить доступ к глобальной учетной записи Google, подключенной к телефону/ОС пользователя, и использовать ее в своем приложении. Во-первых, вашему приложению нужны учетные данные для доступа к этим данным, тогда они должны быть доступны из браузера cordova. Там есть this plugin, который делает это за вас.

В коде инициализации, вы можете позвонить 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); 
} 
+0

Я не хочу, чтобы войти в систему пользователя (как я указывал раньше), и я видел, что плагин, он не кажется, работа, как я хотел, но я попробую позже .... –

+0

Я не понимаю. Кнопка +1 всегда требует, чтобы пользователь вошел в систему. Причина, по которой он работает в браузере вашего рабочего стола, заключается в том, что вы уже вошли в систему. Попробуйте то же самое в окне private/incognito, и вы увидите приглашение для входа. –

+0

Да, но обычное приложение для Android не нужно это делать ... Но я понимаю, что это похоже на то, что пользователь был в режиме инкогнито/в приватном режиме .... (Я еще не пробовал плагин ...) –